{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains material from [PyRosetta](https://RosettaCommons.github.io/PyRosetta.notebooks);\n", "content is available [on Github](https://github.com/RosettaCommons/PyRosetta.notebooks.git).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Setting up a membrane protein in the bilayer](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/15.01-Accounting-for-the-lipid-bilayer.ipynb) | [Contents](toc.ipynb) | [Index](index.ipynb) | [Running Rosetta in Parallel](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/16.00-Running-PyRosetta-in-Parallel.ipynb) >

\"Open" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Predicting the ∆∆G of single point mutations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Accurately estimating the thermodynamic cost of a mutation is a building block of protein engineering and design. This task is especially tricky for membrane proteins because the calculations must account for the lipid bilayer. In this tutorial, we will walk through the protocol for estimating the ∆∆G for lipid facing positions using RosettaMP and the _franklin2019_ energy function. \n", "\n", "As an example, we will examine mutations in the integral membrane enzyme PagP. PagP is a beta-barrel protein that transfers a palmitoyl group fron the sn-1 position of a glycerophospholipid to the endotoxin of lipopolysacharide (LPS). The enzyme provides bacterial resistance to host immune defenses such as antimicrobial pepetides (Guo et al. 1998; Kawasaki et al. 2004). Recently, Marx & Fleming measured the energetic cost of making mutations at the V111 position on PagP (Marx & Fleming, 2017). Here, we will perform the same set of mutations with Rosetta and compare with the experimental values. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectives\n", " - Setup a protein in an implicit lipid bilayer\n", " - Compute the ∆∆G of mutation\n", " - Analyze contributions to the change in stability\n", " - Visualize the model in PyMOL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PyRosetta Initialization & Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first step is to initialize PyRosetta and load the protein of interest. In this tutorial, we will use PagP (PDB 3GP6). The starting structure is from the Orientations of Proteins in Membranes database (https://opm.phar.umich.edu/) which provides spatial arrangements of membrane proteins in the lipid bilayer. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install pyrosettacolabsetup\n", "import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()\n", "import pyrosetta; pyrosetta.init()\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PyRosetta-4 2020 [Rosetta PyRosetta4.MinSizeRel.python37.mac 2020.02+release.22ef835b4a2647af94fcd6421a85720f07eddf12 2020-01-05T17:31:56] retrieved from: http://www.pyrosetta.org\n", "(C) Copyright Rosetta Commons Member Institutions. Created in JHU by Sergey Lyskov and PyRosetta Team.\n", "\u001b[0mcore.init: \u001b[0mChecking for fconfig files in pwd and ./rosetta/flags\n", "\u001b[0mcore.init: \u001b[0mRosetta version: PyRosetta4.MinSizeRel.python37.mac r242 2020.02+release.22ef835b4a2 22ef835b4a2647af94fcd6421a85720f07eddf12 http://www.pyrosetta.org 2020-01-05T17:31:56\n", "\u001b[0mcore.init: \u001b[0mcommand: PyRosetta -ex1 -ex2aro -mp:lipids:has_pore false -database /Users/ralford/Applications/env/lib/python3.7/site-packages/pyrosetta-2020.2+release.22ef835b4a2-py3.7-macosx-10.14-x86_64.egg/pyrosetta/database\n", "\u001b[0mbasic.random.init_random_generator: \u001b[0m'RNG device' seed mode, using '/dev/urandom', seed=1900191457 seed_offset=0 real_seed=1900191457\n", "\u001b[0mbasic.random.init_random_generator: \u001b[0mRandomGenerator:init: Normal mode, seed=1900191457 RG_type=mt19937\n" ] } ], "source": [ "from pyrosetta import *\n", "init( extra_options=\"-mp:lipids:has_pore false\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make sure you are in the right directory for accessing the `.pdb` files:\n", "\n", "`cd google_drive/MyDrive/student-notebooks/`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#cd google_drive/MyDrive/student-notebooks/" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.chemical.GlobalResidueTypeSet: \u001b[0mFinished initializing fa_standard residue type set. Created 980 residue types\n", "\u001b[0mcore.chemical.GlobalResidueTypeSet: \u001b[0mTotal time to initialize 1.42549 seconds.\n", "\u001b[0mcore.import_pose.import_pose: \u001b[0mFile 'inputs/3gp6_A.pdb' automatically determined to be of type PDB\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m PDB reader is ignoring atom CD in residue 12 A. Pass flag -ignore_zero_occupancy false to change this behavior\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m PDB reader is ignoring atom OE1 in residue 12 A. Pass flag -ignore_zero_occupancy false to change this behavior\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m PDB reader is ignoring atom OE2 in residue 12 A. Pass flag -ignore_zero_occupancy false to change this behavior\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue GLU 5\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD on residue GLU 5\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OE1 on residue GLU 5\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OE2 on residue GLU 5\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD on residue GLU 12\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OE1 on residue GLU 12\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OE2 on residue GLU 12\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue ARG 36\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD on residue ARG 36\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: NE on residue ARG 36\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CZ on residue ARG 36\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: NH1 on residue ARG 36\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: NH2 on residue ARG 36\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue PHE 37\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD1 on residue PHE 37\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD2 on residue PHE 37\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CE1 on residue PHE 37\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CE2 on residue PHE 37\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CZ on residue PHE 37\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD1 on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD2 on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CE1 on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CE2 on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CZ on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OH on residue TYR 39\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue ASN 40\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OD1 on residue ASN 40\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: ND2 on residue ASN 40\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OG1 on residue THR 139\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG2 on residue THR 139\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD1 on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CD2 on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CE1 on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CE2 on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CZ on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OH on residue TYR 140\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: CG on residue ASN 141\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: OD1 on residue ASN 141\n", "\u001b[0mcore.conformation.Conformation: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom: ND2 on residue ASN 141\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 5 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 12 because of missing atom number 7 atom name CD\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 36 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 37 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 39 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 40 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 139 because of missing atom number 6 atom name OG1\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 140 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.pack_missing_sidechains: \u001b[0mpacking residue number 141 because of missing atom number 6 atom name CG\n", "\u001b[0mcore.pack.task: \u001b[0mPacker task: initialize from command line()\n", "\u001b[0mcore.scoring.ScoreFunctionFactory: \u001b[0mSCOREFUNCTION: \u001b[32mref2015\u001b[0m\n", "\u001b[0mcore.scoring.etable: \u001b[0mStarting energy table calculation\n", "\u001b[0mcore.scoring.etable: \u001b[0msmooth_etable: changing atr/rep split to bottom of energy well\n", "\u001b[0mcore.scoring.etable: \u001b[0msmooth_etable: spline smoothing lj etables (maxdis = 6)\n", "\u001b[0mcore.scoring.etable: \u001b[0msmooth_etable: spline smoothing solvation etables (max_dis = 6)\n", "\u001b[0mcore.scoring.etable: \u001b[0mFinished calculating energy tables.\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/HBPoly1D.csv\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/HBFadeIntervals.csv\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/HBEval.csv\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/DonStrength.csv\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/AccStrength.csv\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/rama/fd/all.ramaProb\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/rama/fd/prepro.ramaProb\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.all.txt\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.gly.txt\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.pro.txt\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.valile.txt\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/P_AA_pp/P_AA\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/P_AA_pp/P_AA_n\n", "\u001b[0mcore.scoring.P_AA: \u001b[0mshapovalov_lib::shap_p_aa_pp_smooth_level of 1( aka low_smooth ) got activated.\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/P_AA_pp/shapovalov/10deg/kappa131/a20.prop\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: scoring/score_functions/elec_cp_reps.dat\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.scoring.elec.util: \u001b[0mRead 40 countpair representative atoms\n", "\u001b[0mcore.pack.dunbrack.RotamerLibrary: \u001b[0mshapovalov_lib_fixes_enable option is true.\n", "\u001b[0mcore.pack.dunbrack.RotamerLibrary: \u001b[0mshapovalov_lib::shap_dun10_smooth_level of 1( aka lowest_smooth ) got activated.\n", "\u001b[0mcore.pack.dunbrack.RotamerLibrary: \u001b[0mBinary rotamer library selected: /Users/ralford/Applications/env/lib/python3.7/site-packages/pyrosetta-2020.2+release.22ef835b4a2-py3.7-macosx-10.14-x86_64.egg/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin\n", "\u001b[0mcore.pack.dunbrack.RotamerLibrary: \u001b[0mUsing Dunbrack library binary file '/Users/ralford/Applications/env/lib/python3.7/site-packages/pyrosetta-2020.2+release.22ef835b4a2-py3.7-macosx-10.14-x86_64.egg/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin'.\n", "\u001b[0mcore.pack.dunbrack.RotamerLibrary: \u001b[0mDunbrack 2010 library took 0.408346 seconds to load from binary\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 115 rotamers at 9 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n" ] } ], "source": [ "pose = pose_from_pdb( \"inputs/3gp6_A.pdb\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, initialize the protein in the membrane using `AddMembraneMover.` Here, the protein is already oriented in the bilayer so we can estimate the transmembrane spans from the structure and orientation. Thus, we use the `from_structure` option to initialize the spanning topology. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0m=====================================================================\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0m|| WELCOME TO THE WORLD OF MEMBRANE PROTEINS... ||\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0m=====================================================================\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mNo membrane residue was found\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mAdding a new membrane residue to the pose\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mAdding a membrane residue representing the position of the membrane after residue 155\n", "\u001b[0mcore.chemical.GlobalResidueTypeSet: \u001b[0mLoading (but possibly not actually using) 'MEM' from the PDB components dictionary for residue type 'pdb_MEM'\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0m Edge \t Jump Jump #\n", " \t0156--0001 001\n", "0001--0155\n", "\u001b[0mprotocols.DsspMover: \u001b[0mLLHHHHHHHHHHHHHHHHHLLLEEEEEEEEEEEELLLLLLLLLLEEEEEEEEELLLLLEEEEEEEEEELLLLLEEEEEEEEEEEEELLLLLLLEEEEEEEEEEEEELHHHLLLEEEEEEEEEEEEELLEEEEEEEELLLLLLLLEEEEEEEEEELL\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mFilling membrane spanning topology from structure with thickness 15\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mcreate topology from structure\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 3\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 3\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 6\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 7\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 10\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 11\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 13\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 14\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 17\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 18\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 23\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 33\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 0, end: 33\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 23 to 33\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 45\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 53\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 33, end: 53\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 45 to 53\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 59\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 68\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 53, end: 68\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 59 to 68\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 74\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 86\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 68, end: 86\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 74 to 86\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 94\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 106\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 86, end: 106\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 94 to 106\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 108\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 108\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 110\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 110\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 114\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 126\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 106, end: 126\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 114 to 126\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 129\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 136\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 126, end: 136\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 129 to 136\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan start at 145\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTMspan end at 154\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mprev_end: 136, end: 154\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mAdding TMspan from 145 to 154\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTotal # of TM spans: 8\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mNumber of residues in spanfile: 243\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 1: start: 23, end: 33 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 2: start: 45, end: 53 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 3: start: 59, end: 68 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 4: start: 74, end: 86 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 5: start: 94, end: 106 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 6: start: 114, end: 126 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 7: start: 129, end: 136 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 8: start: 145, end: 154 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTotal # of TM spans: 8\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mNumber of residues in spanfile: 243\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 1: start: 23, end: 33 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 2: start: 45, end: 53 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 3: start: 59, end: 68 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 4: start: 74, end: 86 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 5: start: 94, end: 106 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 6: start: 114, end: 126 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 7: start: 129, end: 136 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 8: start: 145, end: 154 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mWATCH OUT: Writing spanfile out.span!\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mwrote out.span\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: membrane/implicit_lipid_parameters.txt\n", "\u001b[0mprotocols.membrane.SetMembranePositionMover: \u001b[0mCalling SetMembranePositionMover\n", "\u001b[0mprotocols.membrane.SetMembranePositionMover: \u001b[0mStarting foldtree: Is membrane fixed? 1\n", "\u001b[0mprotocols.membrane.SetMembranePositionMover: \u001b[0m Edge \t Jump Jump #\n", " \t0156--0001 001\n", "0001--0155\n", "\u001b[0mprotocols.membrane.SetMembranePositionMover: \u001b[0mFinal foldtree: Is membrane fixed? 1\n", "\u001b[0mprotocols.membrane.SetMembranePositionMover: \u001b[0m Edge \t Jump Jump #\n", " \t0156--0001 001\n", "0001--0155\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mFinal foldtree: Is membrane fixed? 1\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0m Edge \t Jump Jump #\n", " \t0156--0001 001\n", "0001--0155\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mMembraneInfo: Information about this Membrane Protein\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mMembrane Residue Num: 156\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mMembrane Fold Tree Jump: 1\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mMembrane Thickness: 15\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mMembrane Steepness: 10\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mMembrane Spanning Topology\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mTotal # of TM spans: 8\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mNumber of residues in spanfile: 243\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 1: start: 23, end: 33 orientation: 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 2: start: 45, end: 53 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 3: start: 59, end: 68 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 4: start: 74, end: 86 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 5: start: 94, end: 106 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 6: start: 114, end: 126 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 7: start: 129, end: 136 orientation: 1\n", "\u001b[0mcore.conformation.membrane.SpanningTopology: \u001b[0mSpan 8: start: 145, end: 154 orientation: 1\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mImplicit Lipid Information\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mInformation about the Lipid Composition:\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mWater thickness: 15.351\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mChange in water density: 0.343\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mTransformed water thickness: 199.57\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mLipid chain type: 12:0/12:0\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mLipid headgroup type: PC\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mLipid composition name (short-form): DLPC\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mLipid composition name (long-form): 1,2-dilauroyl-sn-glycero-3-phosphocholine\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mDegrees of saturation: 0\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mTemperature (celcius): 37\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mAre we accommodating the pore?: no\n", "\u001b[0mprotocols.membrane.AddMembraneMover: \u001b[0mIs this an alpha helical protein?: yes\n" ] } ], "source": [ "from pyrosetta.rosetta.protocols.membrane import *\n", "add_memb = AddMembraneMover(\"from_structure\")\n", "add_memb.apply(pose)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ∆∆G of mutation calculations\n", "\n", "Next, we will compute the ∆∆G for several point mutations in PagP. In the Marx & Fleming experiment, position V111 was first mutated to alanine. Therefore, we will create this variant first. We will use the `mutate_residue` function from the `predict_ddG` PyRosetta module included in this package. In this tutorial, we will use a repack radius of 8.0 Å. \n", "\n", "An important note - Pyrosetta residue numbering may differ from the PDB numbering because PyRosetta requires continuous numbering for calculations. Here, the PyRosetta residue number for V111 is 104. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mprotocols.membrane.scoring.FaWaterToBilayerEnergy: \u001b[0mReading fa_water_to_bilayer parameters from the database\n", "\u001b[0mbasic.io.database: \u001b[0mDatabase file opened: membrane/memb_fa_params_2019.txt\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n" ] } ], "source": [ "from additional_scripts import predict_ddG\n", "# Create a franklin2019 energy function\n", "sfxn = create_score_function(\"franklin2019\")\n", "# Repack and score the native conformation\n", "reference_pose = predict_ddG.mutate_residue(pose, 104, \"A\", 8.0, sfxn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To demonstrate the ΔΔG calculation, we will now compute the energetic cost\n", "of mutating alanine to tryptophan." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 54 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "-1.6647217086966464\n" ] } ], "source": [ "# Score the alanine reference pose\n", "score_A111 = sfxn.score(reference_pose)\n", "# Repack and score the L111 conformation\n", "pose_W111 = predict_ddG.mutate_residue(pose, 104, \"W\", 8.0, sfxn)\n", "score_W111 = sfxn.score(pose_W111)\n", "# Compute the ddG of mutation as mutant_score - native_score (final-initial\n", "ddG = score_W111 - score_A111\n", "print(ddG)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ΔΔG for mutating alanine to tryptophan at position 111 is -1.84 Rosetta Energy Units (REU). A\n", "Rosetta Energy Unit is an arbitrary unit for the Rosetta energy function. Next, we would like to\n", "compute the ΔΔG for mutating alanine to all 19 canonical amino acids. To do so, we will generalize\n", "the code above into a function for easy calculations of multiple single point mutations." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def compute_ddG(pose, native_res, site_no, mutant_res, sfxn): \n", " \"\"\"A function for computing the ddG of single point mutations\n", " \n", " Example: \n", " $ compute_ddG(pose, \"V\", 49, \"A\", sfxn)\n", " \n", " Arguments: \n", " - pose = Object containing the coordinates for the biomolecular system\n", " - native_res = Native amino acid\n", " - site_no = Host site amino acid position\n", " - mutant_res = Mutant amino acid\n", " = sfxn = Score function object\n", " \"\"\"\n", " \n", " repacked_native = predict_ddG.mutate_residue(pose, site_no, native_res, 8.0, sfxn)\n", " native_score = sfxn.score(repacked_native)\n", " repacked_mutant = predict_ddG.mutate_residue(pose, site_no, mutant_res, 8.0, sfxn)\n", " mutant_score = sfxn.score(repacked_mutant)\n", " ddG = mutant_score - native_score\n", " return ddG" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we will write a loop that computes the ΔΔG for all canonical amino acids and store the results\n", "in a python dictionary." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 58 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 59 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 65 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 52 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 61 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 53 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 71 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 52 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 61 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 63 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 75 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 77 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 103 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 103 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 52 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 54 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 50 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 53 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n" ] } ], "source": [ "# List of canonical amino acid one-letter codes\n", "amino_acids = [ 'A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y' ]\n", "# Initialize an empty dictionary to store the data\n", "ddG_data = {}\n", "# Loop through all amino acids\n", "for aa in amino_acids:\n", " ddG = compute_ddG(reference_pose, 'A', 104, aa, sfxn)\n", " ddG_data[ aa ] = ddG" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next step is to compare the ΔΔG predictions to the experimentally measured values. The experimental data for Marx & Fleming are located in `inputs` in a file called `PagP_Marx_Fleming_set.dat`. We will parse the file and then import these values into a |dictionary." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Read contents of file into a list (file format is space delimited)\n", "with open( 'inputs/PagP_Marx_Fleming_set.dat', 'rt' ) as f:\n", " data = f.readlines()\n", " data = [ x.strip() for x in data ]\n", " data = [ x.split(' ') for x in data ]\n", "\n", "# Convert the list into a dictionary\n", "exp_ddG_data = {}\n", "for i in range(1, len(data)):\n", " exp_ddG_data[ data[i][2] ] = float(data[i][3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now convert the dictionary format to numpy arrays that are compatible with analysis. Here, we\n", "will compute the correlation coefficient and make a scatterplot of the experimentally measured vs.\n", "predicted values." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.3590768320982386\n" ] } ], "source": [ "import numpy as np\n", "mutations = np.asarray( ddG_data.keys() )\n", "ddG_values = np.asarray( list(ddG_data.values()) )\n", "exp_values = np.asarray( list(exp_ddG_data.values()) )\n", "\n", "# Compute the correlation coefficient\n", "corr = np.corrcoef( exp_values, ddG_values )\n", "print(corr[0,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We initially find that the correlation coefficient is low (0.376). We will want to find any outliers in the dataset that are lowering this value." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "167.71057239138239\n" ] } ], "source": [ "def find_outliers(x):\n", " upper_quartile = np.percentile(x, 75)\n", " lower_quartile = np.percentile(x, 25)\n", " IQR = (upper_quartile - lower_quartile)\n", " quartile_set = (lower_quartile - IQR, upper_quartile + IQR)\n", " for y in x.tolist():\n", " if (y < quartile_set[0]) or (y > quartile_set[1]):\n", " print(y)\n", "find_outliers(ddG_values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, the ΔΔG value for proline is an outlier. We will investigate this more later. For now, we will remove it from the set and then recompute the correlation coefficient." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.6720890940120559\n" ] } ], "source": [ "# Proline is the 13th, amino acid of 20\n", "exp_data_no_P = []\n", "pred_data_no_P = []\n", "for i in range(0, 20):\n", " if ( i != 12 ):\n", " exp_data_no_P.append( list(exp_ddG_data.values())[i] )\n", " pred_data_no_P.append( list(ddG_data.values())[i] )\n", "\n", "exp_data_no_P = np.asarray( exp_data_no_P )\n", "pred_data_no_P = np.asarray( pred_data_no_P )\n", "corr = np.corrcoef( exp_data_no_P, pred_data_no_P )\n", "print(corr[0,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The new value of R = 0.692 is much more encouraging! Next, we will visualized the predicted vs. experimentally measured values with a scatterplot." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.axhline(y=0, color='k', linestyle='-')\n", "plt.axvline(x=0, color='k', linestyle=\"-\")\n", "plt.ylim([-6,6])\n", "plt.xlim([-6,6])\n", "\n", "# compute the best fit line\n", "from numpy.polynomial.polynomial import polyfit\n", "b, m = polyfit(exp_data_no_P, pred_data_no_P, 1)\n", "x = np.linspace(-6, 6, num=50)\n", "plt.plot(x, b + m * x, color='r', linestyle='-')\n", "\n", "# plot the data\n", "plt.scatter(exp_data_no_P, pred_data_no_P)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we would like to use the models to learn why some mutations stabilized PagP, whereas other side chains did not. Of course, we need a metric for identifying the most confident predictions, especially since the correlation coefficient is not perfect. To do so, we will compute the residuals from the line of best fit and set an empirical cutoff of 1.5 REU." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. -0.72 2.49 1.18 -2.44 1.64 3.32 -2.17 3.54 -2.01 -1.15 2.95\n", " 2.54 3.22 1.83 0.95 -1.75 -2.21 -1.02]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "sns.set(style=\"whitegrid\")\n", "resid = sns.residplot(x=exp_data_no_P, y=pred_data_no_P, color=\"b\")\n", "resid.set_ylabel(\"Residual\")\n", "resid.set_xlabel(\"Exp (kcal/mol)\")\n", "print(exp_data_no_P)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we find five ∆∆G values that are predicted outside of the cutoff: Glycine, Leucine, Valine, Tryptophan, and Threonine. Next, we will use this information to hypothesize a mechanism for a reasonable prediction (lysine) and rationalize incorrect predictions for proline and leucine. The first step is to quantify which energy components make the largest contribution to the overall ∆∆G of mutation. To do so, we will write a function that can extrapolate this information from the energy function. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 53 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 71 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 52 rotamers at 11 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating PDInteractionGraph\n" ] } ], "source": [ "# Store models of mutated PagP proteins\n", "mutant_tyr = predict_ddG.mutate_residue(pose, 104, \"Y\", 8.0, sfxn)\n", "mutant_lys = predict_ddG.mutate_residue(pose, 104, \"K\", 8.0, sfxn)\n", "mutant_leu = predict_ddG.mutate_residue(pose, 104, \"L\", 8.0, sfxn)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['fa_atr', 'fa_rep', 'fa_sol', 'fa_intra_rep', 'fa_intra_sol_xover4', 'lk_ball_wtd', 'fa_elec', 'pro_close', 'hbond_sr_bb', 'hbond_lr_bb', 'hbond_bb_sc', 'hbond_sc', 'dslf_fa13', 'omega', 'fa_dun', 'p_aa_pp', 'yhh_planarity', 'ref', 'fa_water_to_bilayer', 'rama_prepro']\n" ] } ], "source": [ "def get_energy_components( native_pose, mutated_pose, sfxn): \n", "\n", " # Extract & parse scores\n", " tmp_native = native_pose.energies().total_energies().weighted_string_of( sfxn.weights() )\n", " tmp_mutant = mutated_pose.energies().total_energies().weighted_string_of( sfxn.weights() )\n", " array_native = list(filter( None, tmp_native.split(' ') ))\n", " array_mutant = list(filter( None, tmp_mutant.split(' ') ))\n", "\n", " # Pull out only the scores from these arrays\n", " native_scores = []\n", " for i in range( len(array_native) ): \n", " if ( i % 2 != 0 ): \n", " native_scores.append( float( array_native[i] ) )\n", "\n", " mutant_scores = []\n", " for i in range( len(array_mutant) ): \n", " if ( i % 2 != 0 ): \n", " mutant_scores.append( float( array_mutant[i] ) )\n", "\n", " # Calculate ddG of individual components\n", " ddGs = []\n", " for i in range( len( mutant_scores ) ): \n", " ddG_component = mutant_scores[i] - native_scores[i]\n", " ddGs.append( round( ddG_component, 3 ) )\n", "\n", " # Get labels\n", " labels = []\n", " for i in range( len(array_native) ): \n", " if ( i % 2 == 0 ): \n", " labels.append( array_native[i].translate(':').strip(\":\") )\n", "\n", " return labels, ddGs\n", "\n", "# Compute the ddG breakdown\n", "labels, tyr_ddGs = get_energy_components( reference_pose, mutant_tyr, sfxn )\n", "labels, lys_ddGs = get_energy_components( reference_pose, mutant_lys, sfxn )\n", "labels, leu_ddGs = get_energy_components( reference_pose, mutant_leu, sfxn )\n", "print(labels)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we will make a bar graph to visualize the contributions of each energy component for the ddG of these three single point mutations." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.arange(len(labels)) \n", "width = 1 # the width of the bars\n", "\n", "# Plot for tyrosine\n", "fig, ax = plt.subplots()\n", "rects1 = ax.bar(x, tyr_ddGs, width, label='Y')\n", "ax.set_ylabel('∆∆G (REU)')\n", "ax.set_title('Contributions to the ∆∆G of Mutation for A104Y')\n", "ax.set_xticks(x)\n", "ax.set_xticklabels(labels, rotation='vertical')\n", "ax.legend()\n", "fig.tight_layout()\n", "\n", "# Plot for lysine\n", "fig, ax = plt.subplots()\n", "rects2 = ax.bar(x, lys_ddGs, width, label='K')\n", "ax.set_ylabel('∆∆G (REU)')\n", "ax.set_title('Contributions to the ∆∆G of Mutation for A104K')\n", "ax.set_xticks(x)\n", "ax.set_xticklabels(labels, rotation='vertical')\n", "ax.legend()\n", "fig.tight_layout()\n", "\n", "# Plot for lysine\n", "fig, ax = plt.subplots()\n", "rects3 = ax.bar(x, leu_ddGs, width, label='L' )\n", "ax.set_ylabel('∆∆G (REU)')\n", "ax.set_title('Contributions to the ∆∆G of Mutation for A104L')\n", "ax.set_xticks(x)\n", "ax.set_xticklabels(labels, rotation='vertical')\n", "ax.legend()\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we will export the model files so that we can visualize them in PyMOL. " ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reference_pose.dump_pdb( \"PagP_ala_ref.pdb\" )\n", "mutant_tyr.dump_pdb( \"PagP_A104Y.pdb\" )\n", "mutant_lys.dump_pdb( \"PagP_A104K.pdb\" )\n", "mutant_leu.dump_pdb( \"PagP_A104L.pdb\" )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### TODO List\n", " - make notes about lipid composiiton above\n", " - view in pymol\n", " - hypothesize mechanisms\n", " - add notes about what to do without experimental information\n", " - break into sections as prescribed above" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Setting up a membrane protein in the bilayer](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/15.01-Accounting-for-the-lipid-bilayer.ipynb) | [Contents](toc.ipynb) | [Index](index.ipynb) | [Running Rosetta in Parallel](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/16.00-Running-PyRosetta-in-Parallel.ipynb) >

\"Open" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.0" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "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 } }, "nbformat": 4, "nbformat_minor": 4 }