{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Calculating the Clustering Ensemble Similarity between ensembles\n", "\n", "Here we compare the conformational ensembles of proteins in three trajectories, using the clustering ensemble similarity method.\n", "\n", "**Last updated:** December 2022 with MDAnalysis 2.4.0-dev0\n", "\n", "**Minimum version of MDAnalysis:** 1.0.0\n", "\n", "**Packages required:**\n", " \n", "* MDAnalysis (Michaud-Agrawal *et al.*, 2011, Gowers *et al.*, 2016)\n", "* MDAnalysisTests\n", "* [scikit-learn](https://scikit-learn.org/stable/)\n", " \n", "**Optional packages for visualisation:**\n", "\n", "* [matplotlib](https://matplotlib.org)\n", "\n", "\n", "
\n", " \n", "**Note**\n", "\n", "The metrics and methods in the `encore` module are from (Tiberti *et al.*, 2015). Please cite them when using the ``MDAnalysis.analysis.encore`` module in published work.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:33.918909Z", "iopub.status.busy": "2021-05-19T05:58:33.918383Z", "iopub.status.idle": "2021-05-19T05:58:40.714699Z", "shell.execute_reply": "2021-05-19T05:58:40.715153Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "import MDAnalysis as mda\n", "from MDAnalysis.tests.datafiles import (PSF, DCD, DCD2, GRO, XTC, \n", " PSF_NAMD_GBIS, DCD_NAMD_GBIS)\n", "from MDAnalysis.analysis import encore\n", "from MDAnalysis.analysis.encore.clustering import ClusteringMethod as clm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The test files we will be working with here feature adenylate kinase (AdK), a phosophotransferase enzyme. (Beckstein *et al.*, 2009)\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:40.719200Z", "iopub.status.busy": "2021-05-19T05:58:40.718403Z", "iopub.status.idle": "2021-05-19T05:58:41.114718Z", "shell.execute_reply": "2021-05-19T05:58:41.115207Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/pbarletta/mambaforge/envs/mda-user-guide/lib/python3.9/site-packages/MDAnalysis/coordinates/DCD.py:165: DeprecationWarning: DCDReader currently makes independent timesteps by copying self.ts while other readers update self.ts inplace. This behaviour will be changed in 3.0 to be the same as other readers\n", " warnings.warn(\"DCDReader currently makes independent timesteps\"\n" ] } ], "source": [ "u1 = mda.Universe(PSF, DCD)\n", "u2 = mda.Universe(PSF, DCD2)\n", "u3 = mda.Universe(PSF_NAMD_GBIS, DCD_NAMD_GBIS)\n", "\n", "labels = ['DCD', 'DCD2', 'NAMD']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The trajectories can have different lengths, as seen below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:41.119363Z", "iopub.status.busy": "2021-05-19T05:58:41.118802Z", "iopub.status.idle": "2021-05-19T05:58:41.124886Z", "shell.execute_reply": "2021-05-19T05:58:41.125313Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "98 102 100\n" ] } ], "source": [ "print(len(u1.trajectory), len(u2.trajectory), len(u3.trajectory))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculating clustering similarity with default settings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The clustering ensemble similarity method (`ces`, [API docs here](https://docs.mdanalysis.org/stable/documentation_pages/analysis/encore/similarity.html#MDAnalysis.analysis.encore.similarity.ces)) combines every trajectory into a whole space of conformations, and then uses a user-specified `clustering_method` to partition this into clusters. The population of each trajectory ensemble within each cluster is taken as a probability density function.\n", "\n", "The similarity of each probability density function is compared using the Jensen-Shannon divergence. This divergence has an upper bound of $\\ln{(2)}$, representing no similarity between the ensembles, and a lower bound of 0.0, representing identical conformational ensembles.\n", "\n", "You do not need to align your trajectories, as the function will align it for you (along your `select`ion atoms, which are `select='name CA'` by default). " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:41.129471Z", "iopub.status.busy": "2021-05-19T05:58:41.128816Z", "iopub.status.idle": "2021-05-19T05:58:56.201064Z", "shell.execute_reply": "2021-05-19T05:58:56.201734Z" } }, "outputs": [], "source": [ "ces0, details0 = encore.ces([u1, u2, u3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`encore.ces` returns two outputs. `ces0` is the similarity matrix for the ensemble of trajectories." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.208851Z", "iopub.status.busy": "2021-05-19T05:58:56.208233Z", "iopub.status.idle": "2021-05-19T05:58:56.211153Z", "shell.execute_reply": "2021-05-19T05:58:56.210606Z" } }, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0.68070702, 0.69314718],\n", " [0.68070702, 0. , 0.69314718],\n", " [0.69314718, 0.69314718, 0. ]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ces0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`details0` contains the calculated clusters as a `encore.clustering.ClusterCollection.ClusterCollection`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.215494Z", "iopub.status.busy": "2021-05-19T05:58:56.214962Z", "iopub.status.idle": "2021-05-19T05:58:56.216798Z", "shell.execute_reply": "2021-05-19T05:58:56.217249Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "We have found 49 clusters\n" ] } ], "source": [ "cluster_collection = details0['clustering'][0]\n", "print(type(cluster_collection))\n", "print('We have found {} clusters'.format(len(cluster_collection)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can access each Cluster at `cluster_collection.clusters`. For example, the first one has these elements:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.221314Z", "iopub.status.busy": "2021-05-19T05:58:56.220791Z", "iopub.status.idle": "2021-05-19T05:58:56.222935Z", "shell.execute_reply": "2021-05-19T05:58:56.223367Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_cluster = cluster_collection.clusters[0]\n", "first_cluster" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.226988Z", "iopub.status.busy": "2021-05-19T05:58:56.226422Z", "iopub.status.idle": "2021-05-19T05:58:56.228781Z", "shell.execute_reply": "2021-05-19T05:58:56.229232Z" } }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 98])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_cluster.elements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each cluster has an ID number and a centroid conformation." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.233428Z", "iopub.status.busy": "2021-05-19T05:58:56.232486Z", "iopub.status.idle": "2021-05-19T05:58:56.234876Z", "shell.execute_reply": "2021-05-19T05:58:56.235257Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The ID of this cluster is: 0\n", "The centroid is 1\n" ] } ], "source": [ "print('The ID of this cluster is:', first_cluster.id)\n", "print('The centroid is', first_cluster.centroid)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.265187Z", "iopub.status.busy": "2021-05-19T05:58:56.264683Z", "iopub.status.idle": "2021-05-19T05:58:56.358001Z", "shell.execute_reply": "2021-05-19T05:58:56.358366Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig0, ax0 = plt.subplots()\n", "im0 = plt.imshow(ces0, vmax=np.log(2), vmin=0)\n", "plt.xticks(np.arange(3), labels)\n", "plt.yticks(np.arange(3), labels)\n", "plt.title('Clustering ensemble similarity')\n", "cbar0 = fig0.colorbar(im0)\n", "cbar0.set_label('Jensen-Shannon divergence');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculating clustering similarity with one method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clustering methods should be subclasses of `analysis.encore.clustering.ClusteringMethod`, initialised with your chosen parameters. Below, we set up an affinity progragation scheme, which uses message-passing to choose a number of 'exemplar' points to represent the data and updates these points until they converge. The `preference` parameter controls how many exemplars are used -- a higher value results in more clusters, while a lower value results in fewer clusters. The `damping` factor damps the message passing to avoid numerical oscillations. [(See the scikit-learn user guide for more information.)](https://scikit-learn.org/stable/modules/clustering.html#affinity-propagation)\n", "\n", "The other keyword arguments control when to stop clustering. Adding noise to the data can also avoid numerical oscillations." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.361927Z", "iopub.status.busy": "2021-05-19T05:58:56.361305Z", "iopub.status.idle": "2021-05-19T05:58:56.362810Z", "shell.execute_reply": "2021-05-19T05:58:56.363302Z" } }, "outputs": [], "source": [ "clustering_method = clm.AffinityPropagationNative(preference=-1.0,\n", " damping=0.9,\n", " max_iter=200,\n", " convergence_iter=30,\n", " add_noise=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, MDAnalysis will run the job on one core. If it is taking too long and you have the resources, you can increase the number of cores used." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:58:56.366632Z", "iopub.status.busy": "2021-05-19T05:58:56.366133Z", "iopub.status.idle": "2021-05-19T05:59:11.617771Z", "shell.execute_reply": "2021-05-19T05:59:11.618485Z" } }, "outputs": [], "source": [ "ces1, details1 = encore.ces([u1, u2, u3],\n", " select='name CA',\n", " clustering_method=clustering_method,\n", " ncores=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:11.663743Z", "iopub.status.busy": "2021-05-19T05:59:11.652585Z", "iopub.status.idle": "2021-05-19T05:59:11.747479Z", "shell.execute_reply": "2021-05-19T05:59:11.747805Z" }, "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig1, ax1 = plt.subplots()\n", "im1 = plt.imshow(ces1, vmax=np.log(2), vmin=0)\n", "plt.xticks(np.arange(3), labels)\n", "plt.yticks(np.arange(3), labels)\n", "plt.title('Clustering ensemble similarity')\n", "cbar1 = fig1.colorbar(im1)\n", "cbar1.set_label('Jensen-Shannon divergence');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculating clustering similarity with multiple methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You may want to try different clustering methods, or use different parameters within the methods. `encore.ces` allows you to pass a list of `clustering_method`s to be applied.\n", "\n", "
\n", " \n", "**Note**\n", "\n", "To use the other ENCORE methods available, you need to install [scikit-learn](https://scikit-learn.org/stable/).\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Trying out different clustering parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The KMeans clustering algorithm separates samples into $n$ groups of equal variance, with centroids that minimise the inertia. You must choose how many clusters to partition. [(See the scikit-learn user guide for more information.)](https://scikit-learn.org/stable/modules/clustering.html#k-means)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:11.753051Z", "iopub.status.busy": "2021-05-19T05:59:11.752181Z", "iopub.status.idle": "2021-05-19T05:59:11.753899Z", "shell.execute_reply": "2021-05-19T05:59:11.754308Z" } }, "outputs": [], "source": [ "km1 = clm.KMeans(12, # no. clusters\n", " init = 'k-means++', # default\n", " algorithm=\"auto\") # default\n", "\n", "km2 = clm.KMeans(6, # no. clusters\n", " init = 'k-means++', # default\n", " algorithm=\"auto\") # default" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The DBSCAN algorithm is a density-based clustering method that defines clusters as 'high density' areas, separated by low density areas. The parameters `min_samples` and `eps` define how dense an area should be to form a cluster. Clusters are defined around core points which have at least `min_samples` neighbours within a distance of `eps`. Points that are at least `eps` in distance from any core point are considered outliers.\n", "[(See the scikit-learn user guide for more information.)](https://scikit-learn.org/stable/modules/clustering.html#dbscan)\n", "\n", "A higher `min_samples` or lower `eps` mean that data points must be more dense to form a cluster. You should consider your `eps` carefully. In MDAnalysis, `eps` can be interpreted as the distance between two points in Angstrom.\n", "\n", "
\n", " \n", "**Note**\n", "\n", "DBSCAN is an algorithm that can identify outliers, or data points that don't fit into any cluster. ``dres()`` and ``dres_convergence()`` treat the outliers as their own cluster. This means that the Jensen-Shannon divergence will be lower than it should be for trajectories that have outliers. Do not use this clustering method unless you are certain that your trajectories will not have outliers.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:11.758909Z", "iopub.status.busy": "2021-05-19T05:59:11.758146Z", "iopub.status.idle": "2021-05-19T05:59:11.760546Z", "shell.execute_reply": "2021-05-19T05:59:11.761059Z" } }, "outputs": [], "source": [ "db1 = clm.DBSCAN(eps=0.5,\n", " min_samples=5,\n", " algorithm='auto',\n", " leaf_size=30)\n", "\n", "db2 = clm.DBSCAN(eps=1,\n", " min_samples=5,\n", " algorithm='auto',\n", " leaf_size=30)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we pass a list of clustering methods to `encore.ces`, the results get saved in `ces2` and `details2` in order." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:11.765943Z", "iopub.status.busy": "2021-05-19T05:59:11.764853Z", "iopub.status.idle": "2021-05-19T05:59:36.044484Z", "shell.execute_reply": "2021-05-19T05:59:36.045322Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4 4\n" ] } ], "source": [ "ces2, details2 = encore.ces([u1, u2, u3],\n", " select='name CA',\n", " clustering_method=[km1, km2, db1, db2],\n", " ncores=4)\n", "print(len(ces2), len(details2['clustering']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:36.063450Z", "iopub.status.busy": "2021-05-19T05:59:36.062503Z", "iopub.status.idle": "2021-05-19T05:59:36.291957Z", "shell.execute_reply": "2021-05-19T05:59:36.292407Z" } }, "outputs": [ { "data": { "image/png": "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XFycSn1cXBxatGih8ZqWLVvi77//xj///KOsu3LlCoyMjFCtWrUCn6Nv374YO3YsDh06BLlcDrlcjoMHD2LcuHHo27evLh+JCiZjiIiIiIiIiEhSCsi0LrqaOHEiVq1ahdWrV+PSpUuYMGECkpKSMHLkSADAtGnTMGjQIGX7fv36wcHBAR988AESEhJw9OhRfPLJJxgyZAgsLS0LvFdYWBiaNWuGgIAAWFpawtLSEkFBQWjfvv1r7RnDZUpEREREREREJKmXZ70U1k5Xffr0QXp6OmbPno3k5GR4e3sjNjYWrq6uAIDk5GSV/Vysra0RFxeHjz/+GL6+vnBwcMB7772HsLCwQu9lZmaG6OhofPnllzh37hwsLS1Rv3595b30xWQMEREREREREUnq5ZOSCmunj9GjR2P06NEa34uKilKr8/LyUlvapAtPT094enrqff2rmIwhIiIiIiIiIkkphAwKUfgSJG3alCS5XI6oqCgcOHAAqampUCgUKu8fPHhQr36ZjCEiIiIiIiIiSeUKEzwXhaccckUxDOY1jBs3DlFRUejatSu8vb3zPT5bV0zGEBEREREREZGk5JBBrsXmvNq0KUmbN2/Gjz/+iC5dukjaL5MxRERERERERCQphTCCQovNebVpU5LMzMzg4eEheb+G/dREREREREREVOrI8d/smIKLYZs0aRIWL14MIaRdT8WZMUREREREREQkqbIyMyY+Ph6HDh3C7t27Ua9ePZiamqq8HxMTo1e/TMYQERERERERkaTkwghyLRIt2rQpSeXLl0dwcLDk/RZpMiYkJARr1659cSMTE9jb26NBgwZ4//33ERISAiOj/z70M2fOYO7cuTh69CgyMjJQvXp1tG3bFp988gk8PT2RmJgId3d3ZXtra2tUr14d7dq1w/jx41GrVq2ifBQiIiIiIiIi0pKADAotNucVBr6B75o1a4qk3yJPQXXq1AnJyclITEzE7t274e/vj3HjxqFbt27Izc0FAOzcuRPNmzdHdnY2NmzYgEuXLmH9+vWws7PD559/rtLf/v37kZycjHPnzmHu3Lm4dOkSGjZsiAMHDhT1oxARERERERGRFvJmxmhTDF1ubi7279+PFStW4PHjxwCAv//+G//884/efRb5MiVzc3NUrlwZAFC1alU0adIEzZs3R0BAAKKiotCvXz988MEH6NKlC376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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "titles = ['Kmeans 12 clusters', 'Kmeans 6 clusters', 'DBSCAN eps=0.5', 'DBSCAN eps=1']\n", "fig2, axes = plt.subplots(1, 4, sharey=True, figsize=(15, 3))\n", "for i, (data, title) in enumerate(zip(ces2, titles)):\n", " imi = axes[i].imshow(data, vmax=np.log(2), vmin=0)\n", " axes[i].set_xticks(np.arange(3))\n", " axes[i].set_xticklabels(labels)\n", " axes[i].set_title(title)\n", "plt.yticks(np.arange(3), labels)\n", "cbar2 = fig2.colorbar(imi, ax=axes.ravel().tolist())\n", "cbar2.set_label('Jensen-Shannon divergence');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As can be seen, reducing the number of clusters in the K-means method emphasises that DCD2 is more similar to the NAMD trajectory than DCD. Meanwhile, increasing `eps` in DBSCAN clearly lowered the density required to form a cluster so much that every trajectory is in the same cluster, and therefore they have identical probability distributions." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:36.296767Z", "iopub.status.busy": "2021-05-19T05:59:36.295874Z", "iopub.status.idle": "2021-05-19T05:59:36.299257Z", "shell.execute_reply": "2021-05-19T05:59:36.299843Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of clusters in DBSCAN eps=1: 1\n" ] } ], "source": [ "n_db = len(details2['clustering'][-1])\n", "\n", "print('Number of clusters in DBSCAN eps=1: {}'.format(n_db))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estimating the error in a clustering ensemble similarity analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`encore.ces` also allows for error estimation using a bootstrapping method. This returns the average Jensen-Shannon divergence, and standard deviation over the samples. " ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:36.305891Z", "iopub.status.busy": "2021-05-19T05:59:36.304998Z", "iopub.status.idle": "2021-05-19T05:59:53.573227Z", "shell.execute_reply": "2021-05-19T05:59:53.573615Z" } }, "outputs": [], "source": [ "avgs, stds = encore.ces([u1, u2, u3],\n", " select='name CA',\n", " clustering_method=clustering_method,\n", " estimate_error=True,\n", " ncores=4)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:53.578610Z", "iopub.status.busy": "2021-05-19T05:59:53.577979Z", "iopub.status.idle": "2021-05-19T05:59:53.580320Z", "shell.execute_reply": "2021-05-19T05:59:53.580683Z" }, "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0.68682809, 0.69314718],\n", " [0.68682809, 0. , 0.69314718],\n", " [0.69314718, 0.69314718, 0. ]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "avgs" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T05:59:53.584635Z", "iopub.status.busy": "2021-05-19T05:59:53.583983Z", "iopub.status.idle": "2021-05-19T05:59:53.586188Z", "shell.execute_reply": "2021-05-19T05:59:53.586538Z" }, "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "text/plain": [ "array([[0.00000000e+00, 5.26432545e-03, 7.02166694e-17],\n", " [5.26432545e-03, 0.00000000e+00, 8.59975057e-17],\n", " [7.02166694e-17, 8.59975057e-17, 0.00000000e+00]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", "[1] Oliver Beckstein, Elizabeth J. Denning, Juan R. Perilla, and Thomas B. Woolf.\n", "Zipping and Unzipping of Adenylate Kinase: Atomistic Insights into the Ensemble of OpenClosed Transitions.\n", "Journal of Molecular Biology, 394(1):160–176, November 2009.\n", "00107.\n", "URL: https://linkinghub.elsevier.com/retrieve/pii/S0022283609011164, doi:10.1016/j.jmb.2009.09.009.\n", "\n", "[2] Richard J. Gowers, Max Linke, Jonathan Barnoud, Tyler J. E. Reddy, Manuel N. Melo, Sean L. Seyler, Jan Domański, David L. Dotson, Sébastien Buchoux, Ian M. Kenney, and Oliver Beckstein.\n", "MDAnalysis: A Python Package for the Rapid Analysis of Molecular Dynamics Simulations.\n", "Proceedings of the 15th Python in Science Conference, pages 98–105, 2016.\n", "00152.\n", "URL: https://conference.scipy.org/proceedings/scipy2016/oliver_beckstein.html, doi:10.25080/Majora-629e541a-00e.\n", "\n", "[3] Naveen Michaud-Agrawal, Elizabeth J. Denning, Thomas B. Woolf, and Oliver Beckstein.\n", "MDAnalysis: A toolkit for the analysis of molecular dynamics simulations.\n", "Journal of Computational Chemistry, 32(10):2319–2327, July 2011.\n", "00778.\n", "URL: http://doi.wiley.com/10.1002/jcc.21787, doi:10.1002/jcc.21787.\n", "\n", "[4] Matteo Tiberti, Elena Papaleo, Tone Bengtsen, Wouter Boomsma, and Kresten Lindorff-Larsen.\n", "ENCORE: Software for Quantitative Ensemble Comparison.\n", "PLOS Computational Biology, 11(10):e1004415, October 2015.\n", "00031.\n", "URL: https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1004415, doi:10.1371/journal.pcbi.1004415." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.15 ('mda-user-guide')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.15" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "vscode": { "interpreter": { "hash": "7b52aa17ef4e9358c0e91ff3f0bf50d10667bb8b55636d4b9fb967a2ff94bd8c" } } }, "nbformat": 4, "nbformat_minor": 2 }