{ "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", "< [Protein Design 2](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/06.04-Protein-Design-2.ipynb) | [Contents](toc.ipynb) | [Index](index.ipynb) | [*De Novo* Parametric Backbone Design](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/06.06-Introduction-to-Parametric-backbone-design.ipynb) >

\"Open" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# HBNet Before Design\n", "\n", "Keywords: HBNet, OperateOnResidueSubset, getPoseExtraScore, InterGroupInterfaceByVectorSelector, ChainSelector, PreventRepackingRLT, RestrictToRepackingRLT, OperateOnResidueSubset, ResiduePDBInfoHasLabelSelector, PackRotamersMover" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sometimes in Rosetta we want to run implicit multistage design. That is, we want to optimize one conformation while implicitly modeling another (either negatively or positively). There are many ways to accomplish this depending on your interests. In this section we will look at HBNet, a tool for explicitly designing hydrogen bond networks.\n", "\n", "One negative-design approach is to implicitly model binding specificity. Designing a complicated network of hydrogen bonds at one interface will implicitly destabilize other interfaces. Hydrogen bonds are so sensitive to geometry that competing interfaces are unlikely to be able to \"satisfy\" the network well enough to remain competetive.\n", "\n", "The previous example can also be viewed through the implicit positive-design lens as well. We often find that Rosetta designs very hydrophobic interfaces (especially with newer score functions). Running HBNet before the traditional design protocols can boost the polar residue concentration of your interface in exchange for a small cost packing quality. In other words, we can implicitly stabilize the unbound state by running HBNet, but it might mildly destabilize the bound state.\n", "\n", "Our experience shows that it is useful to run both with and without HBNet, depending on your design case. It is possible that the default design protocol handles your implicits states well enough. When that fails, though, there is not much to do to fix it other than to run pre-design protocols like HBNet. An added benefit of HBNet is that it can provide \"seeds\" for packing, which can influence design diversity if nothing else." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "!pip install pyrosettacolabsetup\n", "import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()\n", "import pyrosetta; pyrosetta.init()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Make sure you are in the directory with the pdb files:**\n", "\n", "`cd google_drive/MyDrive/student-notebooks/`" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PyRosetta-4 2019 [Rosetta PyRosetta4.Release.python36.mac 2019.31+release.9a323bc72ca18d3abdc8b1a730b37e52197e4ceb 2019-07-29T16:16:04] retrieved from: http://www.pyrosetta.org\n", "(C) Copyright Rosetta Commons Member Institutions. Created in JHU by Sergey Lyskov and PyRosetta Team.\n", "init complete\n" ] } ], "source": [ "# From previous section:\n", "from pyrosetta import *\n", "from pyrosetta.teaching import *\n", "pyrosetta.init(\"-mute core -mute basic\")\n", "print( \"init complete\" )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We prepare for HBNet the same way that we prepare for packing. We setup the pose and score function as before..." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-c34d0bd1a81b4a7d", "locked": false, "points": 0, "schema_version": 3, "solution": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "setup complete\n" ] } ], "source": [ "pose = pose_from_pdb(\"inputs/hbnet_example.pdb\")\n", "start_pose = Pose()\n", "start_pose.assign(pose)\n", "scorefxn = get_fa_scorefxn()\n", "print( \"setup complete\" )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just like before, you can edit the resfile to your own personal specifications. Alternatively, you can use task operations to automate the process. Let's use task operations to fix all residues not at the interface." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting Designable Residues:\n", "\n", "Create a new task for design\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-1754b479780ad2e4", "locked": false, "points": 0, "schema_version": 3, "solution": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Num residues: 454\n", "Num packable residues: 116\n", "Num designable residues: 53\n" ] } ], "source": [ "from pyrosetta.rosetta.core.select.residue_selector import InterGroupInterfaceByVectorSelector, ChainSelector, NotResidueSelector\n", "\n", "chain1 = ChainSelector( \"1\" ) #selects the first chain\n", "chain2 = ChainSelector( \"2\" ) #selects the second chain\n", "\n", "interface_selector = InterGroupInterfaceByVectorSelector( chain1, chain2 );#selects residues at the interface\n", "not_interface_selector = NotResidueSelector( interface_selector ); #selects residues not at the interface\n", "\n", "from pyrosetta.rosetta.core.pack.task.operation import PreventRepackingRLT, RestrictToRepackingRLT, OperateOnResidueSubset\n", "\n", "#prevent non interface residues from repacking/designing\n", "fix_non_interface = OperateOnResidueSubset( PreventRepackingRLT(), not_interface_selector )\n", "\n", "#perhaps we are performing one-sided design and do not want to make mutations on chain 2:\n", "no_mutation_chain2 = OperateOnResidueSubset( RestrictToRepackingRLT(), chain2 )\n", "\n", "from pyrosetta.rosetta.core.pack.task import TaskFactory\n", "task_factory = TaskFactory()\n", "task_factory.push_back( fix_non_interface )\n", "task_factory.push_back( no_mutation_chain2 )\n", "\n", "task_design = task_factory.create_task_and_apply_taskoperations( pose )\n", "print( \"Num residues: \", pose.size() )\n", "print( \"Num packable residues: \", task_design.num_to_be_packed() ) # this includes the ones being designed\n", "\n", "num_designable = 0\n", "for i in range( 1, pose.size() + 1 ):\n", " if( task_design.design_residue( i ) ):\n", " num_designable += 1;\n", "print( \"Num designable residues: \", num_designable )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running HBNet\n", "\n", "This is an interface case so we will use HBNetStapleInterface. We will use both the code-level interface, and the XML interface as an introduction to this functionality. The XML interface to PyRosetta will be covered more in later workshops. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-9e50dd452de9681a", "locked": false, "points": 0, "schema_version": 3, "solution": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0mGenerating XML Schema for rosetta_scripts...\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0m...done\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0mInitializing schema validator...\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0m...done\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0mValidating input script...\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0m...done\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0mParsed script:\n", "\n", "\t\n", "\t\t\n", "\t\n", "\t\n", "\n", "\u001b[0mprotocols.rosetta_scripts.RosettaScriptsParser: \u001b[0mDefined mover named \"hbnet\" of type HBNetStapleInterface\n", "\u001b[0mprotocols.rosetta_scripts.ParsedProtocol: \u001b[0mParsedProtocol mover with the following movers and filters\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m Creating packer task based on specified task operations...\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m Creating packer task based on specified task operations...\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m built 9732 rotamers at 84 positions.\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m IG: 1534084 bytes\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m ==================================================================\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m ============ PERFORMING H-BOND NETWORK DESIGN ============\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m ==================================================================\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0mstarting monte carlo branching protocol\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t10% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t20% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t30% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t40% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t50% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t60% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t70% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t80% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t90% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t100% done with branching\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0mMonte carlo branching protocol found 196 networks.\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m NUMBER OF H-BOND NETWORKS AFTER BRANCH: 134\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m NUMBER OF NETWORKS AFTER REMOVE REPLICATES = 131\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m NUMBER OF NETWORKS AFTER SELECTION = 10\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m NUMBER OF NETWORKS AFTER REMOVE_REP = 10\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m Designed these new networks that meet your criteria:\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#HBNet_rank \t residues \t size \t score \t num_hbonds \t percent_hbond_capacity \t num_unsat_Hpol \tinterf_hbs\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_1\tD_Y_155,D_R_180,D_E_185,D_R_187,E_R_207,backbone\t5\t-0.650077\t8\t0.714286\t0\t3\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_2\tD_Y_155,D_E_185,D_R_187,E_R_207,backbone\t4\t-1.07079\t6\t0.6875\t0\t3\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_3\tD_S_154,D_S_189,E_R_207\t3\t2.18313\t4\t0.666667\t0\t2\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_4\tD_Y_155,D_R_180,D_E_185,E_R_207\t4\t-0.93091\t5\t0.625\t0\t3\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_5\tD_Y_33,D_R_40,D_H_50,D_E_116,E_R_107\t5\t1.32341\t6\t0.611111\t0\t1\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_6\tD_Y_33,D_R_40,D_Q_44,D_H_50,D_E_116,E_R_107\t6\t0.893853\t7\t0.590909\t0\t1\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_7\tD_Y_33,D_R_40,D_Q_44,D_H_50,D_E_116,E_Q_44,E_R_107\t7\t0.71998\t8\t0.576923\t0\t2\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_8\tD_Y_33,D_R_40,D_E_116,E_R_107\t4\t1.33101\t5\t0.5625\t0\t1\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_9\tD_H_116,E_S_40,E_R_107\t3\t2.49845\t3\t0.555556\t0\t1\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\t#network_10\tD_Y_155,D_E_185,E_R_207\t3\t-0.259134\t3\t0.545455\t0\t3\n", "\u001b[0mprotocols.evaluation.ChiWellRmsdEvaluatorCreator: \u001b[0mEvaluation Creator active ...\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\n", "Change in score 1209.2788032525623\n" ] } ], "source": [ "from pyrosetta.rosetta.protocols.hbnet import HBNetStapleInterface\n", "\n", "#This is similar to the clone operation, \n", "# but instead of copying the original pose, we copy the dtat of start pose INTO the pose\n", "\n", "pose.assign(start_pose)\n", "\n", "# There are two ways to setup a mover:\n", "# (1) by creating a blank instance of that mover and individually setting any non-default features\n", "# (2) by passing an XML string, similar to rosetta_scripts\n", "# We will be using option 2 because it provides a more consistent interface to the movers\n", "# Plus, the store_network_scores_in_pose feature is only available using option 2 for versions of PyRosetta older than September-ish 2019\n", "setup_using_string = True #Option 2\n", "\n", "if setup_using_string:\n", " hbnet = pyrosetta.rosetta.protocols.rosetta_scripts.XmlObjects.create_from_string(\"\"\"\n", " \n", " \n", " \n", " \"\"\").get_mover(\"hbnet\")\n", "\n", " #monte_carlo=\"true\" is highly recommended, especially for large systems like asymmetric interfaces\n", " #see PMID: 29652499\n", "else:\n", " hbnet = HBNetStapleInterface()\n", "\n", " #This is highly recommended, especially for large systems like asymmetric interfaces\n", " #see PMID: 29652499\n", " hbnet.set_monte_carlo_branch( True )\n", "\n", " #set_monte_carlo_seed_must_be_buried does two things:\n", " #(1) speeds us up by decreasing the sample space\n", " #(2) ensures that our final hbond network will be at least partially buried\n", " #hbnet.set_monte_carlo_seed_must_be_buried( True )\n", " #commenting this out just to give us more results\n", "\n", "#You can toggle the verbosity here if you are interested\n", "#hbnet.verbose( True )\n", "\n", "#We can normallly leave this as the default\n", "#making it smaller now to let it run faster\n", "hbnet.set_total_num_mc_runs( 1000 )\n", "#Could have been done with\n", "#\n", "\n", "hbnet.task_factory( task_factory )\n", "#alternatively:\n", "#hbnet.set_task( task_design )\n", "\n", "hbnet.set_score_function( scorefxn )\n", "hbnet.apply(pose)\n", "\n", "print( \"Change in score\", scorefxn(pose) - scorefxn(start_pose) )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wait, my score is terrible.\n", "\n", "__Question:__ Why?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Finishing Design:\n", "\n", "Well of course the score is terrible, the pose is dense with clashes. We had 116 packable residues and only assigned states to 5 of them. The other 111 residues are still in their input conformations and likely clash with the 5 we just assigned." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to run the packer (either using PackRotamersMover or FastDesign) but we don't want to overwrite the residues we just assigned with HBNet. The trick here is to select the residues with \"HBNet\" labels and fix them." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-ecdd3a3881511698", "locked": false, "points": 0, "schema_version": 3, "solution": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Num HBNet Residues 5\n", "Change in score 158.01310006922307\n" ] } ], "source": [ "from pyrosetta.rosetta.core.select.residue_selector import ResiduePDBInfoHasLabelSelector\n", "\n", "#prevent hbnet residues from repacking/designing\n", "hbnet_selector = ResiduePDBInfoHasLabelSelector( \"HBNet\" )\n", "fix_hbnet = OperateOnResidueSubset( PreventRepackingRLT(), hbnet_selector )\n", "task_factory.push_back( fix_hbnet ) #recycling the same factory as before, just adding a new operation\n", "task_design2 = task_factory.create_task_and_apply_taskoperations( pose )\n", "\n", "#sanity check\n", "num_hbnet_residues = 0\n", "for x in hbnet_selector.apply( pose ):\n", " if x:\n", " num_hbnet_residues += 1\n", "print( \"Num HBNet Residues\", num_hbnet_residues )\n", "\n", "#this is unrelated to the narrative but I highly recommend using the linear memory interaction graph whenever performing design. It's a huge speedup\n", "#it does not seem to matter for the scope here, but it will when you start using extra chi sampling (-ex1, -ex2)\n", "task_design2.or_linmem_ig( True )\n", "\n", "from pyrosetta.rosetta.protocols.minimization_packing import PackRotamersMover\n", "pack_mover = PackRotamersMover( scorefxn, task_design2 )\n", "pack_mover.apply( pose )\n", "print( \"Change in score\", scorefxn(pose) - scorefxn(start_pose) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## We made it...?\n", "\n", "The change in score is a better, but still positive. One great thing about HBNet is that it can return multiple poses. Each one is slightly worse than the previous by HBNet's standards but might design into something better. Let's try a few to see if they help." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 12700 rotamers at 112 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating LinearMemoryInteractionGraph\n", "Change in score 208.0715304180745\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 12890 rotamers at 113 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating LinearMemoryInteractionGraph\n", "Change in score -60.13706595618231\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 12595 rotamers at 111 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating LinearMemoryInteractionGraph\n", "Change in score 62.89829311472579\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 11897 rotamers at 111 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating LinearMemoryInteractionGraph\n", "Change in score -45.536073668849326\n", "\u001b[0mprotocols.hbnet.HBNet: \u001b[0m\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 11684 rotamers at 110 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating LinearMemoryInteractionGraph\n", "Change in score -31.404979911851626\n" ] } ], "source": [ "#there were 10 (or so) networks total, but let's just try the next 5\n", "#this might take a few minutes...\n", "if not os.getenv('DEBUG'): #Adding this line to decrease runtime on the testing server\n", " for x in range(0,5):\n", " extra_pose = hbnet.get_additional_output()\n", " if extra_pose is None:\n", " break\n", " task_design3 = task_factory.create_task_and_apply_taskoperations( extra_pose )\n", " task_design3.or_linmem_ig( True )\n", " pack_mover = PackRotamersMover( scorefxn, task_design3 )\n", " pack_mover.apply( extra_pose )\n", " print( \"Change in score\", scorefxn(extra_pose) - scorefxn(start_pose) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## But wait, there's more??\n", "\n", "Great! We found a few results that designed to me more stable than the input pose (-60, -45, and -31 REU)!\n", "\n", "The main score function is not the only way to evaluate these networks. HBNet also adds its own score terms. These are useful for sorting/filtering decoys before running expensive packing calculations." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "HBNet_NumUnsatHpol 0.0\n", "HBNet_Saturation 0.7142857313156128\n", "HBNet_Score -0.6500769257545471\n" ] } ], "source": [ "from pyrosetta.rosetta.core.pose import hasPoseExtraScore, getPoseExtraScore\n", "\n", "if hasPoseExtraScore( pose, \"HBNet_NumUnsatHpol\" ):\n", " #All 3 of these metrics are explained in more detail in Maguire, Boyken, et al. (see second reference below)\n", "\n", " #NumUnsatHpol is HBNet's primary sorting metric, it counts the number of polar hydrogen atoms that are unsatisfied (buried and not forming hbonds). We know that there are no heavy (non-hydrogen) unsatisfied atoms because HBNet filters those out by default. Lower is better\n", " print( \"HBNet_NumUnsatHpol\", getPoseExtraScore( pose, \"HBNet_NumUnsatHpol\" ) )\n", "\n", " #HBNet's secondary sorting metric. 1.0 if every polar atom in the network is forming the maximum number of hbonds. Higher is better\n", " print( \"HBNet_Saturation\", getPoseExtraScore( pose, \"HBNet_Saturation\" ) )\n", "\n", " #HBNet's tertiary sorting metric. A little complicated but lower is better.\n", " print( \"HBNet_Score\", getPoseExtraScore( pose, \"HBNet_Score\" ) )\n", "else:\n", " print( \"Somebody go bug a developer to enable this feature for PyRosetta\" )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Advice for using this in the wild\n", "\n", "#### ex1 ex2\n", "\n", "HBonds are very sensitive to sidechain sampling resolution. I highly recommend using -ex1 and -ex2. You can do this by adding:\n", "```py\n", "ex1ex2 = ExtraRotamersGeneric()\n", "ex1ex2.ex1( True )\n", "ex1ex2.ex2( True )\n", "task_factory.push_back( ex1ex2 )\n", "```\n", "\n", "#### get_additional_output\n", "\n", "As we saw in the exercise, the first result out of HBNet does not always wind up being the best. Try designing with a few results from `hbnet.get_additional_output()` to get more coverage of the design space. For the commandline users reading this, this functionality can also be accessed via `multistage_rosetta_scripts` or the `MultiplePoseMover` in `rosetta_scripts`. See the `rosetta_scripts_scripts` repository for examples.\n", "\n", "#### set_monte_carlo_seed_must_be_buried\n", "\n", "I highly recommend playing with the `set_monte_carlo_seed_must_be_buried` mentioned above. Without it, HBNet tends to just design many surface networks that nobody really cares about." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Thought Question\n", "\n", "The energy of HBNet+Design is often less favorable that the energy after an equivalent design run without HBNet. Why do people still use HBNet?\n", "\n", "\n", "## References\n", "\n", "\n", "- Boyken SE, Chen Z, Groves B, et al. De novo design of protein homo-oligomers with modular hydrogen-bond network-mediated specificity. Science. 2016;352(6286):680–687. doi:10.1126/science.aad8865\n", "\n", "\n", "- Maguire JB, Boyken SE, Baker D, Kuhlman B. Rapid Sampling of Hydrogen Bond Networks for Computational Protein Design. J Chem Theory Comput. 2018;14(5):2751–2760. doi:10.1021/acs.jctc.8b00033" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Protein Design 2](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/06.04-Protein-Design-2.ipynb) | [Contents](toc.ipynb) | [Index](index.ipynb) | [*De Novo* Parametric Backbone Design](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/06.06-Introduction-to-Parametric-backbone-design.ipynb) >

\"Open" ] } ], "metadata": { "celltoolbar": "Create Assignment", "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": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "284.444px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }