{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Comparing the geometric similarity of trajectories\n", "\n", "Here we compare the geometric similarity of trajectories using the following path metrics:\n", "\n", " - the Hausdorff distance\n", " - the discrete Fréchet\n", "\n", "**Last updated:** December 2022 with MDAnalysis 2.4.0-dev0\n", "\n", "**Last updated:** December 2022\n", "\n", "**Minimum version of MDAnalysis:** 0.18.0\n", "\n", "**Packages required:**\n", " \n", "* MDAnalysis (Michaud-Agrawal *et al.*, 2011, Gowers *et al.*, 2016)\n", "* MDAnalysisTests\n", " \n", "**Optional packages for visualisation:**\n", "\n", "* [matplotlib](https://matplotlib.org)\n", "* [seaborn](https://seaborn.pydata.org)\n", "\n", "\n", "
\n", " \n", "**Note**\n", "\n", "The metrics and methods in the `psa` path similarity analysis module are from (Seyler *et al.*, 2015). Please cite them when using the ``MDAnalysis.analysis.psa`` module in published work.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:48.802025Z", "iopub.status.busy": "2021-05-19T06:24:48.800867Z", "iopub.status.idle": "2021-05-19T06:24:49.737046Z", "shell.execute_reply": "2021-05-19T06:24:49.737419Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:08.707849665Z", "start_time": "2023-06-10T07:11:07.908373682Z" } }, "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", " PDB_small, CRD)\n", "from MDAnalysis.analysis import psa\n", "import warnings\n", "# suppress some MDAnalysis warnings about writing PDB files\n", "warnings.filterwarnings('ignore')" ] }, { "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) " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:49.741567Z", "iopub.status.busy": "2021-05-19T06:24:49.740941Z", "iopub.status.idle": "2021-05-19T06:24:50.620439Z", "shell.execute_reply": "2021-05-19T06:24:50.620888Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:09.509255903Z", "start_time": "2023-06-10T07:11:08.711437734Z" } }, "outputs": [], "source": [ "u1 = mda.Universe(PSF, DCD)\n", "u2 = mda.Universe(PSF, DCD2)\n", "u3 = mda.Universe(GRO, XTC)\n", "u4 = mda.Universe(PSF_NAMD_GBIS, DCD_NAMD_GBIS)\n", "u5 = mda.Universe(PDB_small, CRD, PDB_small, \n", " CRD, PDB_small, CRD, PDB_small)\n", "\n", "ref = mda.Universe(PDB_small)\n", "\n", "\n", "labels = ['DCD', 'DCD2', 'XTC', 'NAMD', 'mixed']" ] }, { "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-19T06:24:50.625339Z", "iopub.status.busy": "2021-05-19T06:24:50.624517Z", "iopub.status.idle": "2021-05-19T06:24:50.628686Z", "shell.execute_reply": "2021-05-19T06:24:50.629076Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:09.519737161Z", "start_time": "2023-06-10T07:11:09.512079428Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "98 102 10\n" ] } ], "source": [ "print(len(u1.trajectory), len(u2.trajectory), len(u3.trajectory))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aligning trajectories" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We set up the PSAnalysis ([API docs](https://docs.mdanalysis.org/stable/documentation_pages/analysis/psa.html#MDAnalysis.analysis.psa.PSAnalysis)) with our list of Universes and labels. While `path_select` determines which atoms to calculate the path similarities for, `select` determines which atoms to use to align each Universe to `reference`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:50.634287Z", "iopub.status.busy": "2021-05-19T06:24:50.633624Z", "iopub.status.idle": "2021-05-19T06:24:50.636599Z", "shell.execute_reply": "2021-05-19T06:24:50.637297Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:09.528370130Z", "start_time": "2023-06-10T07:11:09.520020151Z" } }, "outputs": [], "source": [ "CORE_sel = 'name CA and (resid 1:29 or resid 60:121 or resid 160:214)'\n", "\n", "ps = psa.PSAnalysis([u1, u2, u3, u4, u5],\n", " labels=labels,\n", " reference=ref,\n", " select=CORE_sel,\n", " path_select='name CA')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generating paths" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each Universe, we will generate a transition path containing each conformation from a trajectory using `generate_paths` ([API docs](https://docs.mdanalysis.org/stable/documentation_pages/analysis/psa.html#MDAnalysis.analysis.psa.PSAnalysis.generate_paths)).\n", "\n", "\n", "First, we will do a mass-weighted alignment of each trajectory to the reference structure `reference`, along the atoms in `select`. To turn off the mass weighting, set `weights=None`. If your trajectories are already aligned, you can skip the alignment with `align=False`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:50.649919Z", "iopub.status.busy": "2021-05-19T06:24:50.649271Z", "iopub.status.idle": "2021-05-19T06:24:52.124155Z", "shell.execute_reply": "2021-05-19T06:24:52.124683Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:11.001255731Z", "start_time": "2023-06-10T07:11:09.530201959Z" } }, "outputs": [], "source": [ "ps.generate_paths(align=True, save=False, weights='mass')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hausdorff method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can compute the similarity of each path. The default metric is to use the Hausdorff method. [[5]](#References) The Hausdorff distance between two conformation transition paths $P$ and $Q$ is:\n", "\n", "$$\\delta_H(P,Q) = \\max{(\\delta_h(P|Q), \\delta_h(Q|P))}$$\n", "\n", "$\\delta_h(P|Q)$ is the directed Hausdorff distance from $P$ to $Q$, and is defined as:\n", "\n", "$$\\delta_h(P|Q) = \\max_{p \\in P}\\min_{q \\in Q} d(p,q)$$\n", "\n", "The directed Hausdorff distance of $P$ to $Q$ is the distance between the two points, $p \\in P$ and its structural nearest neighbour $q \\in Q$, for the point $p$ where the distance is greatest. This is not commutative, i.e. the directed Hausdorff distance from $Q$ to $P$ is not the same. (See [scipy.spatial.distance.directed_hausdorff](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.directed_hausdorff.html) for more information).\n", "\n", "In MDAnalysis, the Hausdorff distance is the RMSD between a pair of conformations in $P$ and $Q$, where the one of the conformations in the pair has the least similar nearest neighbour." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:52.129757Z", "iopub.status.busy": "2021-05-19T06:24:52.128708Z", "iopub.status.idle": "2021-05-19T06:24:52.149655Z", "shell.execute_reply": "2021-05-19T06:24:52.150028Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:11.021546984Z", "start_time": "2023-06-10T07:11:11.004318817Z" } }, "outputs": [], "source": [ "ps.run(metric='hausdorff')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The distance matrix is saved in `ps.D`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:52.156938Z", "iopub.status.busy": "2021-05-19T06:24:52.156154Z", "iopub.status.idle": "2021-05-19T06:24:52.161226Z", "shell.execute_reply": "2021-05-19T06:24:52.161955Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:11.061041463Z", "start_time": "2023-06-10T07:11:11.025938451Z" } }, "outputs": [ { "data": { "text/plain": "array([[ 0. , 1.33312648, 22.37206002, 2.04737477, 7.55204678],\n [ 1.33312648, 0. , 22.3991666 , 2.07957562, 7.55032598],\n [22.37206002, 22.3991666 , 0. , 22.42282661, 25.74534554],\n [ 2.04737477, 2.07957562, 22.42282661, 0. , 7.67052252],\n [ 7.55204678, 7.55032598, 25.74534554, 7.67052252, 0. ]])" }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ps.D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`psa.PSAnalysis` provides two convenience methods for plotting this data. The first is to plot a heat-map dendrogram from clustering the trajectories based on their path similarity. You can use any clustering method supported by [scipy.cluster.hierarchy.linkage](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html); the default is 'ward'." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:52.189881Z", "iopub.status.busy": "2021-05-19T06:24:52.188852Z", "iopub.status.idle": "2021-05-19T06:24:52.363638Z", "shell.execute_reply": "2021-05-19T06:24:52.364556Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:11.331257793Z", "start_time": "2023-06-10T07:11:11.031367922Z" } }, "outputs": [ { "data": { "text/plain": "
" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": "
", "image/png": "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7bffKiYmRrVq1Srz3B06dPC0PV//s8ftIsQBAABImjRpklJSUvTss89q4sSJpY4HBQXp9ttv1+LFi1VQUODZv2vXLn322We66667yj1/ixYtdP311+u9996T0+n07M/OztZ3333ntf+5CHEAAMAo/njEyIwZM5ScnKykpCT16dNH2dnZJbazUlNTdfz4cfXt21crVqzQRx99pD59+qhJkyb63//93xLnDAoK0q233lpi37Rp07Rt2zYNGDBAK1eu1Pz58/W73/1OHTp00EMPPeTTmFkTBwAAjGLnESK+LolbunSpJCk9PV3p6emljrtcLklSu3bttGrVKj399NO65557FBQUpG7duunFF19U06ZNS/RxOp0lKm6SlJiYqOXLlys5OVm333676tSpo759++rPf/6zQkJCfBozIQ4AABjFzmu1fF0Tt2rVKttt4+LitHLlSq/tzga/c3Xv3l3du3e3fb2yMJ0KAABgICpxAADAKP5+xIgpCHEAAMAo/lgTZyKmUwEAAAxEJQ4AABjFcliyvLwc1dvxQECIAwAAZrHzHLhqMJ9KiAMAAEbhxgY31sQBAAAYiEocAAAwCnenuhHiAACAUZhOdWM6FQAAwEBU4gAAgFF4xIgbIQ4AABjFvSbO23TqJRpMJWI6FQAAwEBU4gAAgFG4scGNEAcAAIxCiHMjxAEAAKNYDvfmrU2gqwbfIgAAQOChEgcAAIxiycZ0qphOBQAAqFJYE+dGiKskI+Zv1KnTzkq7ftGJY5V2bQAAcOEIcZXk1Gmn3n6wU6VdPz8/X+8Or7TLAwBQce6n/XpvE+AIcQAAwChMp7oR4gAAgFF4xIhbNfgWAQAAAg+VOAAAYBSmU90IcQAAwCiEODemUwEAACQVFBRozJgx6tGjh5o2bSrLspSSklKq3dkQeb6tXbt25V4jPz9fzz//vBITE9W8eXOFhYXpqquu0rRp03Ty5EmfxkslDgAAGMVflbi8vDy9+eabuvrqq9WvXz+9/fbb5223du3aUvu++uorjR49Wv379y/3Grt27dLMmTP1wAMP6IknnlBYWJg+//xzpaSkKCMjQxkZGbbHTogDAABGsRyWLIeXEOfl+PlERUXp8OHDsixLBw8eLDPExcfHl9r3xhtvyLIsDR06tNxrREdHKycnR6GhoZ593bp1U2hoqJ566il98cUXuvnmm22NlxAHAACM4q9KXEXX0RUUFGjBggVKSEhQTExMuW3/O7z9t+uvv16StHv3btvXZU0cAADABXj//fdVWFioYcOGVfgcWVlZkqT27dvb7kMlDgAAmMXGW7d0CW9OTUtLU4MGDXT33XdXqP+mTZs0ffp09e/fXx07drTdj0ocAAAwSnl3h/73dils2bJFX331lf7nf/5HtWrV8rl/Tk6O+vbtq5YtW5a5Bq8shDgAAIAKSktLk6QKTaXu3LlTXbt2VVBQkDIzM9WoUSOf+jOdCgAAjFJVHvZbVFSkd999V3Fxcbrmmmt86rtz504lJibK5XJp1apVioyM9Pn6VOIAAIBRzj5ixNvmb5988okOHjzo9bEi59q1a5cSExPldDqVlZWlqKioCl2fShwAADCKPytxK1asUGFhoQoKCiRJW7du1cKFCyVJvXv3Vp06dTxt09LSVLt2bQ0cOLDM8wUFBSkhIUGZmZmSpNzcXHXt2lV79+5VWlqacnNzlZub62kfGRlpuypHiAMAAPjF8OHDtXPnTs/nBQsWaMGCBZKkHTt2qHXr1pLcz3P7xz/+oUGDBql+/fplns/pdMrpdHo+b926VT/++KMkadCgQaXaT5w48byv+jofQhwAADCKJe+PGKnoZGpOTo6tdi1btiwRzsricrlKfD67Du5iIMQBAACjVJUbGyobNzYAAAAYiEocAAAwip27Ty/F3amVjRAHAACMwnSqGyEOAACYxZ93NhiENXEAAAAGohIHAACMYlk2CnHVoBJHiAMAAEZxWJYcXlKat+OBgOlUAAAAA1GJAwAARuHuVDdCHAAAMArTqW6EOAAAYBRCnBtr4gAAAAxEJQ4AABjFslGJY00cAABAFcONDW6EOMCfouvKCubX7Kv9f6/sIVQpN4T3qewhVClFZ36q7CGgiskPPlbZQzACf10AAIBRHLLk8PJyVG/HAwEhDgAAGMVhuTdvbQIdd6cCAAAYiEocAAAwCjc2uBHiAACAUXjYrxshDgAAGIUQ58aaOAAAAANRiQMAAEahEudGiAMAAEaxfvny1ibQMZ0KAABgICpxAADAKEynulGJAwAARnHI8gS5MrcKTKcWFBRozJgx6tGjh5o2bSrLspSSklJuH5fLpVtuuUWWZWnkyJG2rjN+/Hhde+21atSokWrVqqXLLrtMDz/8sHbu3OnTeAlxAADAKJa3AGfjYcDnk5eXpzfffFOnTp1Sv379bPWZPXu2fvjhB5+uc+TIEd1///2aO3eu0tPT9eSTT2rZsmW64YYblJeXZ/s8TKcCAABIioqK0uHDh2VZlg4ePKi333673PY5OTl65pln9Ne//lV33XWX7evMnj27xOfExERFR0erd+/eWrJkiYYMGWLrPIQ4AABgFMtyb97a+H5e3zo9/PDD6t69u/r37+/7xc7RtGlTSVJQkP1oRogDAABGqQo3Nrz99ttat26dtm7dWuFzFBcX6/Tp09q2bZtGjx6ttm3b+lTRY00cAACAD/bs2aMnn3xS06dPV0RERIXOsW/fPtWsWVN16tTRb3/7WxUXF+uzzz5TWFiY7XMQ4gAAgFG83plqo1J3IR555BFdffXV+sMf/lDhczRp0kTr16/XmjVr9NZbb+nQoUPq2rWr9u7da/scTKcCAACjWPL+RgZ/RbiFCxcqPT1da9as0dGjR0scKyoq0pEjRxQaGqqaNWuWe56goCBdd911kqSbbrpJSUlJio6O1tSpUzVr1ixbY6ESBwAAjFKZlbjNmzeruLhY8fHxatiwoWeTpLfeeksNGzbU3//+d5/PGxkZqYiICP3nP/+x3YdKHAAAgE2DBw9WYmJiqf1du3ZVv379NGrUKHXo0MHn8/7www/66aefdMcdd9juQ4gDAABG8efdqStWrFBhYaEKCgokSVu3btXChQslSb1791br1q3VunXr8/Zt0aJFqYAXFBSkhIQEZWZmSpI2bdqkxx9/XPfcc48uu+wyORwOffvtt3r55ZfVuHFjPfnkk7bHSogDAABG8WeIGz58eInXXy1YsEALFiyQJO3YsaPMAFcWp9Mpp9Pp+RweHq6IiAjNmDFDe/fuVXFxsSIjI9W3b1+NGzdOLVu2tH1uQhwAAMAvcnJyKtTP5XLZ2h8eHq533323Qtc4FyEOAAAYxbLxbtSKvDvVNIQ4AABgFIfl3ry1CXSEOAAAYBSHLDm8PAnO2/FAcNFDXEjNGho2d/3FPm3A2Xf0ZGUPAQAAGOyih7jZA397sU8ZkAi6AABUjGXj7lTWxAEAAFQx3Njgxmu3AAAADEQlDgAAGMWfD/s1CSEOAAAYhRDnRogDAABGYU2cG2viAAAADEQlDgAAGIXpVDdCXCBbMFg6XcZDhY+fvqRDAQDgYnHI+1RidZhqJMQFstMnpYHvn/9Yfr70h8WXdjwAAOCiIcQBAACjcGODGyEOAAAYhTVxboQ4AABgFIckh5eMVh3WxFWH7xEAACDgUIkDAABGsX758tYm0BHiAACAUSwba+Kqw40NTKcCAAAYiEocAAAwisOycWND4BfiCHEAAMAsrIlzYzoVAADAQFTiAACAUXjYrxshDgAAGIU1cW6EOAAAYBTL8v4IkWpQiGNNHAAAgCQVFBRozJgx6tGjh5o2bSrLspSSklKq3Zo1azRs2DDFxcUpJCRElmUpJyenQtc8ceKE2rZtK8uy9OKLL/rUlxAHAACM4pBla/NVXl6e3nzzTZ06dUr9+vUrs11mZqZWrlypVq1aqXPnzhfwnUgTJkxQYWFhhfoS4gAAgFHOronztvkqKipKhw8f1urVq/XCCy+U2W7ChAnKycnRRx99pD59+lT4+1i3bp1eeeUVzZo1q0L9WRMHAAAg+6/qcjguvAZWVFSkIUOGaMSIEbruuusqdA4qcQAAwCiWZdnaqrLnnntOhYWFmjRpUoXPQSUOAAAYxc6at4qsibtUvvnmG02fPl1Lly5VaGioDhw4UKHzEOIAAIBRLBtr3qpqIa64uFhDhgzRvffeq549e17QuQhxAAAAl8jMmTP1448/6sMPP9SRI0ckSfn5+ZKkkydP6siRI6pbt65q1Kjh9VysiQMAAEYxeU3c5s2bdfToUbVp00YNGzZUw4YNdfXVV0ty3/XasGFDffvtt7bORSUOAAAYxeR3p44dO1aDBw8usW/fvn26//779cgjj+jee+9VTEyMrXMR4gAAAH6xYsUKFRYWqqCgQJK0detWLVy4UJLUu3dv1alTRwcOHNDq1aslyVM1W7FihZo2baqmTZsqISHBc76goCAlJCQoMzNTktSuXTu1a9euxDXPvu3h8ssvV2Jiou2xEuIAAIBRHPK+Hqyi68WGDx+unTt3ej4vWLBACxYskCTt2LFDrVu31pYtWzRgwIAS/R599FFJUkJCglatWuXZ73Q65XQ6Kzia8hHiAACAUeyseavomjg770BNTEyUy+WydT477Vq3bm37fP+NEAcAAIxi8pq4i4m7UwEAAAxEJQ4AABjFzgvuvR0PBIQ4AABgFOuXL29tAh3TqQAAAAaiEgcAAIzCdKobIQ4AABiFu1PdCHEA/K6qvsOwshSd+amyh1ClBDsiK3sIVUbxmUOVPYQqwaEz5R5nTZwba+IAAAAMRCUOAAAYxbKxJq46TAAQ4gAAgFFYE+fGdCoAAICBqMQBAACjWLK83jBVHW5sIMQBAACjOOR9KrE6TDUS4gAAgFFYE+dWHYIqAABAwKESBwAAjGJZNtbEVYNKHCEOAAAYhTVxbtXhewQAAAg4VOIAAIBRmE51I8QBAACjcHeqGyEOAAAYxfpl89Ym0LEmDgAAwEBU4gAAgFFYE+dGiAMAAEZxP2LEy5q4SzOUSlUdvkcAAICAQyWukoTUrKFhc9f79Rq3H2utO/16BQAALj3Lcm/e2gQ6QlwlmT3wt/6/yPwZ/r8GAACXmGXjESMVWRP39ddfKzU1VevWrdORI0fUqlUrDRw4UE8++aTq1Knjtf+SJUv00ksv6euvv5bT6VTr1q01atQoPfzwwz6PxQ5CHAAAqPa2bt2qzp0764orrtDMmTPVpEkT/fOf/9Rzzz2nDRs2aMmSJeX2nzp1qsaPH69HHnlEzzzzjGrWrKlt27apqKjIb2MmxAEAAKNYv3x5a+OL+fPn6+TJk1q0aJEuv/xySVK3bt20d+9evfnmmzp8+LAaNmx43r4bNmzQ+PHj9cILL2jMmDGe/bfeeqtPY/AVIQ4AABjFH2viatasKUmqX79+if0NGjSQw+FQcHBwmX3/8pe/KCQkRH/60598u+gF4u5UAABgFIcsW5svHnzwQTVo0EDDhw/Xjz/+qIKCAi1btkxvvPGGRowYodDQ0DL7/vOf/9SVV16pRYsW6YorrlCNGjUUGRmpsWPHMp0KAADgT61bt9batWvVv39/z3SqJD322GOaOXNmuX337NmjAwcO6LHHHtOkSZMUGxurzMxMTZ06Vbt379a8efP8MmZCHAAAMIo/3tiQk5Oj22+/XeHh4Vq4cKGaNm2qr776SpMnT9axY8eUlpZWZt8zZ86ooKBAf/vb33TfffdJkrp27arCwkLNnDlTqampiomJ8Wk8dhDiAACAUfyxJm7s2LHKz8/XN99845k6veWWW9SkSRMNGTJEv//975WQkHDevo0bN9a+ffvUs2fPEvt79eqlmTNnauPGjX4JcayJAwAA1d4333yj2NjYUmvfOnXqJEnavHlzmX07dux43v0ul0uS5HD4J24R4gAAgFH8cWNDRESEtmzZomPHjpXYv3btWklSZGRkmX3vvvtuSdKKFStK7F++fLkcDocnCF5sTKcCAACj+GNN3OjRo9WvXz91795djz/+uJo0aaLs7Gy98MILio2NVa9evSRJQ4cO1dy5c7V9+3ZFRUVJkh566CG98cYbevTRR3Xw4EHFxsZq5cqVmj17th599FFPu4uNEAcAAIzikPepRF+nGu+44w7PHaWjRo3S0aNH1bJlS/3xj3/UM88843lOnNPplNPp9EyVSu5nzGVkZGjcuHGaMmWKDh06pOjoaE2dOlVPPPGEjyOxjxAHAAAg9x2lXbt2LbfNnDlzNGfOnFL7GzVqpNdff12vv/66n0ZXGiEOAAAYxR/TqSYixAEAAKMQ4ty4OxUAAMBAVOIAAIBR/HFjg4kIcdXFgsHS6ZO/fj5+utKGAgDAhWA61Y0QV12cPikNfP/Xz/n50h8WV954AACoMEuW14f5Bn6Iqw7VRgAAgIBDJQ4AABjFYbk3b20CHSEOAAAYxbIxnep9utV8TKcCAAAYiEocAAAwisOy5PBy96m344GAEAcAAIxiWe7NW5tAR4gDAABGYU2cG2viAAAADEQlDgAAGMUhG2viqkEljhAHAACMYsn7+xgCP8IxnQoAAGAkKnEAAMAoPGLEjRAHAACMYlmWLC8hzdvxQECIAwAARmFNnBtr4gAAAAxEJQ4AABiFNXFuhDgAAGAU93Sqtzc2BD6mUwEAAAxEJQ4AAJjFsvGC+2pQiiPEAQAAo1i/fHlrE+gIcQAAwCiEODfWxAEAgGpv1apVnocIn7tlZ2eX2zcxMbHMvpZlad++fX4ZM5U4AABgFj8+7XfKlCnq2rVriX0dOnQot8+rr76q/Pz8EvuOHz+upKQkxcXFqXnz5hUbjBeEOAAAYBR/Tqe2adNG8fHxPvWJjY0ttW/u3Lk6ffq0hg0bVqFx2MF0KgAAwEWWlpamsLAw3XvvvX67BiEOAAAYpbz1Z/+9VcSIESMUFBSkevXqqWfPnlqzZo3P5/j+++/1+eef67777lNYWFiFxmEHIQ4AABjFsrn5on79+ho1apTeeOMNffbZZ5o1a5Z2796txMREffrppz6dKy0tTZI0dOhQH0fhG9bEAQCAau/aa6/Vtdde6/ncpUsX9e/fX1dddZXGjBmjnj172jpPcXGx5s6dq/bt2/u8ts5XVOIAAIBRLJtfF6pBgwbq27evNm3apBMnTtjqs3z5cu3bt8+vNzScRSUOAAAYxc6at4quiTuXy+Xy6XxpaWkKDg7WAw88cFGuXx5CHAAAMIofHxNXwuHDh7Vs2TJdc801qlWrltf2+/bt0/Lly3XXXXepcePGF2EE5SPEAQCAam/gwIFq1aqVrrvuOjVp0kTff/+9ZsyYof3792vOnDmedkOHDtXcuXO1fft2RUVFlTjH3LlzVVxcfEmmUiVCHAAAMIw/HvbbsWNHffDBB3r99dd17NgxNWrUSDfffLPeffddderUydPO6XTK6XR6pln/2zvvvKPWrVvrtttu8+naFUWIAwAARvHHmrixY8dq7NixXtvNmTOnRGXuv3333Xc+XfNCEeICWc1a0vz73P+c/3PljgUAylB85lBlD6HKCHI0quwhVAlBjpqVPQQjEOIC2YA5v/7z2TAHAIDhLtWNDVUdIQ4AABjlUj5ipCojxAEAAKP448YGE/HGBgAAAANRiQMAAEahEudGiAMAAEaxLPfmrU2gYzoVAADAQFTiAACAUZhOdSPEAQAAoxDi3AhxAADALDbWxFWDDMeaOAAAABNRiQMAAIbhxVsSIQ4AABiG1265MZ0KAABgICpxAADAKEymuhHiAACAUXjEiBshDgAAGIU1cW6siQMAADAQlTgAAGAU1sS5EeIAAIBRWBPnxnQqAACAgajEAQAAo1iW9xsXqsF9DYQ4AABgFqZT3QhxAADAKO5KnPc2gY41cQAAAAaiEgcAAIzCdKoblTgAAGAYy+ZmX1ZWloYMGaJ27dopNDRULVq00J133qkNGzbY6v/pp5/qpptuUu3atVW/fn3dfvvt2rJli09j8BUhDgAAVHuvvfaacnJyNGrUKC1fvlyzZs1Sbm6u4uPjlZWVVW7fJUuWqFevXmrWrJkWLVqk119/Xd9//726dOmi7du3+23MTKcCAADDOOS9DuVbnWr27Nlq1qxZiX1JSUmKiYnRlClT1K1btzL7Pv3007rqqqu0ePFiz6NPOnfurLZt2yo5OVnz5s3zaSx2UYkDAABGsWx++eLcACdJYWFhio2N1e7du8vsl5eXp++++069evUq8ey6qKgodejQQR9//LGcTqdPY7GLEAcAAAxz8dfEnc/Ro0e1ceNGtW/fvsw2RUVFkqSQkJBSx0JCQnT8+HG/TakS4gAAAM5jxIgRKiws1Pjx48tsEx4erkaNGumLL74osf/IkSPavHmzJHe1zh8IcQAAwDAOm1vFTZgwQfPmzdPLL7+suLi4skficGjEiBHKzMzUpEmTlJubqx9++EGDBg3S8ePHPW38gRAHAADMcvaVDd62CkpNTdXkyZP1/PPPa+TIkV7bJycn6/HHH9fkyZMVHh6uNm3aSJIeeughSVKLFi0qPJbyEOIAAAB+kZqaqpSUFKWkpGjcuHG2+gQFBemll15SXl6eNm3apJ9//lnLli3Trl27FB0drcjISL+MlUeMVBc1a0nz7/v18/HTlTcWAAAugL/e2DBp0iSlpKTo2Wef1cSJE33uHxYWpquuukqStHHjRmVmZmrGjBk+n8cuQlx1MWBOyc/5+dIfFlfKUAAAuDAX/zlxM2bMUHJyspKSktSnTx9lZ2eXOB4fHy9JGjp0qObOnavt27crKipKkrRq1SqtX79eHTt2lMvl0rp16zRt2jQlJSXZmo6tKEIcAACo9pYuXSpJSk9PV3p6eqnjLpdLkuR0OuV0Oj2fJSk4OFiLFi3S5MmTderUKbVp00bPPfecHnvsMdWoUcNvYybEAQAAw9h5Dpxv06mrVq2y1W7OnDmaM2dOiX2dO3cuVbm7FAhxAADAMBd/OtVEhDgAAGAUf93YYJrAj6kAAAABiEocAAAwUOBX2rwhxAEAAMOwJk6qDt8hAABAAKISBwAADHPxHzFiIkIcAAAwiiWHLC+Tid6OBwJCHAAAMAyVOIk1cQAAAEaiEgcAAMxiWe7NW5sAR4gDAACG4REjUnX4DgEAAAIQlTgAAGAU3p3qRogDAACG4e5UiRAHAACMw5o4qTp8hwAAAAGIShwAADAM06kSIQ4AABiG1265Bf53CAAAEICoxAEAAMMwnSoR4gAAgJECP6R5Q4gDAACG4REjUnX4DgEAAAIQlTgAAGAUy7JkWV5eu+XleCAgxAEAAMNwY4PEdCoAAICRCHEAAMAwDpubb44dO6bRo0crIiJCtWrV0jXXXKP333/fVt/c3FwNHjxYTZo0UZ06dXTjjTcqMzPT5zH4gulUAABgGP9Mp951111av369pk6dqrZt22r+/Pm6//77debMGQ0cOLDMfqdOndKtt96qI0eOaNasWWrWrJlmz56tpKQkrVy5UgkJCT6PxQ5CHAAAMIo/Xru1fPlyZWRkeIKbJHXt2lU7d+7UU089pXvvvVc1atQ4b9+0tDRt3rxZX375pW688UZP36uvvlpjxozRV1995dNY7GI6FQAAVHsfffSRwsLCNGDAgBL7H3roIf3888/lBrGPPvpIV1xxhSfASVJQUJAGDRqkdevWac+ePX4Zc4UrcS6XS5KUn59/0QaDS+fsv7ez/x5xcXl+rkVO8ROWjhWcqOwhVCn5wccqewhVikNnKnsIVUaQo2ZlD6FKyM93/46U9TfKfbz86dKz57Br8+bNuvLKKxUUVDIadezY0XO8c+fOZfbt0qVLqf1n+27ZskUtWrTwaTx2VDjEFRQUSJJatmx50QaDSy8vL0/169ev7GEEnLO/H3rvm0odR1Vx6zsbKnsIAAxUUFBQ4m9UcHCwmjdvrpYtO9nq37x5cwUHB9tqm5eXp8suu6zU/kaNGnmOl9f3bDtf+16ICoe4iIgI7d69W3Xr1q1yD9TLz89Xy5YttXv3btWrV6+yh1MlHT16VK1atTrvf3S4cFX59wMAqjqXy6WCggJFRESU2F+rVi3t2LFDRUVFts4THBysWrVq2b5uef+/vpCHC/vr70CFQ5zD4VBkZOTFHMtFV69ePUKcFw4HyyL9wYTfDwCoysqaJapVq5ZPwcyuxo0bn7didujQIUkqt+hxIX0vBH/BAQBAtXfVVVfp3//+t4qLi0vs//bbbyVJHTp0KLfv2Xa+9r0QhDgAAFDt9e/fX8eOHdOiRYtK7J87d64iIiJ0ww03lNt327ZtJe5gLS4u1nvvvacbbrih1LTwxRKQz4kLCQnRxIkTFRISUtlDqbL4GQEA8KtevXqpe/fuGj58uPLz8xUTE6O//e1vSk9P13vvved5RtzQoUM1d+5cbd++XVFRUZKkIUOGaPbs2RowYICmTp2qZs2a6dVXX9V3332nlStX+m3MlotnTAAAAOjYsWMaP368PvzwQx06dEjt2rXTM888o/vuu8/TZvDgwZo7d6527Nih1q1be/bv379fY8aM0bJly3T8+HFdc801mjRpkm677Ta/jZcQBwAAYCDWxAEAABiIEAcAAGAgQhwAAICBCHEAAAAGMjbEvfDCC+rUqZPq1q2rZs2aqV+/fvruu+9KtHG5XEpJSVFERIRq166txMREbdmypZJGXLW8+uqrio6OVq1atRQXF6fPP/+8socEAAB8YGyIW716tUaMGKHs7GxlZGSouLhYPXr0UGFhoafN9OnT9dJLL+kvf/mL1q9fr+bNm6t79+6/vpy8mvrggw80evRojR8/Xl9//bW6dOmiXr16adeuXZU9NAAAYFPAPGLkwIEDatasmVavXq1bbrlFLpdLERERGj16tJ5++mlJ0qlTpxQeHq5p06bpj3/8YyWPuPLccMMN+u1vf6vXXnvNs+/KK69Uv3799MILL1TiyAAAgF3GVuLOdfToUUm/vmR2x44d2rdvn3r06OFpExISooSEBH355ZeVMsaqoKioSBs2bCjxc5GkHj16VOufCwAApgmIEOdyufTEE0/o5ptv9rxkdt++fZKk8PDwEm3Dw8M9x6qjgwcPyul08nMBAMBwAfHu1JEjR2rTpk1as2ZNqWOWZZX47HK5Su2rjvi5AABgNuMrcX/605/0ySef6LPPPlNkZKRnf/PmzSWpVHUpNze3VBWqOmnSpIlq1KjBzwUAAMMZG+JcLpdGjhypxYsXKysrS9HR0SWOR0dHq3nz5srIyPDsKyoq0urVq9W5c+dLPdwqIzg4WHFxcSV+LpKUkZFRrX8uAACYxtjp1BEjRmj+/PlasmSJ6tat66ks1a9fX7Vr15ZlWRo9erSmTJmiNm3aqE2bNpoyZYrq1KmjgQMHVvLoK9cTTzyhBx54QNddd51uvPFGvfnmm9q1a5ceeeSRyh4aAACwydhHjJS1fuv//u//NHjwYEnual1qaqreeOMNHT58WDfccINmz57tufmhOnv11Vc1ffp07d27Vx06dNDLL7+sW265pbKHBQAAbDI2xAEAAFRnxq6JAwAAqM4IcQAAAAYixAEAABiIEAcAAGAgQhwAAICBCHEAAAAGIsQBAAAYiBAHAABgIEIcAACAgQhxAAAABiLEAQAAGOj/ASM1dI4tHX6uAAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = ps.plot(linkage='ward')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The other is to plot a heatmap annotated with the distance values. Again, the trajectories are displayed in an arrangement that fits the clustering method.\n", "\n", "
\n", " \n", "**Note**\n", "\n", "You will need to install the data visualisation library [Seaborn](https://seaborn.pydata.org/installing.html) for this function.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:52.369679Z", "iopub.status.busy": "2021-05-19T06:24:52.369035Z", "iopub.status.idle": "2021-05-19T06:24:53.236726Z", "shell.execute_reply": "2021-05-19T06:24:53.237186Z" }, "scrolled": false, "ExecuteTime": { "end_time": "2023-06-10T07:11:11.943412320Z", "start_time": "2023-06-10T07:11:11.327661309Z" } }, "outputs": [ { "data": { "text/plain": "
" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt0AAAKECAYAAADbtobNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA75ElEQVR4nO3de5xVdb038M8e0FEuchFmAE28oKJ5OaUBmaJokJ4ik560q/ikdEE9FVZKlqKpYOfRUx2PdjvHpPLV7ZiVoeZJFM1rannJC146agKjiBdEuQz7+cPTxDqAiqw1G5z3u9d6vWbWb+29vu6V9Z3PfNeaWr1erwcAAKhMU6MLAACANzpNNwAAVEzTDQAAFdN0AwBAxTTdAABQMU03AABUTNMNAAAV03QDAEDFNN0AAFCx7o0uAACAN57auF0bdu76b//csHOvzTo23U9UUwUbkCFJGvsvCp3jb/+D1DR5VIMroTOsPP+mJK53V+Badx1/u9ZsHCTdAACUr9boAjYsZroBAKBikm4AAMpXE3WvStINAAAV03QDAEDFjJcAAFA+0yUFkm4AAKiYpBsAgPK5kbJA0g0AABXTdAMAQMWMlwAAUD7TJQWSbgAAuqTp06fnbW97W3r37p2Wlpa8733vy/3331845qijjkqtVitso0aNWudzaboBAChfU61x22t07bXX5thjj81NN92Uq666KitWrMi4cePywgsvFI47+OCDM2/evI5t1qxZ6/xxGC8BAKBLuuKKKwrfX3jhhWlpacltt92W0aNHd+xvbm7OoEGD1utckm4AAMpXa9y2dOnSPPfcc4Vt6dKlr1rys88+myTp379/Yf8111yTlpaW7LTTTpk0aVLa2trW+ePQdAMA8IYyffr09OnTp7BNnz79FV9Tr9czZcqU7Lvvvtltt9069h9yyCH50Y9+lKuvvjrnnHNObr311hx44IGvqYlflfESAADeUKZOnZopU6YU9jU3N7/ia4477rjceeeduf766wv7jzjiiI6vd9ttt+y9994ZOnRofvOb32TChAmvuSZNNwAA5WvgX6Rsbm5+1SZ7Vccff3x+9atfZc6cOdl6661f8djBgwdn6NChmTt37jrVpOkGAKBLqtfrOf744/OLX/wi11xzTbbbbrtXfc3ChQvz2GOPZfDgwet0LjPdAACUr4E3Ur5Wxx57bH74wx/m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vySf+sSZed97P5f/8/4v5K1vHZ4xB77t1d+UDU737t1y4omfzpFHTslhh03K0UcfkX79+mTSpJM6Eu5TTvlMTjjhqzn44COz//4js/POnlLDhqFWX4fnoTVNHlVlLWwAVp5/U5LklrZ/b3AlVG1Ey9FJkuUrb2lwJXSGTZpGJEna63c3uBKq1q32txvEn2hoHXSGIY0u4BUtW/n7hp1706Z3NOzca+PpJQAAVGDDvKGxUbrseAkAAHQWSTcAABWQ7a7KpwEAABXTdAMAQMWMlwAAULoN9S9DNoqkGwAAKibpBgCgApLuVUm6AQCgYpJuAAAqINtdlU8DAAAqpukGAICKGS8BAKACbqRclaQbAAAqJukGAKB0NdlugU8DAAAqpukGAICKGS8BAKACbqRclaQbAAAqJukGAKB8NUn3qiTdAABQMUk3AAAVkO2uyqcBAAAV03QDAEDFjJcAAFC6mkcGFki6AQCgYpJuAAAqIOlelaQbAAAqpukGAICKGS8BAKACst1V+TQAAKBikm4AACrgRspVSboBAKBikm4AAEpXk+0W+DQAAKBimm4AAKiY8RIAACrgRspVSboBAKBikm4AACog6V6VpBsAACqm6QYAgIoZLwEAoAKy3VX5NAAAoGKSbgAASleruZFyVZJuAAComKQbAIAKSLpXJekGAICKaboBAKBixksAAKiAbHdVPg0AAKiYpBsAgAq4kXJVkm4AAKiYphsAACqm6QYAoHS1NDVsW1fnn39+tttuu2y22WbZa6+9ct1115X+eWi6AQDosn7yk5/ks5/9bE4++eTccccd2W+//XLIIYfk0UcfLfU8mm4AACpQa+D22p177rk5+uijc8wxx2SXXXbJ17/+9bzpTW/KBRdc8Lr/yddE0w0AQJe0bNmy3HbbbRk3blxh/7hx43LDDTeUeq51emTgyvNvKvXkbLhGtBzd6BLoJJs0jWh0CXSibrXdGl0CnWZIowuAhlm6dGmWLl1a2Nfc3Jzm5ubCvqeeeirt7e1pbW0t7G9tbc38+fNLrclzugEAqEDjfvCbPn1aTjvttMK+U089NdOmTVvj8bVacSSlXq+vtm99aboBAHhDmTp1aqZMmVLY979T7iQZMGBAunXrtlqq3dbWtlr6vb7MdAMA8IbS3NycLbbYorCtqenedNNNs9dee+Wqq64q7L/qqquyzz77lFqTpBsAgC5rypQp+djHPpa99947b3/72/Od73wnjz76aD71qU+Veh5NNwAAXdYRRxyRhQsX5vTTT8+8efOy2267ZdasWRk6dGip56nV6/V6qe8IAAAUmOkGAICKaboBAKBimm4AAKiYphsAACqm6QYAgIppugEAoGKabgAAqJimGwAAKqbpBgCAimm6AQCgYppuAAComKYbAAAq9v8BhAVaty9NnrAAAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = ps.plot_annotated_heatmap(linkage='single')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Discrete Fréchet distances" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The discrete Fréchet distance between two conformation transition paths $P$ and $Q$ is:\n", "\n", "$$\\delta_{dF}(P,Q) = \\min_{C \\in \\Gamma_{P,Q}} \\|C\\|$$\n", "\n", "where $C$ is a coupling in the set of all couplings $\\Gamma_{P,Q}$ between $P$ and $Q$. A coupling $C(P,Q)$ is a sequence of pairs of conformations in $P$ and $Q$, where the first/last pairs are the first/last points of the respective paths, and for each successive pair, at least one point in $P$ or $Q$ must advance to the next frame.\n", "\n", "$$ C(P,Q) \\equiv (p_{a_1}, q_{b_1}), (p_{a_2}, q_{b_2}), ..., (p_{a_L}, q_{b_L}) $$\n", "\n", "The coupling distance $\\|C\\|$ is the largest distance between a pair of points in such a sequence.\n", "\n", "$$\\|C\\| \\equiv \\max_{i=1, ..., L} d(p_{a_i}, q_{b_i})$$\n", "\n", "\n", "In MDAnalysis, the discrete Fréchet distance is the lowest possible RMSD between a conformation from $P$ and a conformation from $Q$, where the two frames are at similar points along the trajectory, and they are the least structurally similar in that particular coupling sequence. [[6-9]](#References)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:53.240448Z", "iopub.status.busy": "2021-05-19T06:24:53.239882Z", "iopub.status.idle": "2021-05-19T06:24:53.390496Z", "shell.execute_reply": "2021-05-19T06:24:53.390988Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:12.062731459Z", "start_time": "2023-06-10T07:11:11.943755369Z" } }, "outputs": [ { "data": { "text/plain": "array([[ 0. , 1.33312649, 22.37205967, 2.04737475, 7.55204694],\n [ 1.33312649, 0. , 22.39916723, 2.07957565, 7.55032613],\n [22.37205967, 22.39916723, 0. , 22.42282569, 25.74534511],\n [ 2.04737475, 2.07957565, 22.42282569, 0. , 7.67052241],\n [ 7.55204694, 7.55032613, 25.74534511, 7.67052241, 0. ]])" }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ps.run(metric='discrete_frechet')\n", "ps.D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:53.432713Z", "iopub.status.busy": "2021-05-19T06:24:53.394237Z", "iopub.status.idle": "2021-05-19T06:24:53.559942Z", "shell.execute_reply": "2021-05-19T06:24:53.560407Z" }, "ExecuteTime": { "end_time": "2023-06-10T07:11:12.325755240Z", "start_time": "2023-06-10T07:11:12.075739386Z" } }, "outputs": [ { "data": { "text/plain": "
" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": "
", "image/png": "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7bffKiYmRrVq1Srz3B06dPC0PV//s8ftIsQBAABImjRpklJSUvTss89q4sSJpY4HBQXp9ttv1+LFi1VQUODZv2vXLn322We66667yj1/ixYtdP311+u9996T0+n07M/OztZ3333ntf+5CHEAAMAo/njEyIwZM5ScnKykpCT16dNH2dnZJbazUlNTdfz4cfXt21crVqzQRx99pD59+qhJkyb63//93xLnDAoK0q233lpi37Rp07Rt2zYNGDBAK1eu1Pz58/W73/1OHTp00EMPPeTTmFkTBwAAjGLnESK+LolbunSpJCk9PV3p6emljrtcLklSu3bttGrVKj399NO65557FBQUpG7duunFF19U06ZNS/RxOp0lKm6SlJiYqOXLlys5OVm333676tSpo759++rPf/6zQkJCfBozIQ4AABjFzmu1fF0Tt2rVKttt4+LitHLlSq/tzga/c3Xv3l3du3e3fb2yMJ0KAABgICpxAADAKP5+xIgpCHEAAMAo/lgTZyKmUwEAAAxEJQ4AABjFcliyvLwc1dvxQECIAwAAZrHzHLhqMJ9KiAMAAEbhxgY31sQBAAAYiEocAAAwCnenuhHiAACAUZhOdWM6FQAAwEBU4gAAgFF4xIgbIQ4AABjFvSbO23TqJRpMJWI6FQAAwEBU4gAAgFG4scGNEAcAAIxCiHMjxAEAAKNYDvfmrU2gqwbfIgAAQOChEgcAAIxiycZ0qphOBQAAqFJYE+dGiKskI+Zv1KnTzkq7ftGJY5V2bQAAcOEIcZXk1Gmn3n6wU6VdPz8/X+8Or7TLAwBQce6n/XpvE+AIcQAAwChMp7oR4gAAgFF4xIhbNfgWAQAAAg+VOAAAYBSmU90IcQAAwCiEODemUwEAACQVFBRozJgx6tGjh5o2bSrLspSSklKq3dkQeb6tXbt25V4jPz9fzz//vBITE9W8eXOFhYXpqquu0rRp03Ty5EmfxkslDgAAGMVflbi8vDy9+eabuvrqq9WvXz+9/fbb5223du3aUvu++uorjR49Wv379y/3Grt27dLMmTP1wAMP6IknnlBYWJg+//xzpaSkKCMjQxkZGbbHTogDAABGsRyWLIeXEOfl+PlERUXp8OHDsixLBw8eLDPExcfHl9r3xhtvyLIsDR06tNxrREdHKycnR6GhoZ593bp1U2hoqJ566il98cUXuvnmm22N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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = ps.plot(linkage='ward')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-05-19T06:24:53.590497Z", "iopub.status.busy": "2021-05-19T06:24:53.585943Z", "iopub.status.idle": "2021-05-19T06:24:53.722090Z", "shell.execute_reply": "2021-05-19T06:24:53.722499Z" }, "scrolled": false, "ExecuteTime": { "end_time": "2023-06-10T07:11:12.678779759Z", "start_time": "2023-06-10T07:11:12.324361531Z" } }, "outputs": [ { "data": { "text/plain": "
" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt0AAAKECAYAAADbtobNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA75ElEQVR4nO3de5xVdb038M8e0FEuchFmAE28oKJ5OaUBmaJokJ4ik560q/ikdEE9FVZKlqKpYOfRUx2PdjvHpPLV7ZiVoeZJFM1rannJC146agKjiBdEuQz7+cPTxDqAiqw1G5z3u9d6vWbWb+29vu6V9Z3PfNeaWr1erwcAAKhMU6MLAACANzpNNwAAVEzTDQAAFdN0AwBAxTTdAABQMU03AABUTNMNAAAV03QDAEDFNN0AAFCx7o0uAACAN57auF0bdu76b//csHOvzTo23U9UUwUbkCFJGvsvCp3jb/+D1DR5VIMroTOsPP+mJK53V+Badx1/u9ZsHCTdAACUr9boAjYsZroBAKBikm4AAMpXE3WvStINAAAV03QDAEDFjJcAAFA+0yUFkm4AAKiYpBsAgPK5kbJA0g0AABXTdAMAQMWMlwAAUD7TJQWSbgAAuqTp06fnbW97W3r37p2Wlpa8733vy/3331845qijjkqtVitso0aNWudzaboBAChfU61x22t07bXX5thjj81NN92Uq666KitWrMi4cePywgsvFI47+OCDM2/evI5t1qxZ6/xxGC8BAKBLuuKKKwrfX3jhhWlpacltt92W0aNHd+xvbm7OoEGD1utckm4AAMpXa9y2dOnSPPfcc4Vt6dKlr1rys88+myTp379/Yf8111yTlpaW7LTTTpk0aVLa2trW+ePQdAMA8IYyffr09OnTp7BNnz79FV9Tr9czZcqU7Lvvvtltt9069h9yyCH50Y9+lKuvvjrnnHNObr311hx44IGvqYlflfESAADeUKZOnZopU6YU9jU3N7/ia4477rjceeeduf766wv7jzjiiI6vd9ttt+y9994ZOnRofvOb32TChAmvuSZNNwAA5WvgX6Rsbm5+1SZ7Vccff3x+9atfZc6cOdl6661f8djBgwdn6NChmTt37jrVpOkGAKBLqtfrOf744/OLX/wi11xzTbbbbrtXfc3ChQvz2GOPZfDgwet0LjPdAACUr4E3Ur5Wxx57bH74wx/m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vySf+sSZed97P5f/8/4v5K1vHZ4xB77t1d+UDU737t1y4omfzpFHTslhh03K0UcfkX79+mTSpJM6Eu5TTvlMTjjhqzn44COz//4js/POnlLDhqFWX4fnoTVNHlVlLWwAVp5/U5LklrZ/b3AlVG1Ey9FJkuUrb2lwJXSGTZpGJEna63c3uBKq1q32txvEn2hoHXSGIY0u4BUtW/n7hp1706Z3NOzca+PpJQAAVGDDvKGxUbrseAkAAHQWSTcAABWQ7a7KpwEAABXTdAMAQMWMlwAAULoN9S9DNoqkGwAAKibpBgCgApLuVUm6AQCgYpJuAAAqINtdlU8DAAAqpukGAICKGS8BAKACbqRclaQbAAAqJukGAKB0NdlugU8DAAAqpukGAICKGS8BAKACbqRclaQbAAAqJukGAKB8NUn3qiTdAABQMUk3AAAVkO2uyqcBAAAV03QDAEDFjJcAAFC6mkcGFki6AQCgYpJuAAAqIOlelaQbAAAqpukGAICKGS8BAKACst1V+TQAAKBikm4AACrgRspVSboBAKBikm4AAEpXk+0W+DQAAKBimm4AAKiY8RIAACrgRspVSboBAKBikm4AACog6V6VpBsAACqm6QYAgIoZLwEAoAKy3VX5NAAAoGKSbgAASleruZFyVZJuAAComKQbAIAKSLpXJekGAICKaboBAKBixksAAKiAbHdVPg0AAKiYpBsAgAq4kXJVkm4AAKiYphsAACqm6QYAoHS1NDVsW1fnn39+tttuu2y22WbZa6+9ct1115X+eWi6AQDosn7yk5/ks5/9bE4++eTccccd2W+//XLIIYfk0UcfLfU8mm4AACpQa+D22p177rk5+uijc8wxx2SXXXbJ17/+9bzpTW/KBRdc8Lr/yddE0w0AQJe0bNmy3HbbbRk3blxh/7hx43LDDTeUeq51emTgyvNvKvXkbLhGtBzd6BLoJJs0jWh0CXSibrXdGl0CnWZIowuAhlm6dGmWLl1a2Nfc3Jzm5ubCvqeeeirt7e1pbW0t7G9tbc38+fNLrclzugEAqEDjfvCbPn1aTjvttMK+U089NdOmTVvj8bVacSSlXq+vtm99aboBAHhDmTp1aqZMmVLY979T7iQZMGBAunXrtlqq3dbWtlr6vb7MdAMA8IbS3NycLbbYorCtqenedNNNs9dee+Wqq64q7L/qqquyzz77lFqTpBsAgC5rypQp+djHPpa99947b3/72/Od73wnjz76aD71qU+Veh5NNwAAXdYRRxyRhQsX5vTTT8+8efOy2267ZdasWRk6dGip56nV6/V6qe8IAAAUmOkGAICKaboBAKBimm4AAKiYphsAACqm6QYAgIppugEAoGKabgAAqJimGwAAKqbpBgCAimm6AQCgYppuAAComKYbAAAq9v8BVjFat1Al8K8AAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = ps.plot_annotated_heatmap(linkage='single')" ] }, { "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] Sean L. Seyler, Avishek Kumar, M. F. Thorpe, and Oliver Beckstein.\n", "Path Similarity Analysis: A Method for Quantifying Macromolecular Pathways.\n", "PLOS Computational Biology, 11(10):e1004568, October 2015.\n", "URL: https://dx.plos.org/10.1371/journal.pcbi.1004568, doi:10.1371/journal.pcbi.1004568." ] } ], "metadata": { "kernelspec": { "display_name": "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": "5edc5d8d8cbc0935a054a8e44024f729bc376180aae27775d15f2ff38c68f892" } } }, "nbformat": 4, "nbformat_minor": 2 }