{"action":"created","comment":{"url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments/68503546","id":68503546,"diff_hunk":"@@ -0,0 +1,414 @@\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. Different\n+weights can be used to determine the anisotropy of the diffusion kernel.\n+The motivation for the creation of an anisotropic kernel is given on page 14 of\n+[Lafon1]_. The order of 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`). Notice that this trajectory\n+does not represent a sample from equilibrium. This violates a basic\n+assumption of the anisotropic kernel. The anisotropic kernel is created to act\n+as a discrete approximation for the Fokker-Plank equation from statistical\n+mechanics, results from a non-equilibrium trajectory shouldn't be interpreted\n+for this reason. This tutorial shows how to use the diffusionmap function.\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 calculate the diffusion map from\n+that trajectory using :class:`DiffusionMap`:: and get the corresponding\n+eigenvalues and eigenvectors.\n+\n+   >>> u = MDAnalysis.Universe(PSF,DCD)\n+   >>> dist_matrix = DistanceMatrix(u)\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. For those users, a\n+`~MDAnalysis.analysis.diffusionmap.EpsilonConstant` class has been provided.\n+Any user choosing to write their own Epsilon class must write a class that\n+inherits from `~MDAnalysis.analysis.diffusionmap.Epsilon`, and call the\n+`determine_epsilon` function required by the API before running the diffusion\n+map.\n+\n+   >>> epsilon_matrix = EpsilonConstant(DistanceMatrix, 500)\n+   >>> epsilon_matrix.determine_epsilon()\n+   >>> dmap = diffusionmap.DiffusionMap(dist_matrix, epsilon_matrix)\n+   >>> dmap.decompose_kernel()\n+   >>> eigenvalues = dmap.eigenvalues\n+   >>> eigenvectors = dmap.eigenvectors\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_dominant_eigenvectors = # some number less than the number of frames\n+   >>> fit = dmap.transform(num_dominant_eigenvectors)\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 self.fit.\n+\n+Classes\n+-------\n+\n+.. autoclass:: DiffusionMap\n+.. autoclass:: DistMatrix\n+.. autoclass:: Epsilon\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. Chem. Phys. Lett. 2011, 509, 1−11\n+..[Lafon1] Coifman, Ronald R., Lafon, Stephane (2006) Diffusion maps.\n+Appl. Comput. Harmon. Anal. 21, 5–30.\n+..[Clementi1] Rohrdanz, M. A, Zheng, W, Maggioni, M, & Clementi, C. (2013)\n+Determination of reaction coordinates via locally scaled\n+diffusion map. Journal of Chemical Physics.\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+\n+import numpy as np\n+from MDAnalysis.analysis import rms\n+\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=rms.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+        # 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+        self._i = -1\n+\n+    def _single_frame(self):\n+        self._i = self._i + 1\n+        iframe = self._ts.frame\n+        i_ref = self.atoms.positions - self.atoms.center_of_mass()\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[self.start:self.stop:self.step]):\n+            self._ts = ts\n+            if self._ts.frame >= iframe:\n+                if self._i == j:\n+                    self.dist_matrix[self._i, self._i] = 0\n+                else:\n+                    j_ref = self.atoms.positions-self.atoms.center_of_mass()\n+                    dist = self._metric(i_ref, j_ref, weights=self._weights)\n+                    self.dist_matrix[self._i, j] = (dist if dist > self._cutoff\n+                                                    else 0)\n+                    self.dist_matrix[j, self._i] = self.dist_matrix[self._i, j]\n+        self._ts = self._u.trajectory[iframe]","path":"package/MDAnalysis/analysis/diffusionmap.py","position":230,"original_position":230,"commit_id":"dbcafca8b79708631efbcb38b41302f4ccee8832","original_commit_id":"dbcafca8b79708631efbcb38b41302f4ccee8832","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":"please make a comment why you are resetting the trajectory","created_at":"2016-06-26T14:03:58Z","updated_at":"2016-06-26T14:03:58Z","html_url":"https://github.com/MDAnalysis/mdanalysis/pull/863#discussion_r68503546","pull_request_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863","_links":{"self":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments/68503546"},"html":{"href":"https://github.com/MDAnalysis/mdanalysis/pull/863#discussion_r68503546"},"pull_request":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863"}}},"pull_request":{"url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863","id":71837531,"html_url":"https://github.com/MDAnalysis/mdanalysis/pull/863","diff_url":"https://github.com/MDAnalysis/mdanalysis/pull/863.diff","patch_url":"https://github.com/MDAnalysis/mdanalysis/pull/863.patch","issue_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/863","number":863,"state":"open","locked":false,"title":"Diffusion Map Refactor/Implementation","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\n\r\nChanges made in this Pull Request:\r\n- Refactor of @euhruska's work to fit bauhaus style\r\n- Currently working through literature to ensure module fits researcher needs, agrees with theory.\r\n\r\nTODO:\r\n---------\r\n- [x] Write up API for creating epsilon class that takes DistMatrix as an initialization argument, to be used in diffusion maps for epsilon determination. Returns modified DistMatrix.\r\n- [x] We are only accounting for diffusion time equal to one, this will be adressed in the upcoming blogpost\r\n- [x] increase tests for different step choices and selections.\r\n- [x] Write implentation for EpsilonConstant class\r\n- [x] Finish Save and Load Functions \r\n- [x] Finish Embedding Function\r\n- [x] Write tests for Embedding\r\n- [ ] Jupyter notebook explanation of diffusion maps analysis\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-05-29T20:53:59Z","updated_at":"2016-06-26T14:03:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"53b3ac22ca701e0e2bc7e5abacc394f8d7eb962c","assignee":{"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},"assignees":[{"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},{"login":"richardjgowers","id":9249543,"avatar_url":"https://avatars.githubusercontent.com/u/9249543?v=3","gravatar_id":"","url":"https://api.github.com/users/richardjgowers","html_url":"https://github.com/richardjgowers","followers_url":"https://api.github.com/users/richardjgowers/followers","following_url":"https://api.github.com/users/richardjgowers/following{/other_user}","gists_url":"https://api.github.com/users/richardjgowers/gists{/gist_id}","starred_url":"https://api.github.com/users/richardjgowers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/richardjgowers/subscriptions","organizations_url":"https://api.github.com/users/richardjgowers/orgs","repos_url":"https://api.github.com/users/richardjgowers/repos","events_url":"https://api.github.com/users/richardjgowers/events{/privacy}","received_events_url":"https://api.github.com/users/richardjgowers/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/MDAnalysis/mdanalysis/milestones/9","html_url":"https://github.com/MDAnalysis/mdanalysis/milestones/0.16.0","labels_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/milestones/9/labels","id":1716502,"number":9,"title":"0.16.0","description":"","creator":{"login":"richardjgowers","id":9249543,"avatar_url":"https://avatars.githubusercontent.com/u/9249543?v=3","gravatar_id":"","url":"https://api.github.com/users/richardjgowers","html_url":"https://github.com/richardjgowers","followers_url":"https://api.github.com/users/richardjgowers/followers","following_url":"https://api.github.com/users/richardjgowers/following{/other_user}","gists_url":"https://api.github.com/users/richardjgowers/gists{/gist_id}","starred_url":"https://api.github.com/users/richardjgowers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/richardjgowers/subscriptions","organizations_url":"https://api.github.com/users/richardjgowers/orgs","repos_url":"https://api.github.com/users/richardjgowers/repos","events_url":"https://api.github.com/users/richardjgowers/events{/privacy}","received_events_url":"https://api.github.com/users/richardjgowers/received_events","type":"User","site_admin":false},"open_issues":18,"closed_issues":8,"state":"open","created_at":"2016-04-19T08:42:42Z","updated_at":"2016-06-24T13:16:01Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863/commits","review_comments_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863/comments","review_comment_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/863/comments","statuses_url":"https://api.github.com/repos/MDAnalysis/mdanalysis/statuses/dbcafca8b79708631efbcb38b41302f4ccee8832","head":{"label":"jdetle:diffusion","ref":"diffusion","sha":"dbcafca8b79708631efbcb38b41302f4ccee8832","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-06-23T01:16:22Z","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":257735,"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":"9c1f8fb99f5504d8d5726a856ed91ebadd8cb03e","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-06-07T18:02:20Z","pushed_at":"2016-06-23T01:16:23Z","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":292537,"stargazers_count":66,"watchers_count":66,"language":"Python","has_issues":true,"has_downloads":false,"has_wiki":true,"has_pages":true,"forks_count":52,"mirror_url":null,"open_issues_count":111,"forks":52,"open_issues":111,"watchers":66,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863"},"html":{"href":"https://github.com/MDAnalysis/mdanalysis/pull/863"},"issue":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/863"},"comments":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/issues/863/comments"},"review_comments":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863/comments"},"review_comment":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/pulls/863/commits"},"statuses":{"href":"https://api.github.com/repos/MDAnalysis/mdanalysis/statuses/dbcafca8b79708631efbcb38b41302f4ccee8832"}}}}
{"actor":{"display_login":"kain88-de"}}