def contact_matrix(coord, cutoff=15.0, returntype="numpy", box=None): '''Calculates a matrix of contacts within a numpy array of type float32. 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 (``box = [Lx, Ly, Lz]``), then periodic boundary conditions are applied. Only orthorhombic boxes are currently supported. .. versionchanged:: 0.11.0 Keyword *suppress_progmet* and *progress_meter_freq* were removed. ''' if returntype == "numpy": adj = (distance_array(coord, coord, box=box) < cutoff) return adj elif returntype == "sparse": # Initialize square List of Lists matrix of dimensions equal to number of coordinates passed sparse_contacts = sparse.lil_matrix((len(coord), len(coord)), dtype='bool') if box is not None: # if PBC contact_matrix_pbc(coord, sparse_contacts, box, cutoff) else: # if no PBC contact_matrix_no_pbc(coord, sparse_contacts, cutoff) return sparse_contacts
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.base.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 = (distance_array(coord, coord, box=box) < cutoff) 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
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.base.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. Note ---- :module:`scipy.sparse` is require for using *sparse* matrices; if it cannot be imported then an `ImportError` is raised. .. versionchanged:: 0.11.0 Keyword *suppress_progmet* and *progress_meter_freq* were removed. ''' if returntype == "numpy": adj = (distance_array(coord, coord, box=box) < cutoff) return adj elif returntype == "sparse": if sparse is None: # hack: if we are running with minimal dependencies then scipy was # not imported and we have to bail here (see scipy import at top) raise ImportError("For sparse matrix functionality you need to " "import scipy.") # Initialize square List of Lists matrix of dimensions equal to number # of coordinates passed sparse_contacts = 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