From 09db77c5aa08e4fbbe563a10fe01cf8ead81635e Mon Sep 17 00:00:00 2001 From: Gerardo Tauriello <gerardo.tauriello@unibas.ch> Date: Wed, 30 Aug 2017 16:09:13 +0200 Subject: [PATCH] Updated doc for entity and getting/setting atom positions with numpy. --- modules/mol/base/doc/editors.rst | 46 ++++--- modules/mol/base/doc/entity.rst | 220 +++++++++++++++++++------------ 2 files changed, 165 insertions(+), 101 deletions(-) diff --git a/modules/mol/base/doc/editors.rst b/modules/mol/base/doc/editors.rst index 427a6beae..a5f31e8be 100644 --- a/modules/mol/base/doc/editors.rst +++ b/modules/mol/base/doc/editors.rst @@ -421,33 +421,47 @@ Euclidian space. SetAtomTransformedPos(atom_list, pos_list) Set the transformed position of atoms. This method will also update the - original position of the atom by applying the inverse of the entity - transform. + original position of atoms by applying the inverse of the entity transform. + + Setting all positions at once is by far faster than call the function for + each atom, but it is only available if OpenStructure was compiled with an + enabled ``USE_NUMPY`` flag (see :ref:`here <cmake-flags>` for details). The + fastest option to work with all atom positions externally is to extract the + list of :attr:`~ost.mol.EntityHandle.atoms` with + :meth:`ost.mol.EntityHandle.GetPositions` (with *sort_by_index = False*). + Then extract a buffered editor and use the same list of atoms with a + modified numpy array as input to this function. Example: + + .. code-block:: python + + # get atom list and positions + atom_list = ent.atoms + positions = ent.GetPositions(False) + # modify positions but keep ent and atom_list unchanged + # ... + # apply changes to entity all at once + edi = ent.EditXCS(mol.BUFFERED_EDIT) + edi.SetAtomPos(atom_list, positions) + edi.UpdateICS() :param atom: A valid atom handle :type atom: :class:`ost.mol.AtomHandle` - :param atom_list: A valid atom handle - :type atom_list: :class:`ost.mol.AtomHandleList` + :param atom_list: A valid atom handle list or a list of atom :attr:`indices + <ost.mol.AtomHandle.index>`. + :type atom_list: :class:`ost.mol.AtomHandleList` or :class:`list` of + :class:`int` :param pos: The new position :type pos: :class:`~ost.geom.Vec3` - :param pos_list: An array or a list of 3*atom_list.size() floats - :type pos_list: :class:`numpy.array` or :class:`list` of :class:`float` + :param pos_list: An array of positions (shape [*len(atom_list)*, 3], + preferably contiguous array in memory (C order)). + :type pos_list: :class:`numpy.array` .. method:: SetAtomOriginalPos(atom, pos) SetAtomOriginalPos(atom_list, pos_list) Set the original (untransformed) position of atoms. This method will also update the transformed position by applying the entity transform to - the original pos. - - :param atom: A valid atom handle - :type atom: :class:`ost.mol.AtomHandle` - :param atom_list: A valid atom handle - :type atom_list: :class:`ost.mol.AtomHandleList` - :param pos: The new untransformed position - :type pos: :class:`~ost.geom.Vec3` - :param pos_list: An array or a list of 3*atom_list.size() floats - :type pos_list: :class:`numpy.array` or :class:`list` of :class:`float` + the original pos. See :meth:`SetAtomPos` for more details. Editor for the Internal Coordinate System diff --git a/modules/mol/base/doc/entity.rst b/modules/mol/base/doc/entity.rst index 7d5bfd7f7..c36300eb8 100644 --- a/modules/mol/base/doc/entity.rst +++ b/modules/mol/base/doc/entity.rst @@ -37,6 +37,14 @@ The Handle Classes :meth:`FindChain`. This property is read-only. + + :type: :class:`ChainHandleList` (list of :class:`ChainHandle`) + + .. attribute:: chain_count + + Number of chains. Read-only. See :meth:`GetChainCount`. + + :type: :class:`int` .. attribute:: residues @@ -55,7 +63,13 @@ The Handle Classes Also available as :meth:`GetResidueList`. To access a single residue, use :meth:`FindResidue`. - :returns: A list of :class:`residue handles<ResidueHandle>` + :type: :class:`ResidueHandleList` (list of :class:`ResidueHandle`) + + .. attribute:: residue_count + + Number of residues. Read-only. See :meth:`GetResidueCount`. + + :type: :class:`int` .. attribute:: atoms @@ -63,8 +77,14 @@ The Handle Classes :meth:`FindAtom`. This property is read-only. Also available as :meth:`GetAtomList` - - :type: A list of :class:`atom handles<AtomHandle>` + + :type: :class:`AtomHandleList` (list of :class:`AtomHandle`) + + .. attribute:: atom_count + + Number of atoms. Read-only. See :meth:`GetAtomCount`. + + :type: :class:`int` .. attribute:: bounds @@ -90,6 +110,14 @@ The Handle Classes :meth:`GetCenterOfAtoms`. :type: :class:`~ost.geom.Vec3` + + .. attribute:: positions + + Equivalent to calling :meth:`GetPositions` with *sort_by_index = True*. This + property is read-only and only available if OpenStructure was compiled with + an enabled ``USE_NUMPY`` flag (see :ref:`here <cmake-flags>` for details). + + :type: :class:`numpy.array` .. method:: GetName() @@ -114,6 +142,10 @@ The Handle Classes .. method:: GetChainList() See :attr:`chains` + + .. method:: GetChainCount() + + See :attr:`chain_count` .. method:: FindResidue(chain_name, res_num) @@ -132,6 +164,10 @@ The Handle Classes .. method:: GetResidueList() See :attr:`residues` + + .. method:: GetResidueCount() + + See :attr:`residue_count` .. method:: FindAtom(chain_name, res_num, atom_name) @@ -153,6 +189,10 @@ The Handle Classes See :attr:`atoms` + .. method:: GetAtomCount() + + See :attr:`atom_count` + .. method:: EditXCS([edit_mode=mol.EditMode.UNBUFFERED_EDIT]) Request :class:`XCSEditor` for editing the external coordinate system. This @@ -187,12 +227,13 @@ The Handle Classes **Example Usage:** - .. code-block::python + .. code-block:: python + # select calpha atoms of peptides - calphas=ent.Select('aname=CA and peptide=true') + calphas = ent.Select('aname=CA and peptide=true') # select atoms in a box of size 10, centred at the origin - in_box=ent.Select('x=-5:5 and y=-5:5 and z=-5:5') + in_box = ent.Select('x=-5:5 and y=-5:5 and z=-5:5') :param query: The query to be executed. :type query: :class:`Query` / :class:`str` @@ -262,7 +303,17 @@ The Handle Classes .. method:: GetMass() See :attr:`mass` - + + .. method:: GetPositions(sort_by_index=True) + + :return: Array of atom positions for this entity. + :rtype: :class:`numpy.array` (shape [:attr:`atom_count`, 3]) + :param sort_by_index: If True, the atoms are sorted by their + :attr:`~AtomHandle.index`. Otherwise, they are sorted + as they appear in the :attr:`atoms` list. + + This method is only available if OpenStructure was compiled with an enabled + ``USE_NUMPY`` flag (see :ref:`here <cmake-flags>` for details). .. method:: FindWithin(pos, radius) @@ -275,7 +326,7 @@ The Handle Classes :param radius: The radius of the sphere :type radius: float - :returns: A list of :class:`atom handles<AtomHandle>` + :returns: :class:`AtomHandleList` (list of :class:`AtomHandle`) .. class:: ChainHandle @@ -324,7 +375,7 @@ The Handle Classes Also available as :meth:`GetResidueList`. To access a single residue, use :meth:`FindResidue`. - :returns: A list of :class:`residue handles<ResidueHandle>` + :type: :class:`ResidueHandleList` (list of :class:`ResidueHandle`) .. attribute:: in_sequence @@ -347,7 +398,7 @@ The Handle Classes This property is read-only. Also available as :meth:`GetAtomList` - :type: A list of :class:`atom handles<AtomHandle>` + :type: :class:`AtomHandleList` (list of :class:`AtomHandle`) .. attribute:: bounds @@ -376,7 +427,7 @@ The Handle Classes .. method:: FindResidue(res_num) - Get residue by residue number. See also :attr:`residues` + Get residue by residue number. See also :attr:`residues`. :param res_num: residue number :type res_num: :class:`ResNum` @@ -387,11 +438,7 @@ The Handle Classes .. method:: GetResidueList() - Get list of all residues of this chain. For peptide chains, the residues - are usually ordered from N- to C-terminus.To access a single residue, use - :meth:`FindResidue`. - - :returns: A list of :class:`residue handles<ResidueHandle>` + See :attr:`residues`. .. method:: FindAtom(res_num, atom_name) @@ -464,6 +511,15 @@ The Handle Classes :type: str + .. attribute:: atoms + + Get list of all atoms of this residue. To access a single atom, use + :meth:`FindAtom`. + + This property is read-only. Also available as :meth:`GetAtomList` + + :type: :class:`AtomHandleList` (list of :class:`AtomHandle`) + .. attribute:: bounds Axis-aligned bounding box of the residue. Read-only. @@ -577,8 +633,7 @@ The Handle Classes .. method:: GetAtomList() - Get list of all atoms of this residue. To access a single atom, use - :meth:`FindAtom`. + See :attr:`atoms` .. method:: IsPeptideLinking() @@ -864,6 +919,14 @@ The View Classes :meth:`FindChain`. This property is read-only. + + :type: :class:`ChainViewList` (list of :class:`ChainView`) + + .. attribute:: chain_count + + Number of chains. Read-only. See :meth:`GetChainCount`. + + :type: :class:`int` .. attribute:: residues @@ -882,7 +945,13 @@ The View Classes Also available as :meth:`GetResidueList`. To access a single residue, use :meth:`FindResidue`. - :type: A list of :class:`ResidueViews <ResidueView>` + :type: :class:`ResidueViewList` (list of :class:`ResidueView`) + + .. attribute:: residue_count + + Number of residues. Read-only. See :meth:`GetResidueCount`. + + :type: :class:`int` .. attribute:: atoms @@ -891,7 +960,13 @@ The View Classes This property is read-only. Also available as :meth:`GetAtomList` - :type: A list of :class:`AtomViews <AtomView>` + :type: :class:`AtomViewList` (list of :class:`AtomView`) + + .. attribute:: atom_count + + Number of atoms. Read-only. See :meth:`GetAtomCount`. + + :type: :class:`int` .. attribute:: bounds @@ -1034,18 +1109,19 @@ The View Classes Find all atoms that are within radius of the given position. See :meth:`EntityHandle.FindWithin`. - :param pos: - :type pos: :class:`~ost.geom.Vec3` - :param radius: - :type radius: float - :rtype: :class:`AtomViewList` + :param pos: Center of sphere + :type pos: :class:`~ost.geom.Vec3` + :param radius: The radius of the sphere + :type radius: float + + :returns: :class:`AtomHandleList` (list of :class:`AtomHandle`) .. method:: FindChain(chain_name) Find chain by name. - :param chain_name: - :type chain_name: str + :param chain_name: Chain identifier, e.g. "A" + :type chain_name: str :returns: The chain if present in the view, an invalid :class:`ChainView` otherwise :rtype: :class:`ChainView` @@ -1112,24 +1188,6 @@ The View Classes .. method:: GetGeometricStart() :rtype: :class:`~ost.geom.Vec3` - - .. attribute:: chain_count - - Number of chains. Read-only. See :meth:`GetChainCount`. - - :type: int - - .. attribute:: residue_count - - Number of residues. Read-only. See :meth:`GetResidueCount`. - - :type: int - - .. attribute:: atom_count - - Number of atoms. Read-only. See :meth:`GetAtomCount`. - - :type: int .. method:: GetCenterOfAtoms() @@ -1138,29 +1196,11 @@ The View Classes :rtype: :class:`~ost.geom.Vec3` - .. method:: GetAtomList() - - See :attr:`atoms` - - :rtype: :class:`AtomViewList` - .. method:: GetBondCount() Get number of bonds :rtype: int - .. method:: GetChainCount() - - Get number chains. See :attr:`chain_count` - - :rtype: int - - .. method:: GetResidueCount() - - See :attr:`residue_count` - - :rtype: int - .. method:: GetBondList() See :attr:`bonds` @@ -1173,10 +1213,6 @@ The View Classes :rtype: :class:`EntityHandle` - .. method:: GetResidueList() - - :rtype: :class:`ResidueViewList` - .. method:: GetGeometricEnd() :rtype: :class:`~ost.geom.Vec3` @@ -1184,13 +1220,26 @@ The View Classes .. method:: GetChainList() See :attr:`chains` + + .. method:: GetChainCount() + + See :attr:`chain_count` + + .. method:: GetResidueList() + + See :attr:`residues` + + .. method:: GetResidueCount() - :rtype: :class:`ChainViewList` + See :attr:`residue_count` + + .. method:: GetAtomList() + + See :attr:`atoms` .. method:: GetAtomCount() - Get number of atoms. See :attr`atom_count`. - :rtype: int + See :attr:`atom_count` .. class:: ChainView @@ -1199,12 +1248,12 @@ The View Classes .. attribute:: name - The chain name. The name uniquely identifies the chain in the entity. In - most cases, the chain name is one character. This is restriction of the PDB - file format. However, you are free to use longer names as long as you don't - want to save them as PDB files + The chain name. The name uniquely identifies the chain in the entity. In + most cases, the chain name is one character. This is a restriction of the + PDB file format. However, you are free to use longer names as long as you + don't want to save them as PDB files. - This property is read-only. To change the name, use an :class:`XCSEditor`. + This property is read-only. To change the name, use an :class:`XCSEditor`. Also available as :meth:`GetName` @@ -1212,8 +1261,8 @@ The View Classes .. attribute:: residues - List of all residues of this chain. The residues are sorted from N- to - C-terminus. Usually the residue numbers are in ascending order + List of all residues of this chain. The residues are sorted from N- to + C-terminus. Usually the residue numbers are in ascending order (see :attr:`in_sequence`). This property is read-only. @@ -1226,10 +1275,10 @@ The View Classes for res in chain.residues: print res.name, res.atom_count - Also available as :meth:`GetResidueList`. To access a single residue, use - :meth:`FindResidue`. + Also available as :meth:`GetResidueList`. To access a single residue, use + :meth:`FindResidue`. - :type: A list of :class:`residue views<residueView>` + :type: :class:`ResidueViewList` (list of :class:`ResidueView`) .. attribute:: in_sequence @@ -1252,7 +1301,7 @@ The View Classes This property is read-only. Also available as :meth:`GetAtomList` - :type: A list of :class:`atom handles<AtomHandle>` + :type: :class:`AtomViewList` (list of :class:`AtomView`) .. attribute:: bounds @@ -1394,8 +1443,6 @@ The View Classes See :attr:`residues` - :rtype: bool - .. method:: InSequence() See :attr:`in_sequence` @@ -1513,9 +1560,12 @@ The View Classes .. attribute:: atoms - List of atoms in this view. + Get list of all atoms of this residue. To access a single atom, use + :meth:`FindAtom`. + + This property is read-only. Also available as :meth:`GetAtomList` - :type: :class:`AtomViewList` + :type: :class:`AtomHandleList` (list of :class:`AtomHandle`) .. attribute:: index -- GitLab