{"action":"created","comment":{"url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments/69984832","id":69984832,"diff_hunk":"@@ -0,0 +1,319 @@\n+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*-\n+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4\n+#\n+# MDAnalysis --- http://www.MDAnalysis.org\n+# Copyright (c) 2006-2015 Naveen Michaud-Agrawal, Elizabeth J. Denning, Oliver Beckstein\n+# and contributors (see AUTHORS for the full list)\n+#\n+# Released under the GNU Public Licence, v2 or any higher version\n+#\n+# Please cite your use of MDAnalysis in published work:\n+#\n+# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein.\n+# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations.\n+# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787\n+#\n+\n+\"\"\"\n+Diffusion map --- :mod:`MDAnalysis.analysis.diffusionmap`\n+=====================================================================\n+\n+:Authors: Eugen Hruska, John Detlefs\n+:Year: 2016\n+:Copyright: GNU Public License v3\n+\n+The module contains the non-linear dimension reduction method diffusion map.\n+The diffusion map provides an estimate of the slowest collective\n+coordinates for a trajectory. This non-linear dimension reduction method\n+assumes that the trajectory is long enough to represent a probability\n+distribution of a protein close to the equilibrium. Furthermore, the diffusion\n+map assumes that the diffusion coefficients associated with the dynamical\n+motion of molecules in the system are constant. The eigenvectors with\n+the largest eigenvalues are the more dominant collective coordinates. Assigning\n+phyiscal meaning of the 'collective coordinates' is a fundamentally difficult\n+problem. The time complexity of the diffusion map is O(N^3), where N is the\n+number of frames in the trajectory, and the in-memory storage complexity is\n+O(N^2). Instead of a single trajectory a sample of protein structures\n+can be used. The sample should be equiblibrated, at least locally. The order of\n+the sampled structures in the trajectory is irrelevant.\n+\n+The :ref:`Diffusion-Map-tutorial` shows how to use diffusion map for dimension\n+reduction.\n+\n+More details about diffusion maps are in [Lafon1]_ , [Ferguson1]_, and\n+[Clementi1]_.\n+\n+.. _Diffusion-Map-tutorial:\n+\n+Diffusion Map tutorial\n+--------------------\n+\n+The example uses files provided as part of the MDAnalysis test suite\n+(in the variables :data:`~MDAnalysis.tests.datafiles.PSF` and\n+:data:`~MDAnalysis.tests.datafiles.DCD`). This tutorial shows how to use the\n+Diffusion Map class.\n+\n+First load all modules and test data ::\n+\n+   >>> import MDAnalysis\n+   >>> import numpy as np\n+   >>> import MDAnalysis.analysis.diffusionmap as diffusionmap\n+   >>> from MDAnalysis.tests.datafiles import PSF, DCD\n+\n+Given a universe or atom group, we can create and eigenvalue decompose\n+the Diffusion Matrix from that trajectory using :class:`DiffusionMap`:: and get\n+the corresponding eigenvalues and eigenvectors.\n+\n+   >>> u = MDAnalysis.Universe(PSF,DCD)\n+\n+We leave determination of the appropriate scale parameter epsilon to the user,\n+[Clementi1]_ uses a complex method involving the k-nearest-neighbors of a\n+trajectory frame, whereas others simple use a trial-and-error approach with\n+a constant epsilon. Currently, the constant epsilon method is implemented\n+by MDAnalysis.\n+\n+   >>> dmap = diffusionmap.DiffusionMap(u, select='backbone', epsilon=2)\n+   >>> dmap.run()\n+\n+From here we can perform an embedding onto the k dominant eigenvectors. This\n+is similar to the idea of a transform in Principal Component Analysis, but the\n+non-linearity of the map means there is no explicit relationship between the\n+lower dimensional space and our original trajectory. However, this is an\n+isometry (distance preserving map), which means that points close in the lower\n+dimensional space are close in the higher-dimensional space and vice versa.\n+In order to embed into the most relevant low-dimensional space, there should\n+exist some number of dominant eigenvectors, whose corresponding eigenvalues\n+diminish at a constant rate until falling off, this is referred to as a\n+spectral gap and should be somewhat apparent for a system at equilibrium with a\n+high number of frames.\n+\n+   >>> num_eigenvectors = # some number less than the number of frames\n+   >>> fit = dmap.transform(num_eigenvectors, time=1)\n+\n+From here it can be difficult to interpret the data, and is left as a task\n+for the user. The `diffusion distance` between frames i and j is best\n+approximated by the euclidean distance  between rows i and j of\n+self.diffusion_space. A Jupyter [notebook](https://github.com/jdetle/dimension_reduction/blob/master/diffusionMaps/Diffusion_Map_Analysis_of_ADK.ipynb)\n+providing an analysis of protein pening and closing has been provided.\n+\n+Classes\n+-------\n+\n+.. autoclass:: DiffusionMap\n+.. autoclass:: DistMatrix\n+\n+References\n+---------\n+\n+If you use this Dimension Reduction method in a publication, please\n+reference:\n+..[Ferguson1] Ferguson, A. L.; Panagiotopoulos, A. Z.; Kevrekidis, I. G.\n+Debenedetti,  P. G. Nonlinear dimensionality reduction in molecular\n+simulation: The diffusion map approach  Chem. Phys. Lett. 509, 1−11 (2011)\n+..[deLaPorte1] J. de la Porte, B. M. Herbst, W. Hereman, S. J. van der Walt.\n+An Introduction to Diffusion Maps.\n+..[Lafon1] Coifman, Ronald R., Lafon, Stephane Diffusion maps.\n+Appl. Comput. Harmon. Anal. 21, 5–30  (2006).\n+..[Lafon2] Boaz Nadler, Stéphane Lafon, Ronald R. Coifman, Ioannis G.\n+Kevrekidis. Diffusion maps, spectral clustering and reaction coordinates\n+of dynamical systems. Appl. Comput. Harmon. Anal. 21 (2006) 113–127\n+..[Clementi1] Rohrdanz, M. A, Zheng, W, Maggioni, M, & Clementi, C.\n+Determination of reaction coordinates via locally scaled\n+diffusion map. J. Chem. Phys. 134, 124116 (2011).\n+\n+.. If you choose the default metric, this module uses the fast QCP algorithm\n+[Theobald2005]_ to calculate the root mean square distance (RMSD) between\n+two coordinate sets (as implemented\n+in :func:`MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix`).\n+When using this module in published work please cite [Theobald2005]_.\n+\n+\n+\"\"\"\n+from six.moves import range\n+import logging\n+import warnings\n+\n+import MDAnalysis as mda\n+import numpy as np\n+\n+from .rms import rmsd\n+from .base import AnalysisBase\n+\n+logger = logging.getLogger(\"MDAnalysis.analysis.diffusionmap\")\n+\n+\n+class DistanceMatrix(AnalysisBase):\n+    \"\"\" Calculate the pairwise distance between each frame in a trajectory using\n+        a given metric\n+\n+    Attributes\n+    ----------\n+    atoms : AtomGroup\n+        Selected atoms in trajectory subject to dimension reduction\n+    dist_matrix : array\n+        Array of all possible ij metric distances between frames in trajectory.\n+        This matrix is symmetric with zeros on the diagonal.\n+\n+    Methods\n+    -------\n+    save(filename)\n+        Save the `dist_matrix` to a given filename\n+    \"\"\"\n+    def __init__(self, u, select='all', metric=rmsd, cutoff=1E0-5,\n+                 weights=None, start=None, stop=None, step=None):\n+        \"\"\"\n+        Parameters\n+        ----------\n+        u : trajectory `~MDAnalysis.core.AtomGroup.Universe`\n+            The MD Trajectory for dimension reduction, remember that\n+            computational cost of eigenvalue decomposition\n+            scales at O(N^3) where N is the number of frames.\n+            Cost can be reduced by increasing step interval or specifying a\n+            start and stop.\n+        select: str, optional\n+            Any valid selection string for\n+            :meth:`~MDAnalysis.core.AtomGroup.AtomGroup.select_atoms`\n+            This selection of atoms is used to calculate the RMSD between\n+            different frames. Water should be excluded.\n+        metric : function, optional\n+            Maps two numpy arrays to a float, is positive definite and\n+            symmetric, Default: metric is set to rms.rmsd().\n+        cutoff : float, optional\n+            Specify a given cutoff for metric values to be considered equal,\n+            Default: 1EO-5\n+        weights : array, optional\n+            Weights to be given to coordinates for metric calculation\n+        start : int, optional\n+            First frame of trajectory to analyse, Default: 0\n+        stop : int, optional\n+            Last frame of trajectory to analyse, Default: -1\n+        step : int, optional\n+            Step between frames to analyse, Default: 1\n+        \"\"\"\n+\n+        self._u = u\n+        traj = self._u.trajectory\n+        self.atoms = self._u.select_atoms(select)\n+        self._metric = metric\n+        self._cutoff = cutoff\n+        self._weights = weights\n+        self._calculated = False\n+        # remember that this must be called before referencing self.nframes\n+        self._setup_frames(traj, start, stop, step)\n+\n+    def _prepare(self):\n+        self.dist_matrix = np.zeros((self.nframes, self.nframes))\n+\n+    def _single_frame(self):\n+        iframe = self._ts.frame\n+        i_ref = self.atoms.positions\n+        # diagonal entries need not be calculated due to metric(x,x) == 0 in\n+        # theory, _ts not updated properly. Possible savings by setting a\n+        # cutoff for significant decimal places to sparsify matrix\n+        for j, ts in enumerate(self._u.trajectory[iframe:self.stop:self.step]):\n+            self._ts = ts\n+            j_ref = self.atoms.positions\n+            dist = self._metric(i_ref, j_ref, weights=self._weights)\n+            self.dist_matrix[self._frame_index, j+self._frame_index] = (\n+                dist if dist > self._cutoff else 0)\n+            self.dist_matrix[j+self._frame_index, self._frame_index] = (\n+                self.dist_matrix[self._frame_index, j+self._frame_index])\n+        self._ts = self._u.trajectory[iframe]\n+\n+    def _conclude(self):\n+        self._calculated = True\n+\n+    def save(self, filename):\n+        np.save(filename, self.dist_matrix)\n+        logger.info(\"Wrote the distance-squared matrix to file %r\", filename)\n+\n+\n+class DiffusionMap(object):\n+    \"\"\"Non-linear dimension reduction method\n+\n+    Dimension reduction with diffusion mapping of selected structures in a\n+    trajectory.\n+\n+    Attributes\n+    ----------\n+    eigenvalues: array\n+        Eigenvalues of the diffusion map\n+    eigenvectors: array\n+        Eigenvectors of the diffusion map\n+    diffusion_space : array\n+        After calling `transform(n_eigenvectors)` the diffusion map embedding\n+        into the lower dimensional diffusion space will exist here.\n+\n+    Methods\n+    -------\n+    run()\n+        Constructs an anisotropic diffusion kernel and performs eigenvalue\n+        decomposition on it.\n+    transform(n_eigenvectors, time)\n+        Perform an embedding of a frame into the eigenvectors representing\n+        the collective coordinates.\n+    \"\"\"\n+\n+    def __init__(self, u, epsilon=1, **kwargs):\n+        \"\"\"\n+        Parameters\n+        -------------\n+        u : MDAnalysis Universe or DistanceMatrix object\n+            Can be a Universe, in which case one must supply kwargs for the\n+            initialization of a DistanceMatrix. Otherwise, this can be a\n+            DistanceMatrix already initialized. Either way, this will be made\n+            into a diffusion kernel.\n+        epsilon : Float\n+            Specifies the method used for the choice of scale parameter in the\n+            diffusion map. More information in [1], [2] and [3], Default: 1.\n+        \"\"\"\n+        if isinstance(u, mda.Universe):\n+            self._dist_matrix = DistanceMatrix(u, **kwargs)\n+        elif isinstance(u, DistanceMatrix):\n+            self._dist_matrix = u\n+        else:\n+            raise ValueError(\"U is not a Universe or DistanceMatrix and\"\n+                             \" so the DiffusionMap has no data to work with.\")\n+        self._epsilon = epsilon\n+        # important for transform function and length of .run() method\n+        self._nframes = self._dist_matrix.nframes\n+        if self._nframes > 2000:","path":"package/MDAnalysis/analysis/diffusionmap.py","position":280,"original_position":280,"commit_id":"a4c185a95555f1a40ac8302cac100127658ef4ca","original_commit_id":"a4c185a95555f1a40ac8302cac100127658ef4ca","user":{"login":"kain88-de","id":4302678,"avatar_url":"https://avatars.githubusercontent.com/u/4302678?v=3","gravatar_id":"","url":"https://api.github.com/users/kain88-de","html_url":"https://github.com/kain88-de","followers_url":"https://api.github.com/users/kain88-de/followers","following_url":"https://api.github.com/users/kain88-de/following{/other_user}","gists_url":"https://api.github.com/users/kain88-de/gists{/gist_id}","starred_url":"https://api.github.com/users/kain88-de/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kain88-de/subscriptions","organizations_url":"https://api.github.com/users/kain88-de/orgs","repos_url":"https://api.github.com/users/kain88-de/repos","events_url":"https://api.github.com/users/kain88-de/events{/privacy}","received_events_url":"https://api.github.com/users/kain88-de/received_events","type":"User","site_admin":false},"body":"Is this value crashing your computer. I would say we can increase this to 5000","created_at":"2016-07-07T20:53:55Z","updated_at":"2016-07-07T20:53:55Z","html_url":"https://github.com/MDAnalysis/mdanalysis/pull/894#discussion_r69984832","pull_request_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894","_links":{"self":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments/69984832"},"html":{"href":"https://github.com/MDAnalysis/mdanalysis/pull/894#discussion_r69984832"},"pull_request":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894"}}},"pull_request":{"url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894","id":76659895,"html_url":"https://github.com/MDAnalysis/mdanalysis/pull/894","diff_url":"https://github.com/MDAnalysis/mdanalysis/pull/894.diff","patch_url":"https://github.com/MDAnalysis/mdanalysis/pull/894.patch","issue_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/894","number":894,"state":"open","locked":false,"title":"Diffusion Maps rebase, new PR for final review","user":{"login":"jdetle","id":10944582,"avatar_url":"https://avatars.githubusercontent.com/u/10944582?v=3","gravatar_id":"","url":"https://api.github.com/users/jdetle","html_url":"https://github.com/jdetle","followers_url":"https://api.github.com/users/jdetle/followers","following_url":"https://api.github.com/users/jdetle/following{/other_user}","gists_url":"https://api.github.com/users/jdetle/gists{/gist_id}","starred_url":"https://api.github.com/users/jdetle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdetle/subscriptions","organizations_url":"https://api.github.com/users/jdetle/orgs","repos_url":"https://api.github.com/users/jdetle/repos","events_url":"https://api.github.com/users/jdetle/events{/privacy}","received_events_url":"https://api.github.com/users/jdetle/received_events","type":"User","site_admin":false},"body":"Fixes #857\r\nI am moving this here because I don't want to overwrite my old diffusion branch just in case the rebasing is deemed overkill and it will make it easier for @richardjgowers  @kain88-de to help in reviewing this. \r\n \r\nChanges made in this Pull Request:\r\n- Added a Diffusion Map module for non-linear dimension reduction\r\n\r\nPR Checklist\r\n------------\r\n - [X] Tests?\r\n - [X] Docs?\r\n - [X] CHANGELOG updated?\r\n - [X] Issue raised/referenced?\r\n","created_at":"2016-07-07T20:29:26Z","updated_at":"2016-07-07T20:53:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"20d76f49e76e8f04529c78b2d63c73a30641e5ef","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894/commits","review_comments_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894/comments","review_comment_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/894/comments","statuses_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/statuses/a4c185a95555f1a40ac8302cac100127658ef4ca","head":{"label":"jdetle:diffusion_rebase","ref":"diffusion_rebase","sha":"a4c185a95555f1a40ac8302cac100127658ef4ca","user":{"login":"jdetle","id":10944582,"avatar_url":"https://avatars.githubusercontent.com/u/10944582?v=3","gravatar_id":"","url":"https://api.github.com/users/jdetle","html_url":"https://github.com/jdetle","followers_url":"https://api.github.com/users/jdetle/followers","following_url":"https://api.github.com/users/jdetle/following{/other_user}","gists_url":"https://api.github.com/users/jdetle/gists{/gist_id}","starred_url":"https://api.github.com/users/jdetle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdetle/subscriptions","organizations_url":"https://api.github.com/users/jdetle/orgs","repos_url":"https://api.github.com/users/jdetle/repos","events_url":"https://api.github.com/users/jdetle/events{/privacy}","received_events_url":"https://api.github.com/users/jdetle/received_events","type":"User","site_admin":false},"repo":{"id":54223025,"name":"mdanalysis","full_name":"jdetle/mdanalysis","owner":{"login":"jdetle","id":10944582,"avatar_url":"https://avatars.githubusercontent.com/u/10944582?v=3","gravatar_id":"","url":"https://api.github.com/users/jdetle","html_url":"https://github.com/jdetle","followers_url":"https://api.github.com/users/jdetle/followers","following_url":"https://api.github.com/users/jdetle/following{/other_user}","gists_url":"https://api.github.com/users/jdetle/gists{/gist_id}","starred_url":"https://api.github.com/users/jdetle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdetle/subscriptions","organizations_url":"https://api.github.com/users/jdetle/orgs","repos_url":"https://api.github.com/users/jdetle/repos","events_url":"https://api.github.com/users/jdetle/events{/privacy}","received_events_url":"https://api.github.com/users/jdetle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jdetle/mdanalysis","description":"MDAnalysis is a Python library to analyze molecular dynamics trajectories.","fork":true,"url":"https://api.github.com/repos/jdetle/mdanalysis","forks_url":"https://api.github.com/repos/jdetle/mdanalysis/forks","keys_url":"https://api.github.com/repos/jdetle/mdanalysis/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jdetle/mdanalysis/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jdetle/mdanalysis/teams","hooks_url":"https://api.github.com/repos/jdetle/mdanalysis/hooks","issue_events_url":"https://api.github.com/repos/jdetle/mdanalysis/issues/events{/number}","events_url":"https://api.github.com/repos/jdetle/mdanalysis/events","assignees_url":"https://api.github.com/repos/jdetle/mdanalysis/assignees{/user}","branches_url":"https://api.github.com/repos/jdetle/mdanalysis/branches{/branch}","tags_url":"https://api.github.com/repos/jdetle/mdanalysis/tags","blobs_url":"https://api.github.com/repos/jdetle/mdanalysis/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jdetle/mdanalysis/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jdetle/mdanalysis/git/refs{/sha}","trees_url":"https://api.github.com/repos/jdetle/mdanalysis/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jdetle/mdanalysis/statuses/{sha}","languages_url":"https://api.github.com/repos/jdetle/mdanalysis/languages","stargazers_url":"https://api.github.com/repos/jdetle/mdanalysis/stargazers","contributors_url":"https://api.github.com/repos/jdetle/mdanalysis/contributors","subscribers_url":"https://api.github.com/repos/jdetle/mdanalysis/subscribers","subscription_url":"https://api.github.com/repos/jdetle/mdanalysis/subscription","commits_url":"https://api.github.com/repos/jdetle/mdanalysis/commits{/sha}","git_commits_url":"https://api.github.com/repos/jdetle/mdanalysis/git/commits{/sha}","comments_url":"https://api.github.com/repos/jdetle/mdanalysis/comments{/number}","issue_comment_url":"https://api.github.com/repos/jdetle/mdanalysis/issues/comments{/number}","contents_url":"https://api.github.com/repos/jdetle/mdanalysis/contents/{+path}","compare_url":"https://api.github.com/repos/jdetle/mdanalysis/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jdetle/mdanalysis/merges","archive_url":"https://api.github.com/repos/jdetle/mdanalysis/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jdetle/mdanalysis/downloads","issues_url":"https://api.github.com/repos/jdetle/mdanalysis/issues{/number}","pulls_url":"https://api.github.com/repos/jdetle/mdanalysis/pulls{/number}","milestones_url":"https://api.github.com/repos/jdetle/mdanalysis/milestones{/number}","notifications_url":"https://api.github.com/repos/jdetle/mdanalysis/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jdetle/mdanalysis/labels{/name}","releases_url":"https://api.github.com/repos/jdetle/mdanalysis/releases{/id}","deployments_url":"https://api.github.com/repos/jdetle/mdanalysis/deployments","created_at":"2016-03-18T18:25:47Z","updated_at":"2016-03-18T18:25:51Z","pushed_at":"2016-07-07T20:45:49Z","git_url":"git://github.com/jdetle/mdanalysis.git","ssh_url":"git@github.com:jdetle/mdanalysis.git","clone_url":"https://github.com/jdetle/mdanalysis.git","svn_url":"https://github.com/jdetle/mdanalysis","homepage":"http://www.mdanalysis.org","size":257812,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":false,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"MDAnalysis:develop","ref":"develop","sha":"5d78f0302bf55180c34a80fa897dc2a960cd298a","user":{"login":"MDAnalysis","id":11445951,"avatar_url":"https://avatars.githubusercontent.com/u/11445951?v=3","gravatar_id":"","url":"https://api.github.com/users/MDAnalysis","html_url":"https://github.com/MDAnalysis","followers_url":"https://api.github.com/users/MDAnalysis/followers","following_url":"https://api.github.com/users/MDAnalysis/following{/other_user}","gists_url":"https://api.github.com/users/MDAnalysis/gists{/gist_id}","starred_url":"https://api.github.com/users/MDAnalysis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MDAnalysis/subscriptions","organizations_url":"https://api.github.com/users/MDAnalysis/orgs","repos_url":"https://api.github.com/users/MDAnalysis/repos","events_url":"https://api.github.com/users/MDAnalysis/events{/privacy}","received_events_url":"https://api.github.com/users/MDAnalysis/received_events","type":"Organization","site_admin":false},"repo":{"id":33389183,"name":"mdanalysis","full_name":"MDAnalysis/mdanalysis","owner":{"login":"MDAnalysis","id":11445951,"avatar_url":"https://avatars.githubusercontent.com/u/11445951?v=3","gravatar_id":"","url":"https://api.github.com/users/MDAnalysis","html_url":"https://github.com/MDAnalysis","followers_url":"https://api.github.com/users/MDAnalysis/followers","following_url":"https://api.github.com/users/MDAnalysis/following{/other_user}","gists_url":"https://api.github.com/users/MDAnalysis/gists{/gist_id}","starred_url":"https://api.github.com/users/MDAnalysis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MDAnalysis/subscriptions","organizations_url":"https://api.github.com/users/MDAnalysis/orgs","repos_url":"https://api.github.com/users/MDAnalysis/repos","events_url":"https://api.github.com/users/MDAnalysis/events{/privacy}","received_events_url":"https://api.github.com/users/MDAnalysis/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MDAnalysis/mdanalysis","description":"MDAnalysis is a Python library to analyze molecular dynamics trajectories.","fork":false,"url":"https://api.github.com/repos/MDAnalysis/mdanalysis","forks_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/forks","keys_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/teams","hooks_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/hooks","issue_events_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/events{/number}","events_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/events","assignees_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/assignees{/user}","branches_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/branches{/branch}","tags_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/tags","blobs_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/git/refs{/sha}","trees_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/statuses/{sha}","languages_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/languages","stargazers_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/stargazers","contributors_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/contributors","subscribers_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/subscribers","subscription_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/subscription","commits_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/commits{/sha}","git_commits_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/git/commits{/sha}","comments_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/comments{/number}","issue_comment_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/comments{/number}","contents_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/contents/{+path}","compare_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/merges","archive_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/downloads","issues_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues{/number}","pulls_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls{/number}","milestones_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/milestones{/number}","notifications_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/labels{/name}","releases_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/releases{/id}","deployments_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/deployments","created_at":"2015-04-04T00:39:41Z","updated_at":"2016-07-02T06:09:56Z","pushed_at":"2016-07-07T20:45:49Z","git_url":"git://github.com/MDAnalysis/mdanalysis.git","ssh_url":"git@github.com:MDAnalysis/mdanalysis.git","clone_url":"https://github.com/MDAnalysis/mdanalysis.git","svn_url":"https://github.com/MDAnalysis/mdanalysis","homepage":"http://www.mdanalysis.org","size":298956,"stargazers_count":67,"watchers_count":67,"language":"Python","has_issues":true,"has_downloads":false,"has_wiki":true,"has_pages":true,"forks_count":54,"mirror_url":null,"open_issues_count":117,"forks":54,"open_issues":117,"watchers":67,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894"},"html":{"href":"https://github.com/MDAnalysis/mdanalysis/pull/894"},"issue":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/894"},"comments":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/894/comments"},"review_comments":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894/comments"},"review_comment":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/894/commits"},"statuses":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/statuses/a4c185a95555f1a40ac8302cac100127658ef4ca"}}}}
{"actor":{"display_login":"kain88-de"}}