{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "pc5-mbsX9PZC", "tags": [] }, "source": [ "# AlphaFold\n", "\n", "This Notebook is based on the [Colab notebook](https://colab.research.google.com/github/deepmind/alphafold/blob/main/notebooks/AlphaFold.ipynb) provided by Deepmind and has been adapted by Thomas Chaussepied (IFB) and Julien Seiler (IGBMC/IFB).\n", "\n", "This notebook allows you to easily predict the structure of a protein using a slightly simplified version of [AlphaFold v2.0](https://doi.org/10.1038/s41586-021-03819-2).\n", "\n", "This notebook is not using as many genetic databases as the command line version available through the `alphafold/2.0.1` module.\n", "\n", "**Citing this work**\n", "\n", "Any publication that discloses findings arising from using this notebook should [cite](https://github.com/deepmind/alphafold/#citing-this-work) the [AlphaFold paper](https://doi.org/10.1038/s41586-021-03819-2).\n", "\n", "**Licenses**\n", "\n", "This Colab uses the [AlphaFold model parameters](https://github.com/deepmind/alphafold/#model-parameters-license) and its outputs are thus for non-commercial use only, under the Creative Commons Attribution-NonCommercial 4.0 International ([CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/legalcode)) license. The Colab itself is provided under the [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0). See the full license statement below.\n", "\n", "**More information**\n", "\n", "You can find more information about how AlphaFold works in our two Nature papers:\n", "\n", "* [AlphaFold methods paper](https://www.nature.com/articles/s41586-021-03819-2)\n", "* [AlphaFold predictions of the human proteome paper](https://www.nature.com/articles/s41586-021-03828-1)\n", "\n", "FAQ on how to interpret AlphaFold predictions are [here](https://alphafold.ebi.ac.uk/faq)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing environment\n", "\n", "To allow best performances, this script uses a local ramdisk." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "!mkdir -m 777 --parents /dev/shm/alphafold\n", "!ln -s /dev/shm/alphafold /tmp/ramdisk" ] }, { "cell_type": "markdown", "metadata": { "id": "W4JpOs6oA-QS" }, "source": [ "## Making a prediction" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c20635b92d37421f943078b63aeab345", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Text(value='', description='Sequence:', layout=Layout(width='auto'), placeholder='Enter the amino acid sequenc…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import ipywidgets as widgets\n", "from IPython.display import display\n", "w_sequence = widgets.Text(\n", " placeholder = 'Enter the amino acid sequence to fold',\n", " description = 'Sequence:',\n", " disabled = False,\n", " layout = widgets.Layout(width='auto')\n", ")\n", "display(w_sequence)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the search against databases and the actual prediction can take some time, from minutes to hours, depending on the length of the protein and what type of GPU you are allocated." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controlling the amino acid sequence" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "cellView": "form", "id": "rowN0bVYLe9n" }, "outputs": [], "source": [ "# sample sequence : MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAPKPH\n", "sequence = w_sequence.value\n", "\n", "MIN_SEQUENCE_LENGTH = 16\n", "MAX_SEQUENCE_LENGTH = 2500\n", "\n", "# Remove all whitespaces, tabs and end lines; upper-case\n", "sequence = sequence.translate(str.maketrans('', '', ' \\n\\t')).upper()\n", "aatypes = set('ACDEFGHIKLMNPQRSTVWY') # 20 standard aatypes\n", "if not set(sequence).issubset(aatypes):\n", " raise Exception(f'Input sequence contains non-amino acid letters: {set(sequence) - aatypes}. AlphaFold only supports 20 standard amino acids as inputs.')\n", "if len(sequence) < MIN_SEQUENCE_LENGTH:\n", " raise Exception(f'Input sequence is too short: {len(sequence)} amino acids, while the minimum is {MIN_SEQUENCE_LENGTH}')\n", "if len(sequence) > MAX_SEQUENCE_LENGTH:\n", " raise Exception(f'Input sequence is too long: {len(sequence)} amino acids, while the maximum is {MAX_SEQUENCE_LENGTH}. Please use the full AlphaFold system for long sequences.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Search against genetic databases\n", "\n", "Once this cell has been executed, you will see statistics about the multiple sequence alignment (MSA) that will be used by AlphaFold. In particular, you’ll see how well each residue is covered by similar sequences in the MSA." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "cellView": "form", "id": "2tTeTTsLKPjB" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "162a1be02a75443a9de80c0812d1bcd6", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/3 [elapsed: 00:00 remaining: ?]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "56 Sequences Found in uniref90\n", "95 Sequences Found in smallbfd\n", "57 Sequences Found in mgnify\n", "\n", "203 Sequences Found in Total\n", "\n" ] }, { "data": { "image/png": "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EVqxYgV33XUXDz30EJ9//jknn3wyY8eOZeDAgVU+r3379prM4AA0bV4aKiwsJDs7m5EjR/LEE0/oKogiIiKyz6effsoDDzzAn/70JzZs2HDA9Tt06MDbb7/NEUccUQ/pUpMK6jQ0efJkbrzxRj744AO6dOkSdRwRERFpgHbv3s0LL7zAli1bKl2ntLSUa665hj59+jBv3jyaNWtWjwlTR1UFtS6hl6Ly8vI44YQTVEyLiIhIpbKyshK6CEzHjh05++yzufrqq7n77rvrIVl60UmJKWjt2rW89957nH322VFHERERkTQwcuRIrr76au655x6mTZsWdZyUo4I6BT311FMAKqhFRESkztxyyy2ceOKJjBkzhuXLl0cdJ6WooE5BeXl5DBgwgCOPPDLqKCIiIpImmjRpwrRp0zjooIM499xz+fzzz6OOlDJUUKeYLVu2MG/ePM4555yoo4iIiEia6datG1OnTmXp0qVceeWVUcdJGSqoU8zs2bPZu3evhnuIiIhIUpxxxhlcf/31PPzwwzz44INRx0kJKqhTzMyZM+nZsye5ublRRxEREZE0dcMNN3Dqqady5ZVXsnjx4qjjNHgqqFPItm3b+Mc//sHZZ5+tqyKKiIhI0jRu3JipU6fSrl07zj33XLZt2xZ1pAZNBXUKef7559m1a5eGe4iIiEjSderUiccff5w1a9YwZswYUvligMmmgjqF5OXl0aFDB0488cSoo4iIiEgG+Pa3v83NN9/ME088wcyZM6OO02CpoE4RO3fu5LnnnmPEiBE0btw46jgiIiKSIcaPH0/Lli2ZO3du1FEaLBXUKeKVV15h+/btGu4hIiIi9apRo0YMGDBAJydWQQV1isjLy6N169aceuqpUUcRERGRDBOLxcjPz9c46kqooE4Be/bsYdasWXz/+9+nWbNmUccRERGRDJOTk8PHH3/M5s2bo47SIB2woDazUYksk+R588032bJli4Z7iIiISCRisRgA+fn5ESdpmBLpof51gsskSfLy8mjWrBlnnnlm1FFEREQkA+Xk5ABoHHUlsip7wMzOBIYBXc3srriH2gC7kx1MAu5OXl4ep512Gq1bt446joiIiGSgQw45hK5du6qgrkRVPdSbgPnAl8CCuNts4LvJjyYACxcuZO3atRruISIiIpEqOzFRvq7SHmp3XwQsMrNH3b20HjNJnLy8PBo1asRZZ50VdRQRERHJYDk5OfzjH/+gtLSUJk2aRB2nQUlkDPVgM3vZzFaY2Roze9/M1iQ9mQBBQT1kyBA6dOgQdRQRERHJYLFYjNLSUpYvXx51lAYnkYL6r8BtwBDgOGBQ+K8k2apVq1iyZImGe4iIiEjkNNNH5RIpqD9z9+fdvdjdPy67JT2ZkJeXB6CCWkRERCLXt29fsrKydGJiBSodQx3nNTP7AzAT2Fm20N3fTVoqAYKC+phjjqFHjx5RRxEREZEM17RpU/r3768e6gokUlAfH/47KG6ZA6fUfRwps3nzZv71r38xefLkqKOIiIiIAMGJia+//nrUMRqcAxbU7n5yfQSR/c2aNQvQcA8RERFpOGKxGI8++iiffvop7dq1izpOg3HAgtrMbqhoubvfdIDnPQgMB4rdfUC4bDIwAtgLFAM/cfdNcc/pDiwDJrr7rYm+iHT06quv0qNHD7Kzs6OOIiIiIgJ8dWLikiVL+Na3vhVxmoYjkZMSd8Td9gBnAj0TeN7DwPfKLfuDu8fcfSDwDFC+WL8deD6Bbae9goICYrEYZhZ1FBERERFAlyCvTCJDPv4Yf9/MbiW4WuKBnjfXzHqWW7Yt7m5LgrHYZdsdCawhKNwz2u7du1mxYgXDhg2LOoqIiIjIPl27dqVdu3Y6MbGcRHqoy2sB9KrpDs3sZjPbAPyYsIfazFoCvwImJfD8n5nZfDObv2XLlprGaNDef/99du3aRb9+/aKOIiIiIrKPmRGLxdRDXc4BC2ozyzezxeFtKbAcuLOmO3T3/3H3w4GpwH+FiycBt7t7SQLPv9/dB7n7oHS9emBhYSEA/fv3jziJiIiIyP5ycnLIz89n7969UUdpMBKZNm943M+7gSJ3310H+34UeBa4kWBqvnPN7H+BtsBeM/vS3e+ug/2knIKCAgD1UIuIiEiDE4vFKCkpYd26dRxxxBFRx2kQEhlDvc7McoGyUznnAjXq5zezPu6+Mrx7FlAY7uNbcetMBEoytZiGoIe6c+fOtG3bNuooIiIiIvuJPzFRBXUgkSEfYwmGZ3QMb1PN7OcJPO8x4F9AXzPbaGaXAb8zsyVmthg4Axhbq/RpqqCgQMM9REREpEEaMGAAoJk+4iUy5OMy4Hh33wFgZr8nKJT/VNWT3P2CChb/9UA7c/eJCWRKW+5OYWEhF1xQUfOJiIiIRKtVq1b07t1bM33ESWSWDyOYf7rMnnCZJEFRURFbt25VD7WIiIg0WDk5OeqhjpNID/VDwNtmlhfeH0kCPc1SM2UzfOiERBEREWmoYrEYs2fP5osvvqB58+ZRx4ncAXuo3f02YDTwCfApMNrd70hyroxVNsOHeqhFRESkoYrFYuzdu5dly5ZFHaVBqLSgNrPjzOxMAHd/193vcvc7gcPN7Nh6S5hhCgsLadWqFV27do06ioiIiEiFdAny/VXVQ/0HoKCC5cvCxyQJCgoK6NevH2Yapi4iIiINU+/evWnevLlOTAxVVVAf6u5ryy9091XAoUlLlOEKCws1flpEREQatMaNG3P00UerhzpUVUFd1QjzlnUdRKCkpIQNGzZo/LSIiIg0eLFYTD3UoaoK6n+Y2c1WbuyBmU0CXk1urMxUNsOHCmoRERFp6GKxGMXFxRQVFUUdJXJVFdRXA72AVWb2ZHhbBfQFflEv6TKMpswTERGRVKETE79S6TzU4ZURLzCzXsDR4eKl7r6mXpJloIKCArKysjjyyCOjjiIiIiJSpbKCOj8/n9NPPz3iNNE64IVdwgJaRXQ9KCwspHfv3jRp0iTqKCIiIiJV6tChA507d1YPNYldelzqSUFBgcZPi4iISMqIxWIqqFFB3WCUlpayatUqjZ8WERGRlBGLxVi2bBm7d++OOkqkEiqozewYM7vKzH5uZsckO1QmWrNmDaWlpeqhFhERkZSRk5PDzp07WblyZdRRInXAgtrMbgAeIbiYS3vgITObkOxgmUYzfIiIiEiqicViABk/H3UiPdQXAMe5+43ufiNwAvDj5MbKPAUFwVXeVVCLiIhIqujfvz+NGzfO+HHUiRTUa4GD4u43A1YnJU0GKyws5LDDDqNNmzZRRxERERFJSLNmzejbt2/GF9QHnDYP2AksNbOXAQdOB+aZ2V0A7n5VEvNlDM3wISIiIqkoFovx1ltvRR0jUokU1Hnhrcyc5ETJXO5OYWEhl1xySdRRRERERKolJyeHxx9/nM8++4yDDz446jiRSOTCLo/UR5BMtnnzZrZt26bx0yIiIpJyyk5MXLJkCSeddFLEaaKRyCwffcxshpktM7M1Zbf6CJcpyk5I1JAPERERSTWa6SOxkxIfAu4FdgMnA1OAvyUzVKbRlHkiIiKSqg4//HAOPvjgjD4xMZGCurm7vwKYu69z94nAKcmNlVkKCgpo06YNXbp0iTqKiIiISLWYGTk5OSqoD+BLM2sErDSz/zKzs4GOSc6VUQoLC+nXrx9mFnUUERERkWobMmQIb731FitWrIg6SiQSKajHAS2Aq4BjgYuBS5OYKeNoyjwRERFJZePGjaNZs2ZMnDgx6iiROGBB7e7vuHuJu29099Hufo67Z/Zkg3Vo27ZtbNq0SeOnRUREJGV16tSJsWPH8vjjj2fkyYmVFtRmNsTMLom7P8PMXg1vGkNdR8pOSFQPtYiIiKSy8ePH06ZNG66//vqoo9S7qnqoJwHz4+73BcYDE4Frkpgpo6igFhERkXTQrl07rr76ambNmsU777wTdZx6VVVB3cbdl8XdX+nuC9x9LtA6ybkyRkFBAU2aNKFXr15RRxERERGplXHjxtG+fXsmTJgQdZR6VVVB3Tb+jrufE3e3U1LSZKDCwkL69OlDVlYiV4EXERERabhat27Ntddey0svvcTcuXOjjlNvqiqoC83s++UXmtlwYHnyImWWgoICnZAoIiIiaeOKK66gS5cu/M///A/uHnWcelFVQf3fwG1m9pCZ/Ty8PQzcFj4mtVRaWsrq1as1flpERETSRvPmzZkwYQLz5s3jpZdeijpOvai0oHb3VUAMeB3oGd7mAjF3z8xZu+vYqlWr2L17t3qoRUREJK2MGTOGnj17MmHChIzopa5yHmp33+nuD7r71eHtQXf/sr7CpbuCggJAM3yIiIhIemnatCk33ngj8+fP56mnnoo6TtIlcqXEfczs3WQFyURlU+b17ds34iQiIiIideuiiy6ib9++XH/99ezZsyfqOElVrYIasKSkyFAFBQUcfvjhtGrVKuooIiIiInUqKyuLSZMmsXTpUqZNmxZ1nKSqbkH9bFJSZKjCwkKNnxYREZG0NWrUKHJzc7nxxhspLS2NOk7SVKugdvfMmqU7idydwsJCjZ8WERGRtNWoUSMmT57MqlWreOSRR6KOkzQHLKjN7BwzW2lmn5nZNjPbbmbb6iNcOvvggw8oKSlRQS0iIiJpbfjw4QwePJibbrqJnTt3Rh0nKRLpof5f4Cx3P9jd27h7a3dvk+xg6a5shg8N+RAREZF0ZmbcdNNNbNiwgaeffjrqOEmRSEFd5O4FdblTM2trZjPMrNDMCszsm2Y2zcwWhre1ZrawLvfZ0JTN8KEeahEREUl3Q4cOJSsri/feey/qKEmRlcA6881sGvAUsK+f3t1n1mK/dwIvuPu5ZtYUaOHuPyp70Mz+CHxWi+03eAUFBbRt25aOHTtGHUVEREQkqZo1a0b//v1ZtGhR1FGSIpGCug3wOXBG3DIHalRQm1kb4NvATwDcfRewK+5xA84DTqnJ9lNF2QmJwcsVERERSW+xWIy5c+dGHSMpDlhQu/voOt5nL2AL8JCZ5QILgLHuviN8/FsEw0xW1vF+G5SCggLOPPPMqGOIiIiI1ItYLMbUqVP59NNPadeuXdRx6lQis3x0M7M8Mys2syIze9LMutVin1nAMcC97v4NYAdwbdzjFwCPVZHnZ2Y238zmb9mypRYxorNlyxY+/PBDjZ8WERGRjJGbmwvA4sWLI05S9xI5KfEhYDZwGNAVeDpcVlMbgY3u/nZ4fwZBgY2ZZQHnAJVeTsfd73f3Qe4+qEOHDrWIEZ2ya9qffvrp0QYRERERqSexWAzI3IK6g7s/5O67w9vDQI0rWXf/ENhgZn3DRacCy8KfTwMK3X1jTbefCqZPn06fPn32fVMTERERSXedO3emffv2GVtQf2RmF5lZ4/B2EfBxLff7c2CqmS0GBgK/DZefTxXDPdLBli1bePXVVznvvPN0QqKIiIhkDDMjNzc3LWf6SGSWj58CdwO3E8zu8Wa4rMbcfSEwqILlP6nNdlNBXl4ee/fuZdSoUVFHEREREalXsViM++67jz179tC4ceOo49SZRGb5WA+cVQ9ZMsL06dM56qij9o0jEhEREckUubm5fPHFF6xevZqjjjoq6jh1ptKC2sxuqOJ57u6Tk5AnrRUXF/Paa69x3XXXabiHiIiIZJyyDsVFixalVUFd1RjqHRXcAC4DfpXkXGlp5syZ7N27l/POOy/qKCIiIiL1rn///jRu3DjtTkystIfa3f9Y9rOZtQbGAqOBx4E/VvY8qdz06dPp168fAwYMiDqKiIiISL076KCD6NevX9oV1FXO8mFmh5jZb4DFhBdkcfdfuXtxvaRLIx9++CH//Oc/NbuHiIiIZLRYLJZ2M31UWlCb2R+Ad4DtQI67T3T3T+stWZrRcA8RERGRoKBet24dn332WdRR6kxVPdRXE1wdcQKwycy2hbftZratfuKlj+nTp5Odnc3RRx8ddRQRERGRyKTjJcgrLajdvZG7N3f31u7eJu7W2t3b1GfIVLd582bmzp2r3mkRERHJeOl4CfJErpQotfTkk0/i7rqYi4iIiGS8ww47jEMOOUQFtVTPE088wYABA8jOzo46ioiIiEik0vES5Cqok2zTpk28/vrr6p0WERERCcViMfLz89m7d2/UUeqECuok03APERERkf3FYjE+//xz1qxZE3WUOqGCOsmmT59OTk4O/fv3jzqKiIiISINQNtNHugz7UEGdRB988AHz5s3T7B4iIiIicbKzs2nUqFHanJiogjqJZsyYAaDhHiIiIiJxmjdvzlFHHaWCWg5s+vTp5Obm0rdv36ijiIiIiDQo6TTThwrqJNmwYQNvvvmmhnuIiIiIVCAWi/H++++zbVvqX4BbBXWSaLiHiIiISOXKrpi4ZMmSiJPUngrqJJk+fTrf+MY36NOnT9RRRERERBqcdJrpQwV1Eqxfv5633npLwz1EREREKtGtWzfatm2bFicmqqCuQ7t27WL27NlcdtllgIZ7iIiIiFTGzIjFYiqoBfbs2cNrr73G5ZdfTufOnRkxYgQLFy7kpptuonfv3lHHExEREWmwcnNzWbx4ccpfgjwr6gCpyN1ZsGABjz76KNOmTWPTpk20atWKkSNHcuGFF3LaaafRpEmTqGOKiIiINGixWIySkhLWrl1Lr169oo5TYyqoq2nr1q0MHjyYlStX0qRJE4YNG8aFF17I8OHDadGiRdTxRERERFJG2UwfixcvVkGdSdq2bcvQoUO55ppr+OEPf0i7du2ijiQiIiKSkgYMGICZsWjRIkaOHBl1nBpTQV0D999/f9QRRERERFJeixYt6NOnT8qfmKiTEkVEREQkMukw04cKahERERGJTG5uLqtXr6akpCTqKDWmglpEREREIhOLxXD3lL4EuQpqEREREYlM/EwfqUoFtYiIiIhEpkePHrRp04ZFixZFHaXGVFCLiIiISGTS4RLkKqhFREREJFJlBbW7Rx2lRlRQi4iIiEikcnNz2bZtG+vWrYs6So2ooBYRERGRSKX6iYkqqEVEREQkUmWXIFdBLSIiIiJSA61ataJ379688cYb7N27N+o41aaCWkREREQid9ZZZ/HCCy8wZMiQlJtCTwW1iIiIiETu1ltvZcqUKaxatYpjjz2WX/ziF2zfvj3qWAlRQS0iIiIikTMzLr74YpYvX86YMWO444476NevHzNmzGjw0+mpoBYRERGR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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import os\n", "os.environ['TF_FORCE_UNIFIED_MEMORY'] = '1'\n", "os.environ['XLA_PYTHON_CLIENT_MEM_FRACTION'] = '2.0'\n", "\n", "from urllib import request\n", "from concurrent import futures\n", "import json\n", "from matplotlib import gridspec\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import py3Dmol\n", "\n", "from alphafold.model import model\n", "from alphafold.model import config\n", "from alphafold.model import data\n", "\n", "from alphafold.data import parsers\n", "from alphafold.data import pipeline\n", "from alphafold.data.tools import jackhmmer\n", "\n", "from alphafold.common import protein\n", "\n", "from alphafold.relax import relax\n", "from alphafold.relax import utils\n", "\n", "from IPython import display\n", "from ipywidgets import GridspecLayout\n", "from ipywidgets import Output\n", "\n", "from tqdm.notebook import trange, tqdm\n", "\n", "# Color bands for visualizing plddt\n", "PLDDT_BANDS = [(0, 50, '#FF7D45'),\n", " (50, 70, '#FFDB13'),\n", " (70, 90, '#65CBF3'),\n", " (90, 100, '#0053D6')]\n", "\n", "TQDM_BAR_FORMAT = '{l_bar}{bar}| {n_fmt}/{total_fmt} [elapsed: {elapsed} remaining: {remaining}]'\n", "\n", "# --- Search against genetic databases ---\n", "with open('target.fasta', 'wt') as f:\n", " f.write(f'>query\\n{sequence}')\n", "\n", "# Run the search against chunks of genetic databases (since the genetic\n", "# databases don't fit in Colab ramdisk).\n", "\n", "jackhmmer_binary_path = '/shared/software/miniconda3-admin/envs/alphafold-2.0.1/bin/jackhmmer'\n", "dbs = []\n", "\n", "num_jackhmmer_chunks = {'uniref90': 1, 'smallbfd': 1, 'mgnify': 1}\n", "total_jackhmmer_chunks = sum(num_jackhmmer_chunks.values())\n", "with tqdm(total=3, bar_format=TQDM_BAR_FORMAT) as pbar:\n", "\n", " pbar.set_description('Searching uniref90')\n", " jackhmmer_uniref90_runner = jackhmmer.Jackhmmer(\n", " binary_path=jackhmmer_binary_path,\n", " database_path=f'/mnt/alphafold/uniref90/uniref90.fasta',\n", " get_tblout=True,\n", " n_cpu=12,\n", " z_value=135301051)\n", " dbs.append(('uniref90', jackhmmer_uniref90_runner.query('target.fasta')))\n", " pbar.update(n=1)\n", "\n", "\n", " pbar.set_description('Searching smallbfd')\n", " jackhmmer_smallbfd_runner = jackhmmer.Jackhmmer(\n", " binary_path=jackhmmer_binary_path,\n", " database_path=f'/mnt/alphafold/small_bfd/bfd-first_non_consensus_sequences.fasta',\n", " get_tblout=True,\n", " n_cpu=12,\n", " z_value=65984053)\n", " dbs.append(('smallbfd', jackhmmer_smallbfd_runner.query('target.fasta')))\n", " pbar.update(n=1)\n", "\n", " pbar.set_description('Searching mgnify')\n", " jackhmmer_mgnify_runner = jackhmmer.Jackhmmer(\n", " binary_path=jackhmmer_binary_path,\n", " database_path=f'/mnt/alphafold/mgnify/mgy_clusters_2018_12.fa',\n", " get_tblout=True,\n", " n_cpu=12,\n", " z_value=304820129)\n", " dbs.append(('mgnify', jackhmmer_mgnify_runner.query('target.fasta')))\n", " pbar.update(n=1)\n", "\n", "\n", "# --- Extract the MSAs and visualize ---\n", "# Extract the MSAs from the Stockholm files.\n", "# NB: deduplication happens later in pipeline.make_msa_features.\n", "\n", "mgnify_max_hits = 501\n", "\n", "msas = []\n", "deletion_matrices = []\n", "full_msa = []\n", "for db_name, db_results in dbs:\n", " unsorted_results = []\n", " for i, result in enumerate(db_results):\n", " msa, deletion_matrix, target_names = parsers.parse_stockholm(result['sto'])\n", " e_values_dict = parsers.parse_e_values_from_tblout(result['tbl'])\n", " e_values = [e_values_dict[t.split('/')[0]] for t in target_names]\n", " zipped_results = zip(msa, deletion_matrix, target_names, e_values)\n", " if i != 0:\n", " # Only take query from the first chunk\n", " zipped_results = [x for x in zipped_results if x[2] != 'query']\n", " unsorted_results.extend(zipped_results)\n", " sorted_by_evalue = sorted(unsorted_results, key=lambda x: x[3])\n", " db_msas, db_deletion_matrices, _, _ = zip(*sorted_by_evalue)\n", " if db_msas:\n", " if db_name == 'mgnify':\n", " db_msas = db_msas[:mgnify_max_hits]\n", " db_deletion_matrices = db_deletion_matrices[:mgnify_max_hits]\n", " full_msa.extend(db_msas)\n", " msas.append(db_msas)\n", " deletion_matrices.append(db_deletion_matrices)\n", " msa_size = len(set(db_msas))\n", " print(f'{msa_size} Sequences Found in {db_name}')\n", "\n", "deduped_full_msa = list(dict.fromkeys(full_msa))\n", "total_msa_size = len(deduped_full_msa)\n", "print(f'\\n{total_msa_size} Sequences Found in Total\\n')\n", "\n", "aa_map = {restype: i for i, restype in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZ-')}\n", "msa_arr = np.array([[aa_map[aa] for aa in seq] for seq in deduped_full_msa])\n", "num_alignments, num_res = msa_arr.shape\n", "\n", "fig = plt.figure(figsize=(12, 3))\n", "plt.title('Per-Residue Count of Non-Gap Amino Acids in the MSA')\n", "plt.plot(np.sum(msa_arr != aa_map['-'], axis=0), color='black')\n", "plt.ylabel('Non-Gap Count')\n", "plt.yticks(range(0, num_alignments + 1, max(1, int(num_alignments / 3))))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run AlphaFold and download prediction\n", "\n", "Once this cell has been executed, a gzip-archive called `prediction.tgz` with the obtained prediction will be automatically saved in the same directory than this notebook." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "cellView": "form", "id": "XUo6foMQxwS2" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7e046a692b584f20927bf6f692535e3f", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/7 [elapsed: 00:00 remaining: ?]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5202ff174df54c08ab5c1d0bfdefe364", "version_major": 2, "version_minor": 0 }, "text/plain": [ "GridspecLayout(children=(Output(layout=Layout(grid_area='widget001')), Output(layout=Layout(grid_area='widget0…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# --- Run the model ---\n", "model_names = ['model_1', 'model_2', 'model_3', 'model_4', 'model_5', 'model_2_ptm']\n", "\n", "def _placeholder_template_feats(num_templates_, num_res_):\n", " return {\n", " 'template_aatype': np.zeros([num_templates_, num_res_, 22], np.float32),\n", " 'template_all_atom_masks': np.zeros([num_templates_, num_res_, 37, 3], np.float32),\n", " 'template_all_atom_positions': np.zeros([num_templates_, num_res_, 37], np.float32),\n", " 'template_domain_names': np.zeros([num_templates_], np.float32),\n", " 'template_sum_probs': np.zeros([num_templates_], np.float32),\n", " }\n", "\n", "output_dir = 'prediction'\n", "os.makedirs(output_dir, exist_ok=True)\n", "\n", "plddts = {}\n", "pae_outputs = {}\n", "unrelaxed_proteins = {}\n", "\n", "with tqdm(total=len(model_names) + 1, bar_format=TQDM_BAR_FORMAT) as pbar:\n", " for model_name in model_names:\n", " pbar.set_description(f'Running {model_name}')\n", " num_templates = 0\n", " num_res = len(sequence)\n", "\n", " feature_dict = {}\n", " feature_dict.update(pipeline.make_sequence_features(sequence, 'test', num_res))\n", " feature_dict.update(pipeline.make_msa_features(msas, deletion_matrices=deletion_matrices))\n", " feature_dict.update(_placeholder_template_feats(num_templates, num_res))\n", "\n", " cfg = config.model_config(model_name)\n", " params = data.get_model_haiku_params(model_name, '/mnt/alphafold')\n", " model_runner = model.RunModel(cfg, params)\n", " processed_feature_dict = model_runner.process_features(feature_dict,\n", " random_seed=0)\n", " prediction_result = model_runner.predict(processed_feature_dict)\n", "\n", " mean_plddt = prediction_result['plddt'].mean()\n", "\n", " if 'predicted_aligned_error' in prediction_result:\n", " pae_outputs[model_name] = (\n", " prediction_result['predicted_aligned_error'],\n", " prediction_result['max_predicted_aligned_error']\n", " )\n", " else:\n", " # Get the pLDDT confidence metrics. Do not put pTM models here as they\n", " # should never get selected.\n", " plddts[model_name] = prediction_result['plddt']\n", "\n", " # Set the b-factors to the per-residue plddt.\n", " final_atom_mask = prediction_result['structure_module']['final_atom_mask']\n", " b_factors = prediction_result['plddt'][:, None] * final_atom_mask\n", " unrelaxed_protein = protein.from_prediction(processed_feature_dict,\n", " prediction_result,\n", " b_factors=b_factors)\n", " unrelaxed_proteins[model_name] = unrelaxed_protein\n", "\n", " # Delete unused outputs to save memory.\n", " del model_runner\n", " del params\n", " del prediction_result\n", " pbar.update(n=1)\n", "\n", " # --- AMBER relax the best model ---\n", " pbar.set_description(f'AMBER relaxation')\n", " amber_relaxer = relax.AmberRelaxation(\n", " max_iterations=0,\n", " tolerance=2.39,\n", " stiffness=10.0,\n", " exclude_residues=[],\n", " max_outer_iterations=20)\n", " # Find the best model according to the mean pLDDT.\n", " best_model_name = max(plddts.keys(), key=lambda x: plddts[x].mean())\n", " relaxed_pdb, _, _ = amber_relaxer.process(\n", " prot=unrelaxed_proteins[best_model_name])\n", " pbar.update(n=1) # Finished AMBER relax.\n", "\n", "# Construct multiclass b-factors to indicate confidence bands\n", "# 0=very low, 1=low, 2=confident, 3=very high\n", "banded_b_factors = []\n", "for plddt in plddts[best_model_name]:\n", " for idx, (min_val, max_val, _) in enumerate(PLDDT_BANDS):\n", " if plddt >= min_val and plddt <= max_val:\n", " banded_b_factors.append(idx)\n", " break\n", "banded_b_factors = np.array(banded_b_factors)[:, None] * final_atom_mask\n", "to_visualize_pdb = utils.overwrite_b_factors(relaxed_pdb, banded_b_factors)\n", "\n", "\n", "# Write out the prediction\n", "pred_output_path = os.path.join(output_dir, 'selected_prediction.pdb')\n", "with open(pred_output_path, 'w') as f:\n", " f.write(relaxed_pdb)\n", "\n", "\n", "# --- Visualise the prediction & confidence ---\n", "show_sidechains = True\n", "def plot_plddt_legend():\n", " \"\"\"Plots the legend for pLDDT.\"\"\"\n", " thresh = [\n", " 'Very low (pLDDT < 50)',\n", " 'Low (70 > pLDDT > 50)',\n", " 'Confident (90 > pLDDT > 70)',\n", " 'Very high (pLDDT > 90)']\n", "\n", " colors = [x[2] for x in PLDDT_BANDS]\n", "\n", " plt.figure(figsize=(2, 2))\n", " for c in colors:\n", " plt.bar(0, 0, color=c)\n", " plt.legend(thresh, frameon=False, loc='center', fontsize=20)\n", " plt.xticks([])\n", " plt.yticks([])\n", " ax = plt.gca()\n", " ax.spines['right'].set_visible(False)\n", " ax.spines['top'].set_visible(False)\n", " ax.spines['left'].set_visible(False)\n", " ax.spines['bottom'].set_visible(False)\n", " plt.title('Model Confidence', fontsize=20, pad=20)\n", " return plt\n", "\n", "# Color the structure by per-residue pLDDT\n", "color_map = {i: bands[2] for i, bands in enumerate(PLDDT_BANDS)}\n", "view = py3Dmol.view(width=800, height=600)\n", "view.addModelsAsFrames(to_visualize_pdb)\n", "style = {'cartoon': {\n", " 'colorscheme': {\n", " 'prop': 'b',\n", " 'map': color_map}\n", " }}\n", "if show_sidechains:\n", " style['stick'] = {}\n", "view.setStyle({'model': -1}, style)\n", "view.zoomTo()\n", "\n", "grid = GridspecLayout(1, 2)\n", "out = Output()\n", "with out:\n", " view.show()\n", "grid[0, 0] = out\n", "\n", "out = Output()\n", "with out:\n", " plot_plddt_legend().show()\n", "grid[0, 1] = out\n", "\n", "display.display(grid)\n", "\n", "# Display pLDDT and predicted aligned error (if output by the model).\n", "if pae_outputs:\n", " num_plots = 2\n", "else:\n", " num_plots = 1\n", "\n", "plt.figure(figsize=[8 * num_plots, 6])\n", "plt.subplot(1, num_plots, 1)\n", "plt.plot(plddts[best_model_name])\n", "plt.title('Predicted LDDT')\n", "plt.xlabel('Residue')\n", "plt.ylabel('pLDDT')\n", "\n", "if num_plots == 2:\n", " plt.subplot(1, 2, 2)\n", " pae, max_pae = list(pae_outputs.values())[0]\n", " plt.imshow(pae, vmin=0., vmax=max_pae, cmap='Greens_r')\n", " plt.colorbar(fraction=0.046, pad=0.04)\n", " plt.title('Predicted Aligned Error')\n", " plt.xlabel('Scored residue')\n", " plt.ylabel('Aligned residue')\n", "\n", "# Save pLDDT and predicted aligned error (if it exists)\n", "pae_output_path = os.path.join(output_dir, 'predicted_aligned_error.json')\n", "if pae_outputs:\n", " # Save predicted aligned error in the same format as the AF EMBL DB\n", " rounded_errors = np.round(pae.astype(np.float64), decimals=1)\n", " indices = np.indices((len(rounded_errors), len(rounded_errors))) + 1\n", " indices_1 = indices[0].flatten().tolist()\n", " indices_2 = indices[1].flatten().tolist()\n", " pae_data = json.dumps([{\n", " 'residue1': indices_1,\n", " 'residue2': indices_2,\n", " 'distance': rounded_errors.flatten().tolist(),\n", " 'max_predicted_aligned_error': max_pae.item()\n", " }],\n", " indent=None,\n", " separators=(',', ':'))\n", " with open(pae_output_path, 'w') as f:\n", " f.write(pae_data)\n", "\n", "\n", "# --- Download the predictions ---\n", "!tar czf {output_dir}.tgz {output_dir}" ] }, { "cell_type": "markdown", "metadata": { "id": "lUQAn5LYC5n4" }, "source": [ "### Interpreting the prediction\n", "\n", "Please see the [AlphaFold methods paper](https://www.nature.com/articles/s41586-021-03819-2) and the [AlphaFold predictions of the human proteome paper](https://www.nature.com/articles/s41586-021-03828-1), as well as [our FAQ](https://alphafold.ebi.ac.uk/faq) on how to interpret AlphaFold predictions." ] }, { "cell_type": "markdown", "metadata": { "id": "YfPhvYgKC81B" }, "source": [ "## AlphaFold Code License\n", "\n", "Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0.\n", "\n", "Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n", "\n", "## Model Parameters License\n", "\n", "The AlphaFold parameters are made available for non-commercial use only, under the terms of the Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. You can find details at: https://creativecommons.org/licenses/by-nc/4.0/legalcode\n", "\n", "\n", "## Third-party software\n", "\n", "Use of the third-party software, libraries or code referred to in the [Acknowledgements section](https://github.com/deepmind/alphafold/#acknowledgements) in the AlphaFold README may be governed by separate terms and conditions or license provisions. Your use of the third-party software, libraries or code is subject to any such terms and you should check that you can comply with any applicable restrictions or terms and conditions before use.\n", "\n", "\n", "## Mirrored Databases\n", "\n", "The following databases have been mirrored by DeepMind, and are available with reference to the following:\n", "* UniRef90: v2021\\_03 (unmodified), by The UniProt Consortium, available under a [Creative Commons Attribution-NoDerivatives 4.0 International License](http://creativecommons.org/licenses/by-nd/4.0/).\n", "* MGnify: v2019\\_05 (unmodified), by Mitchell AL et al., available free of all copyright restrictions and made fully and freely available for both non-commercial and commercial use under [CC0 1.0 Universal (CC0 1.0) Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/).\n", "* BFD: (modified), by Steinegger M. and Söding J., modified by DeepMind, available under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by/4.0/). See the Methods section of the [AlphaFold proteome paper](https://www.nature.com/articles/s41586-021-03828-1) for details." ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [], "name": "AlphaFold.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Alphafold 2.0.1", "language": "python", "name": "alphafold-2.0.1" }, "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.8.12" } }, "nbformat": 4, "nbformat_minor": 4 }