{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Glycosylating a protein\n", "\n", "In this tutorial we will glycosylate a protein scaffold with a glycan. We will use part of the HIV-1 enevellope protein 4TVP which is heavily glycosylated. We will attach a Mannose 9 glycan to some of it's N-glycosylation sites." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import glycosylator as gl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we load the protein scaffold and the glycan from a PDB file. We can of course make the glycan live, but we happen to have it as a PDB already." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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9hfAiSqHHsrbHu3xdh4MViAtLQ3+/v4Oe3+itjBAySUURUFycjKmTJkC5VyD+gyj07UOCVERASrqgGV7oVQ2YOLEiZg5cyYvoien4yE8uVRNTQ0eeugh9Ymc/UOAlxOAqCCHPFRO+focBg0ahNzcXPXifSInY4CSy507dw4JCQkOeKyxBfjsG+Bt9bHGgwYNwt69exESEuLkCohUDFDqEDU1NZgzZw6ysrJgNUCdBHl6LHBvGODrqU5Jd22YiqgXyV+5zhM7CoCvymGwAhMnTsSmTZs48iSXYoBSh2lpacG2bdvw4osv4syZMxCjAvQOVMN0oFmdku7qDE71TertmUfP2K7zVCyCHj16IC0tDTNnzoSHhxMfFULUBgYodSgRQX19PTZu3IjMzEx89913EBH1EN1oUOcRBQCLABYrFEWBoigIDw/Hr3/9a8ydOxf+/v48YUQdggFKbkFE0NzcjJKSEuTk5ODDDz/E/v37AQAeHh4IDAxETEwMJkyYgMTERERHR8NkMjE4qUMxQMktNTQ0wM/PDwBQX18PX1/fDt4iouvxOlAiIo0YoEREGjFAiYg04negREQacQRK7dbS0oJFixYhLCwMAQEBiI+Pv+5xwsXFxTCbzairq+ugrQQaGxvRp08fHDp0qMO2gfSFAUrttnHjRqxZswaZmZnIz8/HPffcg8cff7zVOqmpqXjuuedsMyT98MMPePLJJzF48GB4eHhg8uTJDt2mZ555BoqiICMjw7bMy8sLv/3tb7F48WKHtkVdFwOU2m3v3r1ISkrC1KlTERkZiQULFuDrr7/GhQsXAAD//ve/8cEHH2DOnDm211gsFvj4+CAlJQUJCQkO3Z73338fX375JXr27Hnd737xi1/gwIEDOH78uEPbpK6JAUrtVllZ2SqsKioqAABGoxEA8O677yI2Nha9evWyrePr64t169bhqaeegtlstrvN4uLiNpeXl5fj+eefx5YtW9qcjT4oKAj3338/tm7danebRNdigFK7/fQ8ZElJCZYsWYKRI0fansmem5uLYcOGOay9uro6PPDAA1ixYkWr5VarFbNmzcKiRYswcODAG75++PDhOHDggMO2h7ouzr5ADrN48WKkp6dDURTs2LHDtrysrAxDhw51WDv+/v74+OOPkZiYCBHByy+/DECdhd7DwwMpKSk3fX1YWBjKysoctj3U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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "protein = gl.protein(\"./files/4tvp.prot.pdb\")\n", "protein.reindex()\n", "\n", "# # and now we get the glycan to attach\n", "glycan = gl.glycan(\"./files/man9.pdb\")\n", "glycan.infer_glycan_tree()\n", "glycan.snfg()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now with that done, we can search for N-glycosylation sites in our protein. To do so we can use the `find_n_linked_sites()` method of the `Protein` class, which will search the protein sequence for the right matches in each protein chain:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{Chain(A): [Residue(ASN, 58), Residue(ASN, 103), Residue(ASN, 107), Residue(ASN, 118), Residue(ASN, 122), Residue(ASN, 158), Residue(ASN, 195), Residue(ASN, 223), Residue(ASN, 237), Residue(ASN, 256), Residue(ASN, 262), Residue(ASN, 291), Residue(ASN, 298), Residue(ASN, 314), Residue(ASN, 322), Residue(ASN, 345), Residue(ASN, 351), Residue(ASN, 358), Residue(ASN, 395), Residue(ASN, 409)], Chain(B): [Residue(ASN, 525), Residue(ASN, 532), Residue(ASN, 539), Residue(ASN, 551)]}\n" ] } ], "source": [ "# search for glycosylation sites\n", "# (this will return a dictionary with lists of residues in each chain)\n", "sites = protein.find_n_linked_sites()\n", "\n", "print(sites)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Great! Now we can start glycosylating. Let's say we glycosylate some sites in chain A and some in chain B" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Protein(4tvp.prot)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get the sites to glycosylate\n", "sites = sites[protein.get_chain(\"A\")][:2] + sites[protein.get_chain(\"B\")][:2]\n", "\n", "# since we need information about the connectivity of the target amino acids we must\n", "# add known reference bonds or infer them (since we are working with a protein we can use the standard amino acid bonds)\n", "protein.apply_standard_bonds_for(*sites)\n", "\n", "\n", "# now glycosylate the protein\n", "protein.glycosylate(glycan, residues=sites)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And that's it already! We can now inspect the protein in 2D SNFG schematic:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHbCAYAAABGPtdUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABby0lEQVR4nO3dd1xV9f8H8Ndh44WMkQKiOHArLrQciRPU3OWeOb5aLrSvaY5Ac5VpZWaOFDU1zQI1TQUHmJlb3DP3FgUFHIz7/v3hl/vzyhDwDji8no8Hj4f3nM/nfN4c7rn35ZmKiAiIiIiIKN+zMHcBRERERGQYDHZEREREKsFgR0RERKQSDHZEREREKsFgR0RERKQSDHZEREREKsFgR0RERKQSDHZEREREKsFgR0RERKQSDHZEZHQ//fQTFEWBg4OD3vR58+Zh6dKl5inKxG7evIng4GBER0ebuxQiUjGFjxQjImO6ceMGKleuDI1Gg4cPHyIhIUE3r0qVKnB1dUVkZKT5CjSRgwcPonbt2ggJCUHfvn3NXQ4RqRT32BGRUQ0ePBgNGzZE8+bNzV2KwT158sTcJRAR6WGwIyKjWbFiBaKiojBv3rx080qWLImTJ08iKioKiqJAURSULFkS9+7dg42NDSZOnJiuz5kzZ6AoCubMmQMAWLp0KRRFQUREBD788EM4OztDo9GgTZs2uHjx4ivrCw4OhqIoOHLkCDp27Ig33ngDhQsXRs+ePXHv3r109bZu3RqhoaGoUaMG7OzsMGnSJADAiRMn0K5dOzg5OcHOzg7Vq1fHsmXLdH0jIyNRu3ZtAMCHH36o+32Dg4OzvS6JiLKDwY6IjOLu3bsIDAzEjBkz4OnpmW5+WFgYSpcujRo1auCff/7BP//8g7CwMLz11lto3bo1li1bBq1Wq9cnJCQENjY26NGjh970/v37w8LCAqtWrcK3336L/fv3o1GjRoiLi8tWrR06dIC3tzd+++03BAcHY926dQgICEBycrJeu8OHD2P06NEYPnw4tmzZgvfffx9nz55FvXr1cPLkScyZMwehoaGoVKkS+vbti6+++goAULNmTYSEhAAAJkyYoPt9BwwYkN3VSUSUPUJEZATvv/++1KtXT7RarYiI9OnTRzQajV6bypUri5+fX7q+GzZsEAASHh6um5aSkiIeHh7y/vvv66aFhIQIAOnQoYNe/7///lsAyJQpU7KsMSgoSADIyJEj9aavXLlSAMiKFSt007y8vMTS0lLOnj2r17Zr165ia2srV69e1ZvesmVLKVSokMTFxYmIyIEDBwSAhISEZFkTEdHr4B47IjK433//HX/88QcWLVoERVFy3L9ly5Zwc3PT7eUCgK1bt+LmzZvo169fuvYv78GrV68evLy8sHPnzmyN93L/zp07w8rKKl1/Hx8flCtXTm/ajh070LRpUxQvXlxvet++ffH48WP8888/2aqBiMgQGOyIyKASEhIwZMgQDBs2DB4eHoiLi0NcXBySkpIAAHFxcUhMTMxyGVZWVujVqxfCwsJ0h1OXLl0Kd3d3BAQEpGvv5uaW4bT79+9nq+aX+1tZWcHFxSVdf3d393R979+/n+F0Dw8P3XwiIlNhsCMig4qJicGdO3cwa9YsODk56X5++eUXJCYmwsnJKd0esox8+OGHePr0KVavXo3Y2Fhs2LABvXv3hqWlZbq2t2/fznCai4tLtmp+uX9KSgru37+frn9Gex9dXFxw69atdNNv3rwJAHB1dc1WDUREhmBl7gKISF3c3NwyPAQ6Y8YMREVFYfPmzbqwY2trm+ktQypWrIi3334bISEhSE1NxbNnz/Dhhx9m2HblypV4//33da/37NmDK1euZPvihJUrV6JWrVq617/++itSUlLQqFGjV/Zt2rQpwsLCcPPmTd1eOgBYvnw5ChUqhHfeeQfA898V4C1SiMi4GOyIyKDs7OwyDERLly6FpaWl3ryqVati9erVWLNmDUqXLg07OztUrVpVN79fv34YNGgQbt68iXr16qF8+fIZjnnw4EEMGDAAnTp1wrVr1zB+/HgUK1YMH3/8sa7N5MmTMXnyZGzfvh1+fn56/UNDQ2FlZYXmzZvj5MmTmDhxIqpVq4bOnTu/8vcNCgrCxo0b0bhxY3z++edwdnbGypUrsWnTJnz11VcoXLgwAKBMmTKwt7fHypUrUbFiRTg4OMDDw0MvDBIRvS4eiiUis5k0aRL8/PwwcOBA1KlTB23atNGb37VrV9jb2+P69euZ7q0DgMWLFyMpKQldu3bF8OHD4evri8jISDg7O+vaaLVapKamQjJ42E5oaCjOnDmDjh074vPPP0ebNm0QHh4OGxubV/4O5cuXx549e1C+fHkMGTIE7du3x4kTJxASEoLRo0fr2hUqVAhLlizB/fv34e/vj9q1a2PhwoXZWU1ERNnGR4oRUb61dOlSfPjhhzhw4AB8fX1z3D84OBiTJk3CvXv3eC4cEakC99gRERERqQSDHREREZFK8FAsERERkUpwjx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx0RERGRSjDYEREREakEgx2RiSxduhSKouDgwYMGW2ZwcDAURTHY8rJjw4YNUBQFLi4uePbsmUnHJiKirDHYEeVjAwYMwD///GPSMRcvXgwAePDgAdatW2fSsYmIKGsMdkT5mKenJ9555x2TjXf79m38+eefaNKkCezs7HQhj4iI8gYGOyIDOXPmDLp164aiRYvC1tYWJUqUQO/evdMdroyPj8dHH30EV1dXuLi4oGPHjrh586ZemzVr1sDf3x/u7u6wt7dHxYoVMXbsWCQmJuq1y+hQbMmSJdG6dWts2bIFNWvWhL29PSpUqIAlS5a89u+4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ZmFhgbCwMDx79gx16tTBgAEDTBZEc4KHYomIiPK5/PTkCTIuBjsiIiIV0N6Pf/4kCBNRHOwY6vIgBjsiIiIileA5dkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkREREQqwWBHREREpBIMdkQmsnTpUiiKgoMHDxpsmcHBwVAUxWDLy0xkZCQURdH7cXJywttvv41ly5YZfXwiIsoeK3MXQES5N2DAALRo0cJk402bNg2NGzcGAMTExGD58uXo27cvHj16hGHDhpmsDiIiyhiDHVE+5unpCU9PT5ONV7ZsWbzzzju6161atcKBAwfwyy+/MNgREeUBPBRLZCBnzpxBt27dULRoUdja2qJEiRLo3bs3nj17ptcuPj4eH330EVxdXeHi4oKOHTvi5s2bem3WrFkDf39/uLu7w97eHhUrVsTYsWORmJio1y6jQ7ElS5ZE69atsWXLFtSsWRP29vaoUKEClixZYvDf2cLCAg4ODrC2tjb4somIKOe4x47IAI4ePYoGDRrA1dUVkydPRtmyZXHr1i1s2LABSUlJsLW11bUdMGAA3nvvPaxatQrXrl3D6NGj0bNnT+zYsUPX5vz582jVqhUCAwOh0Whw5swZfPnll9i/f79eu6zq+eSTTzB27FgULVoUP/30E/r37w9vb280bNhQ165kyZIAgMuXL2fr99RqtUhJSQEA3L9/HyEhIThx4gQWLlyYrf5ERGRcDHZEBjBq1ChYWVlh//79eOutt3TTe/Toka5tixYtMGfOHN3rBw8e4NNPP8Xt27fh5uYGAJgwYYJuvoigfv36qFixIvz8/HDs2DH4+PhkWU9MTAz+/vtvlChRAgDQsGFDbN++HatWrdILdlZWOfsI6NKli95rCwsLjB8/HgMH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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "protein.snfg()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And there are our five glycans attached to chain A! We can also look at the 3D conformation. Let's use `py3dmol` for this one!" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "protein.py3dmol().show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have a basic glycosylated protein we can save it to a new PDB file" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "protein.to_pdb(\"./files/protein_glycosylated.pdb\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimizing a glycosylated protein\n", "\n", "If we inspect the 3D structure we may find that some of the glycans look rather sad because they may be clashing with each other or parts of the protein. That is because the geometry of the protein as well as the presence of other glycans is not really considered when attaching glycans. However, we can address these issues by optimizing the structure now. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Glycosylator can be used seemlessly within BuildAMol's optimization framework to improve the glycan conformations. Be sure to check out the [BuildAMol tutorial on optimization](https://biobuild.readthedocs.io/en/latest/examples/optimization.html) to get more details if you are interested! In short, to optimize structures we need to perform four steps: \n", "\n", "(1) make a graph representation of the molecule to optimize and choose bonds to rotate around in order to optimize the conformation\n", "\n", "(2) select an optimization environment to evaluate the quality of new conformations\n", "\n", "(3) solve the environment to find a good conformation\n", "\n", "Here we will outline how we can do this for our glycosylated protein:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# let's make a copy so we can have a comparison\n", "protein_to_optimize = protein.copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 1 - making a graph\n", "\n", "The first step is to get a graph for the protein. We can either use `Protein.get_atom_graph()` or `Protein.get_residue_graph()` to do so. If you are working on a not so powerful machine and have a large system with many glycans you should go for the residue graph, however. \n", "\n", "Glycosylator also ships with a dedicated function named `make_scaffold_graph` which creates a residue graph and samples some edges to optimize automatically - so it's a convenience function that handles the preprocessing to get a downsized residue graph which should still yield good results when used for optimization. \n", "\n", "To use it we can do:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "917 15\n" ] } ], "source": [ "# glycosylator comes with a pre-made function to perform steps 1 and 2 automatically. \n", "# It produces a ResidueGraph for the scaffold and a list of edges that belong to the glycan residues, for optimization.\n", "graph, edges = gl.optimizers.make_scaffold_graph(protein_to_optimize, only_clashing_glycans=True, include_root=True, slice=3)\n", "print(len(graph.nodes), len(edges))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2 - making an environment\n", "\n", "Now that we have a graph and edges, we need to setup a an environment to evaluate conformations. BuildAMol offers three environments to choose from: the `DistanceRotatron`, the `OverlapRotatron`, and the `ForceFieldRotatron`. The latter is going to require a lot of computation given how large the system is we are trying to optimize so it's best to stay away from that one! For this example we will use the default `DistanceRotatron` which will aim to maximize inter-atomic distances.\n", "\n", "In addition to these three basic environments, Glycosylator is equipped with the `ScaffoldRotatron` which adds a little extra on top of either of the three environments mentioned above in order to incentivize conformations that make glycans extend away from the protein surface. We will ultimately use this environment to optimize our protein. Here's how:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# make the basic environment for conformation evaluation\n", "base_env = gl.DistanceRotatron(graph, edges, pushback=2, clash_distance=1.8)\n", "\n", "# now make the ScaffoldRotatron to incentivize the glycans to stay away from the protein surface\n", "env = gl.ScaffoldRotatron(base_env)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 3 - optimizing\n", "\n", "Now we can use the environment to optimize our glycoprotein. We can use the `optimize` function to solve the environment using an optimization algorithm. We will use a particle-swarm optimization. We could pass more arguments here to further guide the behavior of the swarm optimization..." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "protein_to_optimize = gl.optimizers.optimize(protein_to_optimize, env, algorithm=\"swarm\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can compare the before-after:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "view = protein.py3dmol(color=\"gray\", glycan_color=\"red\")\n", "for g in protein_to_optimize.glycans:\n", " view.add(g.py3dmol(color=\"cyan\"))\n", "view.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And there we have it! We can now also save our final protein to a PDB file:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "protein_to_optimize.to_pdb(\"./files/protein_optimized.pdb\")\n", "protein_to_optimize.save(\"./files/protein_optimized.pkl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's for this tutorial. You can now glycosylate your own proteins. Of course, the part about optimization is only illustrative and you may need to tinker around to fit it to your system. Thanks for checking out this tutorial and good luck in your project using Glycosylator!" ] } ], "metadata": { "kernelspec": { "display_name": "glyco2", "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.11.0" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }