Jupyter GMX Notebook Automatic Ligand Parameterization tutorial using Biobb
Help improve this workflow!
This workflow has been published but could be further improved with some additional meta data:- Keyword(s) in categories input, operation
You can help improve this workflow by suggesting the addition or removal of keywords, suggest changes and report issues, or request to become a maintainer of the Workflow .
This tutorial aims to illustrate the process of ligand parameterization for a small molecule , step by step, using the BioExcel Building Blocks library (biobb) . The particular example used is the Sulfasalazine protein (3-letter code SAS), used to treat rheumatoid arthritis, ulcerative colitis, and Crohn's disease.
OpenBabel and ACPype packages are used to add hydrogens, energetically minimize the structure , and generate parameters for the GROMACS package. With Generalized Amber Force Field (GAFF) forcefield and AM1-BCC charges.
Settings
Biobb modules used
-
biobb_io : Tools to fetch data to be consumed by the rest of the Biobb building blocks.
-
biobb_chemistry : Tools to manipulate chemical data.
Auxiliar libraries used
-
nb_conda_kernels : Enables a Jupyter Notebook or JupyterLab application in one conda environment to access kernels for Python, R, and other languages found in other environments.
-
jupyter_contrib_nbextensions : Contains a collection of community-contributed unofficial extensions that add functionality to the Jupyter notebook.
-
nglview : Jupyter/IPython widget to interactively view molecular structures and trajectories in notebooks.
-
ipywidgets : Interactive HTML widgets for Jupyter notebooks and the IPython kernel.
Conda Installation and Launch
git clone https://github.com/bioexcel/biobb_wf_ligand_parameterization.git
cd biobb_wf_ligand_parameterization
conda env create -f conda_env/environment.yml
conda activate biobb_ligand_parameterization_tutorial
jupyter nbextension enable python-markdown/main
jupyter-notebook biobb_wf_ligand_parameterization/notebooks/biobb_ligand_parameterization_tutorial.ipynb
Please execute the following commands before launching the Jupyter Notebook if you experience some issues with widgets such as NGL View (3D molecular visualization):
jupyter-nbextension enable --py --user widgetsnbextension
jupyter-nbextension enable --py --user nglview
Tutorial
Click here to view tutorial in Read the Docs
Version
2023.3
Copyright & Licensing
This software has been developed in the MMB group at the BSC & IRB for the European BioExcel , funded by the European Commission (EU H2020 823830 , EU H2020 675728 ).
-
(c) 2015-2023 Barcelona Supercomputing Center
-
(c) 2015-2023 Institute for Research in Biomedicine
Licensed under the Apache License 2.0 , see the file LICENSE for details.
Code Snippets
2 3 4 5 6 7 8 | import nglview import ipywidgets import os ligandCode = 'IBP' mol_charge = 0 pH = 7.4 |
12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # Ligand: Download ligand structure from MMB PDB mirror REST API (https://mmb.irbbarcelona.org/api/) # Import module from biobb_io.api.ligand import ligand # Create prop dict and inputs/outputs input_structure = ligandCode + '.pdb' prop = { 'ligand_code' : ligandCode } #Create and launch bb ligand(output_pdb_path=input_structure, properties=prop) |
29 30 31 32 33 34 | #Show small ligand structure view = nglview.show_structure_file(input_structure) view.add_representation(repr_type='ball+stick', selection='all') view._remote_call('setSize', target='Widget', args=['','300px']) view.camera='orthographic' view |
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | # Babel_add_hydrogens: add Hydrogen atoms to a small molecule # Import module from biobb_chemistry.babelm.babel_add_hydrogens import babel_add_hydrogens # Create prop dict and inputs/outputs output_babel_h = ligandCode + '.H.mol2' prop = { 'ph' : pH, 'input_format' : 'pdb', 'output_format' : 'mol2' } #Create and launch bb babel_add_hydrogens(input_path=input_structure, output_path=output_babel_h, properties=prop) |
58 59 60 61 62 | #Show small ligand structure view = nglview.show_structure_file(output_babel_h) view.add_representation(repr_type='ball+stick', selection='all') view.camera='orthographic' view |
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | # Babel_minimize: Structure energy minimization of a small molecule after being modified adding hydrogen atoms # Import module from biobb_chemistry.babelm.babel_minimize import babel_minimize # Create prop dict and inputs/outputs output_babel_min = ligandCode + '.H.min.pdb' prop = { 'method' : 'sd', 'criteria' : '1e-10', 'force_field' : 'GAFF' } #Create and launch bb babel_minimize(input_path=output_babel_h, output_path=output_babel_min, properties=prop) |
86 87 88 89 90 91 | #Show small ligand structure view = nglview.show_structure_file(output_babel_min) view.add_representation(repr_type='ball+stick', selection='all') view._remote_call('setSize', target='Widget', args=['','300px']) view.camera='orthographic' view |
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #Show different structures generated (for comparison) view1 = nglview.show_structure_file(input_structure) view1.add_representation(repr_type='ball+stick') view1._remote_call('setSize', target='Widget', args=['250px','300px']) view1.camera='orthographic' view1 view2 = nglview.show_structure_file(output_babel_h) view2.add_representation(repr_type='ball+stick') view2._remote_call('setSize', target='Widget', args=['250px','300px']) view2.camera='orthographic' view2 view3 = nglview.show_structure_file(output_babel_min) view3.add_representation(repr_type='ball+stick') view3._remote_call('setSize', target='Widget', args=['250px','300px']) view3.camera='orthographic' view3 ipywidgets.HBox([view1, view2, view3]) |
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | # Acpype_params_gmx: Generation of topologies for GROMACS with ACPype # Import module from biobb_chemistry.acpype.acpype_params_gmx import acpype_params_gmx # Create prop dict and inputs/outputs output_acpype_gro = ligandCode + 'params.gro' output_acpype_itp = ligandCode + 'params.itp' output_acpype_top = ligandCode + 'params.top' output_acpype = ligandCode + 'params' prop = { 'basename' : output_acpype, 'charge' : mol_charge } #Create and launch bb acpype_params_gmx(input_path=output_babel_min, output_path_gro=output_acpype_gro, output_path_itp=output_acpype_itp, output_path_top=output_acpype_top, properties=prop) |
138 139 140 141 142 143 | #Show small ligand structure view = nglview.show_structure_file(output_acpype_gro) view.add_representation(repr_type='ball+stick', selection='all') view._remote_call('setSize', target='Widget', args=['','300px']) view.camera='orthographic' view |
Support
- Future updates