From 71cb54b0f25ed32421f8844281ef563d2dc59978 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Wed, 2 Sep 2020 21:51:16 +0200 Subject: [PATCH 01/12] Add CLI usage documentation --- docs/charge.rst | 1 + docs/examples.rst | 1 + docs/figures/PELE_templates_scheme.png | Bin 0 -> 170522 bytes docs/figures/dual_representation.png | Bin 0 -> 78718 bytes docs/index.rst | 2 + docs/usage.rst | 232 +++++++++++++++++++++++++ offpele/examples/README.md | 0 offpele/main.py | 2 +- offpele/topology/molecule.py | 2 +- 9 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 docs/examples.rst create mode 100644 docs/figures/PELE_templates_scheme.png create mode 100644 docs/figures/dual_representation.png create mode 100644 docs/usage.rst create mode 100644 offpele/examples/README.md diff --git a/docs/charge.rst b/docs/charge.rst index a3dd1c26..564662c7 100644 --- a/docs/charge.rst +++ b/docs/charge.rst @@ -18,3 +18,4 @@ Primary objects Am1bccCalculator GasteigerCalculator + OPLSChargeCalculator diff --git a/docs/examples.rst b/docs/examples.rst new file mode 100644 index 00000000..8da9b6a7 --- /dev/null +++ b/docs/examples.rst @@ -0,0 +1 @@ +.. mdinclude:: ../offpele/examples/README.md diff --git a/docs/figures/PELE_templates_scheme.png b/docs/figures/PELE_templates_scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..8a94fe26bd575dbb25f2072ef95e07d97e111b4a GIT binary patch literal 170522 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

H?XF@$Y-d~ol#xPl_xxF_YRHY}QL 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 akm80X6_NQDKIjU;&uJ6OlZ7YTZ~hN?q{>JD literal 0 HcmV?d00001 diff --git a/docs/figures/dual_representation.png b/docs/figures/dual_representation.png new file mode 100644 index 0000000000000000000000000000000000000000..9aff32b9a91cc9e686a16c2bf4bef1841e1abfca GIT binary patch literal 78718 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

JK;+TD#;}zFy&{2;Pq1F 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 VKwT`_: a file containing the atom types and parameters of the ligand. Its job is to link each atom with the corresponding parameters using PDB atom names. Thus, PDB atom names in the input PDB file must match with the expected PDB atom names in the Impact file. This file intrinsically contains the information about the topology and connectivity of each residue. + +- `Rotamer library `_: a file containing the branches that can rotate with respect to a central atomic core. Each branch consists in a set of consecutive rotatable bonds. + +Besides, a third file with the `Solvent parameters` might be required when employing the OBC implicit solvent. + +.. image:: figures/PELE_templates_scheme.png + :width: 400 + :alt: Scheme with all the files that PELE requires to run a simulation + +The `Open Force Field Toolkit `_ is employed to assign the parameters to each atom according to its chemical environment. Besides, the PDB atom names are stored using `RDKit `_. With this dual molecular representation, `offpele` can run the parameterization workflow of Open Force Field while tracking the PDB atom names with RDKit. + +.. image:: figures/dual_representation.png + :width: 400 + :alt: Scheme with the dual molecular representation employed in offpele + + +Basic usage +=========== +The more straightforward way to install `offpele` along with the required dependencies is through the command-line interface built in `main.py `_ module. Therefore, the parameter files for a particular ligand can be obtained with: + +.. code-block:: bash + + $ python -m offpele.main my_ligand.pdb + +.. code-block:: + + ------------------------------------------------------------ + Open Force Field parameterizer for PELE v0.3.0 + ------------------------------------------------------------ + - General: + - Input PDB: my_ligand.pdb + - Output path: None + - Write solvent parameters: False + - DataLocal-like output: False + - Parameterization: + - Force field: openff_unconstrained-1.2.0.offxml + - Charges method: am1bcc + - Use OPLS nonbonding parameters: False + - Use OPLS bonds and angles: False + - Rotamer library: + - Resolution: 30 + - Exclude terminal rotamers: True + ------------------------------------------------------------ + - Loading molecule from RDKit + - Generating rotamer library + - Loading forcefield + - Computing partial charges with am1bcc + - All files were generated successfully + ------------------------------------------------------------ + +Command-line arguments +====================== +Almost all the important settings can be tuned up through command-line +arguments. To obtain the full list of flags you can type: + +.. code-block:: bash + + $ python -m offpele.main --help + +.. code-block:: + + usage: main.py [-h] [-f NAME] [-r INT] [-o PATH] [--with_solvent] + [--as_DataLocal] [-c NAME] [--include_terminal_rotamers] + [--use_OPLS_nonbonding_params] [--use_OPLS_bonds_and_angles] + PDB FILE + + positional arguments: + PDB FILE Path PDB file to parameterize + + optional arguments: + -h, --help show this help message and exit + -f NAME, --forcefield NAME + OpenForceField\'s forcefield name. Default is + openff_unconstrained-1.2.0.offxml + -r INT, --resolution INT + Rotamer library resolution in degrees. Default is 30 + -o PATH, --output PATH + Output path. Default is the current working directory + --with_solvent Generate solvent parameters for OBC + --as_DataLocal Output will be saved following PELE's DataLocal + hierarchy + -c NAME, --charges_method NAME + The name of the method to use to compute charges + --include_terminal_rotamers + Not exclude terminal rotamers when building the + rotamer library + --use_OPLS_nonbonding_params + Use OPLS to set the nonbonding parameters + --use_OPLS_bonds_and_angles + Use OPLS to set the parameters for bonds and angles + +Find below the complete list of command-line arguments in full detail. + +PDB file +-------- +It is a mandatory positional argument that points to the PDB file which +contains ligand to parameterize. + +- Flag: PDB FILE +- Type: string +- Example: the code below will run `offpele` to parameterize the ligand at `path/to/my_ligand.pdb` + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb + +Force field +----------- +It defines the Open Force Field force field to employ to parameterize the ligand. + +- Flag: -f NAME, --forcefield NAME +- Type: string +- Default: 'openff_unconstrained-1.2.0.offxml' +- Example: the code below will run offpele using the forcefield named as 'openff_unconstrained-1.0.0.offxml' + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb -f openff_unconstrained-1.0.0.offxml + +Rotamer library resolution +-------------------------- +It defines the resolution, in degrees, to use in the rotamer library. + +- Flag: -r INT, --resolution INT +- Type: int +- Default: 30 +- Example: the code below will run offpele using a resolution of 60 for the rotamer library + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb -r 60 + +Output path +----------- +It defines the output path where the resulting files will be saved. + +- Flag: -o PATH, --output PATH +- Type: string +- Default: '.', the current working directory +- Example: the code below will save the results into my_custom_folder/ + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb -o my_custom_folder + +Include solvent parameters +-------------------------- +It also generates the OBC solvent parameters and saves them into the output location. + +- Flag: --with_solvent +- Default: False, not include +- Example: the code below will generate and save the OBC solvent parameters + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb --with_solvent + +Save output as DataLocal +------------------------ +It saves the output files following the DataLocal hierarchy expected by PELE. + +- Flag: --as_DataLocal +- Default: False, not save output files as DataLocal +- Example: the code below will generate and save output files following the DataLocal hierarcy of PELE + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb --as_DataLocal + +Charges method +-------------- +It sets the method to compute the partial charges. + +- Flag: -c NAME, --charges_method NAME +- Type: string +- Choices: one of ['gasteiger', 'am1bcc', 'OPLS'] +- Default: 'am1bcc' +- Example: the code below will calculate partial charges using 'gasteiger' method + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb -c gasteiger + +Include terminal rotamers +------------------------- +It always includes terminal rotamers, even if they belong to a terminal methyl group whose rotation is trivial in PELE. + +- Flag: --include_terminal_rotamers +- Default: False, exclude terminal rotamers +- Example: the code below will generate a rotamer library including all terminal rotamers + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb --include_terminal_rotamers + +Parameterize non-bonding terms with OPLS2005 +-------------------------------------------- + .. warning:: + This option requires a valid Schrodinger installation with the ffld_server. An environment variable called `SCHRODINGER` must be set, pointing to the Schrodinger's installation path. + +It uses `OPLS2005` to parameterize the non-bonding terms of the ligand. It also assigns the atom types according to this force field. + +- Flag: --use_OPLS_nonbonding_param +- Default: False, exclude terminal rotamers +- Example: the code below will parameterize the non-bonding terms with OPLS2005 + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb --use_OPLS_nonbonding_param + +Parameterize bonding and angular terms with OPLS2005 +---------------------------------------------------- + .. warning:: + This option requires a valid Schrodinger installation with the ffld_server. An environment variable called `SCHRODINGER` must be set, pointing to the Schrodinger's installation path. + +It uses `OPLS2005` to parameterize the bonds and angle terms of the ligand. + +- Flag: --use_OPLS_bonds_and_angles +- Default: False, exclude terminal rotamers +- Example: the code below will parameterize the non-bonding, bonding and angular terms with OPLS2005 + + .. code-block:: bash + + $ python -m offpele.main path/to/my_ligand.pdb --use_OPLS_nonbonding_param --use_OPLS_bonds_and_angles diff --git a/offpele/examples/README.md b/offpele/examples/README.md new file mode 100644 index 00000000..e69de29b diff --git a/offpele/main.py b/offpele/main.py index 177a8ed4..2b42b9e5 100644 --- a/offpele/main.py +++ b/offpele/main.py @@ -187,11 +187,11 @@ def run_offpele(pdb_file, forcefield=DEFAULT_OFF_FORCEFIELD, print(' - DataLocal-like output:', as_datalocal) print(' - Parameterization:') print(' - Force field:', forcefield) - print(' - Rotamer library resolution:', resolution) print(' - Charges method:', charges_method) print(' - Use OPLS nonbonding parameters:', use_OPLS_nb_params) print(' - Use OPLS bonds and angles:', use_OPLS_bonds_and_angles) print(' - Rotamer library:') + print(' - Resolution:', resolution) print(' - Exclude terminal rotamers:', exclude_terminal_rotamers) print('-' * 60) diff --git a/offpele/topology/molecule.py b/offpele/topology/molecule.py index 01c2a1ee..5b31797c 100644 --- a/offpele/topology/molecule.py +++ b/offpele/topology/molecule.py @@ -482,7 +482,7 @@ def __init__(self, path=None, smiles=None, rotamer_resolution=30, >>> from offpele.topology import Molecule >>> molecule = Molecule(smiles='Cc1ccccc1') - >>> molecule.parameterize('openff_unconstrained-1.1.1.offxml') + >>> molecule.parameterize('openff_unconstrained-1.2.0.offxml') """ self._rotamer_resolution = rotamer_resolution From 9511000c4ca6e8899153eba4ee923d7bef39fd02 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 10:53:40 +0200 Subject: [PATCH 02/12] Include Schrodinger installation --- docs/installation.rst | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/installation.rst b/docs/installation.rst index 058c948b..cc682a8d 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -81,3 +81,41 @@ installed and have to be installed manually such as: - AmberTools For this reason, the installation through `conda` is recommended. + + +External dependencies +===================== + +Some of the functionalities of `offpele` require external dependencies. +They are normally included with the standard `conda` installation, as +explained above. However, the Schrodinger toolkit must be installed +manually. It is only required when combining `Open Force Field` parameters +with `OPLS2005` (as it uses the Schrodinger's `ffld_server`). Nevertheless, +in case that Schrodinger dependencies are missing, `offpele` can still be +employed to generate pure `Open Force Field` parameters. + +The easiest way to get a valid Schrodinger installation is downloading +`Free Maestro `_. It can be +installed in both platforms that are supported by `offpele`: Linux and +MacOS. Once installed, `offpele` will need an environment variable to be +set in order to known the Schrodinger's installation path. So, please, +check that the following environment variable is set before running +`offpele` if you plant to work with `OPLS2005` parameters: + +.. code-block:: bash + + $ export SCHRODINGER=/path/to/Schrodinger/installation/ + +For example, in MacOS, a typical installation path is +`/opt/schrodinger/suites2020-2/`. Therefore: + +.. code-block:: bash + + $ export SCHRODINGER=/opt/schrodinger/suites2020-2/ + +This variable must be set every time `offpele` is employed to work with +`OPLS2005` parameters in a new console session. To avoid future concerns about +this issue, you can set the environment variable automatically every time you +initiate a bash session in your console. You can do so by modifying your +`.bashrc`, `.bash_profile` or `.zshrc` (in case of a `zsh` shell) by adding the +line above. From 6095d02da6e555d2380d55f3eb97ea6de0369d97 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 13:42:49 +0200 Subject: [PATCH 03/12] Add examples --- examples/OFF_parameterization/ANI.pdb | 26 + examples/OFF_parameterization/BNZ.pdb | 53 ++ examples/OFF_parameterization/OLC.pdb | 117 +++++ .../OFF_parameterization/parameterize.ipynb | 482 ++++++++++++++++++ .../OPLS_parameterization/parameterize.ipynb | 386 ++++++++++++++ examples/README.md | 10 + .../PDB-SMILES_comparison.ipynb | 66 +-- offpele/examples/Parameterize.ipynb | 237 --------- offpele/examples/README.md | 0 9 files changed, 1098 insertions(+), 279 deletions(-) create mode 100644 examples/OFF_parameterization/ANI.pdb create mode 100644 examples/OFF_parameterization/BNZ.pdb create mode 100644 examples/OFF_parameterization/OLC.pdb create mode 100644 examples/OFF_parameterization/parameterize.ipynb create mode 100644 examples/OPLS_parameterization/parameterize.ipynb create mode 100644 examples/README.md rename offpele/examples/Molecule.ipynb => examples/molecular_representations/PDB-SMILES_comparison.ipynb (97%) delete mode 100644 offpele/examples/Parameterize.ipynb delete mode 100644 offpele/examples/README.md diff --git a/examples/OFF_parameterization/ANI.pdb b/examples/OFF_parameterization/ANI.pdb new file mode 100644 index 00000000..276400bb --- /dev/null +++ b/examples/OFF_parameterization/ANI.pdb @@ -0,0 +1,26 @@ +HETATM 1 C1 UNL 1 2.707 0.165 -0.078 1.00 0.00 C +HETATM 2 O1 UNL 1 1.710 -0.820 -0.275 1.00 0.00 O +HETATM 3 C2 UNL 1 0.352 -0.469 -0.131 1.00 0.00 C +HETATM 4 C3 UNL 1 -0.647 -1.401 -0.315 1.00 0.00 C +HETATM 5 C4 UNL 1 -1.973 -1.045 -0.172 1.00 0.00 C +HETATM 6 C5 UNL 1 -2.345 0.254 0.161 1.00 0.00 C +HETATM 7 C6 UNL 1 -1.347 1.190 0.345 1.00 0.00 C +HETATM 8 C7 UNL 1 -0.016 0.821 0.198 1.00 0.00 C +HETATM 9 H1 UNL 1 3.654 -0.234 -0.494 1.00 0.00 H +HETATM 10 H2 UNL 1 2.497 1.105 -0.608 1.00 0.00 H +HETATM 11 H3 UNL 1 2.823 0.325 1.034 1.00 0.00 H +HETATM 12 H4 UNL 1 -0.383 -2.426 -0.576 1.00 0.00 H +HETATM 13 H5 UNL 1 -2.775 -1.768 -0.313 1.00 0.00 H +HETATM 14 H6 UNL 1 -3.399 0.508 0.268 1.00 0.00 H +HETATM 15 H7 UNL 1 -1.614 2.218 0.607 1.00 0.00 H +HETATM 16 H8 UNL 1 0.757 1.578 0.349 1.00 0.00 H +CONECT 1 2 9 10 11 +CONECT 2 3 +CONECT 3 4 4 8 +CONECT 4 5 12 +CONECT 5 6 6 13 +CONECT 6 7 14 +CONECT 7 8 8 15 +CONECT 8 16 +END + diff --git a/examples/OFF_parameterization/BNZ.pdb b/examples/OFF_parameterization/BNZ.pdb new file mode 100644 index 00000000..cdcfdcd0 --- /dev/null +++ b/examples/OFF_parameterization/BNZ.pdb @@ -0,0 +1,53 @@ +HEADER HYDROLASE 16-AUG-14 4W52 +REMARK 4 4W52 COMPLIES WITH FORMAT V. 3.30, +REMARK 888 +REMARK 888 WRITTEN BY MAESTRO (A PRODUCT OF SCHRODINGER, LLC) +TITLE T4 LYSOZYME L99A WITH BENZENE BOUND +EXPDTA X-RAY DIFFRACTION +REMARK 2 RESOLUTION. 1.50 ANGSTROMS +REMARK 3 R VALUE : 0.165000 +REMARK 3 FREE R VALUE : 0.182000 +REMARK 200 TEMPERATURE (KELVIN) : 100.00 +REMARK 200 PH : 7.50 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.000000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.000000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.000000 +CRYST1 60.350 60.350 96.610 90.00 90.00 120.00 P 32 2 1 6 +HET BNZ L 1 12 +HETNAM BNZ BENZENE +FORMUL 1 BNZ C6 H6 +MODEL 1 +HETATM 1 C1 BNZ L 1 -32.969 6.196 2.877 0.70 15.06 C +HETATM 2 C2 BNZ L 1 -32.945 7.046 3.973 0.70 12.84 C +HETATM 3 C3 BNZ L 1 -33.719 6.798 5.113 0.70 12.24 C +HETATM 4 C4 BNZ L 1 -34.540 5.680 5.143 0.70 13.09 C +HETATM 5 C5 BNZ L 1 -34.545 4.825 4.044 0.70 12.54 C +HETATM 6 C6 BNZ L 1 -33.787 5.069 2.915 0.70 14.23 C +HETATM 7 H1 BNZ L 1 -32.360 6.413 2.012 1.00 0.00 H +HETATM 8 H2 BNZ L 1 -32.318 7.925 3.961 1.00 0.00 H +HETATM 9 H3 BNZ L 1 -33.672 7.473 5.955 1.00 0.00 H +HETATM 10 H4 BNZ L 1 -35.158 5.487 6.007 1.00 0.00 H +HETATM 11 H5 BNZ L 1 -35.156 3.935 4.055 1.00 0.00 H +HETATM 12 H6 BNZ L 1 -33.823 4.399 2.069 1.00 0.00 H +CONECT 1 2 6 7 +CONECT 1 2 +CONECT 2 1 3 8 +CONECT 2 1 +CONECT 3 2 4 9 +CONECT 3 4 +CONECT 4 3 5 10 +CONECT 4 3 +CONECT 5 4 6 11 +CONECT 5 6 +CONECT 6 1 5 12 +CONECT 6 5 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +ENDMDL +END diff --git a/examples/OFF_parameterization/OLC.pdb b/examples/OFF_parameterization/OLC.pdb new file mode 100644 index 00000000..f6b63382 --- /dev/null +++ b/examples/OFF_parameterization/OLC.pdb @@ -0,0 +1,117 @@ +REMARK 4 COMPLIES WITH FORMAT V. 3.0, 1-DEC-2006 +REMARK 888 +REMARK 888 WRITTEN BY MAESTRO (A PRODUCT OF SCHRODINGER, LLC) +TITLE MRO_oleic - preprocessed +MODEL 1 +HETATM 1 C2 OLC L 1 4.148 7.353 -18.237 1.00 0.00 C +HETATM 2 C1 OLC L 1 2.819 7.913 -18.760 1.00 0.00 C +HETATM 3 C3 OLC L 1 4.336 5.840 -18.529 1.00 0.00 C +HETATM 4 O1 OLC L 1 1.997 8.332 -17.914 1.00 0.00 O +HETATM 5 O2 OLC L 1 2.619 7.886 -19.995 1.00 0.00 O1- +HETATM 6 C4 OLC L 1 3.226 4.913 -17.967 1.00 0.00 C +HETATM 7 C5 OLC L 1 3.428 3.426 -18.324 1.00 0.00 C +HETATM 8 C6 OLC L 1 2.293 2.492 -17.836 1.00 0.00 C +HETATM 9 C7 OLC L 1 2.536 1.015 -18.229 1.00 0.00 C +HETATM 10 C8 OLC L 1 1.783 -0.056 -17.392 1.00 0.00 C +HETATM 11 C9 OLC L 1 2.501 -1.407 -17.407 1.00 0.00 C +HETATM 12 C10 OLC L 1 2.074 -2.659 -17.133 1.00 0.00 C +HETATM 13 C11 OLC L 1 0.708 -3.141 -16.670 1.00 0.00 C +HETATM 14 C12 OLC L 1 -0.251 -3.573 -17.803 1.00 0.00 C +HETATM 15 C13 OLC L 1 -0.435 -2.432 -18.806 1.00 0.00 C +HETATM 16 C14 OLC L 1 -1.522 -2.562 -19.874 1.00 0.00 C +HETATM 17 C15 OLC L 1 -1.587 -1.234 -20.659 1.00 0.00 C +HETATM 18 C16 OLC L 1 -2.964 -0.881 -21.233 1.00 0.00 C +HETATM 19 C17 OLC L 1 -2.994 0.581 -21.715 1.00 0.00 C +HETATM 20 C18 OLC L 1 -4.370 1.021 -22.222 1.00 0.00 C +HETATM 21 H1 OLC L 1 4.953 7.921 -18.708 1.00 0.00 H +HETATM 22 H2 OLC L 1 4.242 7.560 -17.172 1.00 0.00 H +HETATM 23 H3 OLC L 1 4.417 5.705 -19.610 1.00 0.00 H +HETATM 24 H4 OLC L 1 5.305 5.541 -18.122 1.00 0.00 H +HETATM 25 H5 OLC L 1 3.168 5.041 -16.885 1.00 0.00 H +HETATM 26 H6 OLC L 1 2.260 5.241 -18.354 1.00 0.00 H +HETATM 27 H7 OLC L 1 3.528 3.341 -19.407 1.00 0.00 H +HETATM 28 H8 OLC L 1 4.382 3.100 -17.908 1.00 0.00 H +HETATM 29 H9 OLC L 1 2.207 2.594 -16.755 1.00 0.00 H +HETATM 30 H10 OLC L 1 1.338 2.828 -18.243 1.00 0.00 H +HETATM 31 H11 OLC L 1 2.303 0.878 -19.287 1.00 0.00 H +HETATM 32 H12 OLC L 1 3.609 0.837 -18.162 1.00 0.00 H +HETATM 33 H13 OLC L 1 1.694 0.260 -16.354 1.00 0.00 H +HETATM 34 H14 OLC L 1 0.765 -0.137 -17.754 1.00 0.00 H +HETATM 35 H15 OLC L 1 3.532 -1.332 -17.691 1.00 0.00 H +HETATM 36 H16 OLC L 1 2.801 -3.444 -17.245 1.00 0.00 H +HETATM 37 H17 OLC L 1 0.860 -3.979 -15.988 1.00 0.00 H +HETATM 38 H18 OLC L 1 0.249 -2.379 -16.052 1.00 0.00 H +HETATM 39 H19 OLC L 1 0.119 -4.466 -18.306 1.00 0.00 H +HETATM 40 H20 OLC L 1 -0.682 -1.556 -18.213 1.00 0.00 H +HETATM 41 H21 OLC L 1 -1.314 -3.400 -20.542 1.00 0.00 H +HETATM 42 H22 OLC L 1 -2.477 -2.781 -19.397 1.00 0.00 H +HETATM 43 H23 OLC L 1 -1.295 -0.409 -20.004 1.00 0.00 H +HETATM 44 H24 OLC L 1 -0.835 -1.239 -21.451 1.00 0.00 H +HETATM 45 H25 OLC L 1 -3.211 -1.562 -22.049 1.00 0.00 H +HETATM 46 H26 OLC L 1 -3.725 -1.022 -20.464 1.00 0.00 H +HETATM 47 H27 OLC L 1 -2.697 1.242 -20.897 1.00 0.00 H +HETATM 48 H28 OLC L 1 -2.249 0.727 -22.499 1.00 0.00 H +HETATM 49 H29 OLC L 1 -4.348 2.068 -22.528 1.00 0.00 H +HETATM 50 H30 OLC L 1 -4.680 0.430 -23.084 1.00 0.00 H +HETATM 51 H31 OLC L 1 -5.129 0.919 -21.446 1.00 0.00 H +HETATM 52 H32 OLC L 1 -1.213 -3.839 -17.365 1.00 0.00 H +HETATM 53 H33 OLC L 1 0.515 -2.220 -19.298 1.00 0.00 H +CONECT 1 2 3 21 22 +CONECT 2 1 4 5 +CONECT 2 4 +CONECT 3 1 6 23 24 +CONECT 4 2 +CONECT 4 2 +CONECT 5 2 +CONECT 6 3 7 25 26 +CONECT 7 6 8 27 28 +CONECT 8 7 9 29 30 +CONECT 9 8 10 31 32 +CONECT 10 9 11 33 34 +CONECT 11 10 12 35 +CONECT 11 12 +CONECT 12 11 13 36 +CONECT 12 11 +CONECT 13 12 14 37 38 +CONECT 14 13 15 39 52 +CONECT 15 14 16 40 53 +CONECT 16 15 17 41 42 +CONECT 17 16 18 43 44 +CONECT 18 17 19 45 46 +CONECT 19 18 20 47 48 +CONECT 20 19 49 50 51 +CONECT 21 1 +CONECT 22 1 +CONECT 23 3 +CONECT 24 3 +CONECT 25 6 +CONECT 26 6 +CONECT 27 7 +CONECT 28 7 +CONECT 29 8 +CONECT 30 8 +CONECT 31 9 +CONECT 32 9 +CONECT 33 10 +CONECT 34 10 +CONECT 35 11 +CONECT 36 12 +CONECT 37 13 +CONECT 38 13 +CONECT 39 14 +CONECT 40 15 +CONECT 41 16 +CONECT 42 16 +CONECT 43 17 +CONECT 44 17 +CONECT 45 18 +CONECT 46 18 +CONECT 47 19 +CONECT 48 19 +CONECT 49 20 +CONECT 50 20 +CONECT 51 20 +CONECT 52 14 +CONECT 53 15 +ENDMDL +END diff --git a/examples/OFF_parameterization/parameterize.ipynb b/examples/OFF_parameterization/parameterize.ipynb new file mode 100644 index 00000000..c1f1b935 --- /dev/null +++ b/examples/OFF_parameterization/parameterize.ipynb @@ -0,0 +1,482 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Parameterization with the Open Force Field Toolkit\n", + "This notebook shows how to use the API of `offpele` to parameterize a molecule with a force field from the Open Force Field initiative. Then, it generates the three files that PELE requires:\n", + "- Rotamer library\n", + "- Impact template\n", + "- Solvent parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 1: benzene\n", + "This example shows how to load and parameterize the benzene molecule with `offpele`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the required classes from `offpele`'s API" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from offpele.topology import Molecule, RotamerLibrary\n", + "from offpele.template import Impact\n", + "from offpele.solvent import OBC2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load `offpele`'s molecule representation with a PDB file of benzene" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning: Unable to load toolkit 'OpenEye Toolkit'. The Open Force Field Toolkit does not require the OpenEye Toolkits, and can use RDKit/AmberTools instead. However, if you have a valid license for the OpenEye Toolkits, consider installing them for faster performance and additional file format support: https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html OpenEye offers free Toolkit licenses for academics: https://www.eyesopen.com/academic-licensing\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading molecule from RDKit\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "03e469885263463d9085a59d899d0a6d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Generating rotamer library\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAVMUlEQVR4nO3de1CU9f4H8M8CErOwKt7I0LzBgqyKF0QN6AIpdTwKpjmaeKksS6fYpRVDLDMNR1KGc6a0puMcjx6dTCpxrNAxy6zIBpTElt0VKYiLaws7XNb1YWH398dz4sesNiH7PM+XXd6vv5zv08znvbP28fNc9vvInE4nAQBAb/mwDgAA4NnQRgEA3II2CgDgFrRRAAC3oI0CALgFbRQAwC1oowAAbkEbhR4xmUwqlaq8vLxrpaCgID4+nmEkoXjxRwNpoI1Cj3Acp9PpbDZb14rZbNbr9QwjCcWLPxpIA20UAMAtfqwDgCcpKyvjOI7/s8FgYBtGWF780UBsMvymHnqipqZmzJgxCoXC19eXX+E4Ti6Xm81mtsHc58UfDaSBk3q4C2fOnLH8IS8vj3UcIXnxRwOxoY0CALgFbRQAwC1oo9AjMpns9kUfH5+mpibpwwirubn59kUfH/yvAT2FW0zQS21tbWvXrv3mm28MBoNCoWAdp5daW1sjIiIefPDBf/3rX0FBQazjgEfCP7nQS4GBgfX19Q0NDW+99RbrLL23Y8eOhoaGmpqawMBA1lnAU2Eahd67ePHizJkz/fz8rly5Eh4ezjrOXauqqoqKirLb7cXFxbGxsazjgKfCNAq9N3369FWrVrW3t2dmZrLO0hsZGRkcx61evRo9FNyBaRTcYjKZlEplS0tLUVFRcnIy6zh34ezZs0lJSQqFwmAwjBw5knUc8GCYRsEtISEhWVlZRJSRkWG321nH6anOzk61Wk1E2dnZ6KHgJrRRcFdGRkZ4eLhOp3v//fdZZ+mpvXv3lpeXjx8/nm+mAO7AST0I4Pjx44sWLQoODjYajcOGDWMd5y9YLJbw8PDGxsbjx4+npKSwjgMeD9MoCCA1NTU5OdlisWzbto11lr/22muvNTY2JiYmooeCIDCNgjB0Ol10dLTT6bx06dLkyZNZx/lTOp1u6tSpDoejj+cED4JpFIQRFRW1bt26rls3fRZ/K+zFF19EDwWhYBoFwfT9a46edQ0XPAWmURBMcHDw1q1b6Y/H2lnHcdX1M4E333wTPRQEhDYKQlq/fv3kyZOrqqry8/NZZ3GVl5d39epV/uID6yzgVXBSDwLrm78O8txfW0Hfh2kUBJaYmLhw4cLW1tYtW7awzvL/srKyWlpaUlJS0ENBcJhGQXjXrl1TqVR9Z+ekrp2oysvLlUol6zjgbTCNgvAmTJiQnp7ucDjUajXzf6edTqdarXY4HBqNBj0UxIBpFETB7yrf0NBw+PDhp556imGSw4cPp6WlhYSEGAyGQYMGMUwC3grTKIhCoVDs2LGDiDIzM61WK6sYNptt8+bNRLRz5070UBAJ2iiIZc2aNbGxsXV1dbm5uawy7Ny5s6amZvr06atXr2aVAbweTupBRMXFxXFxcQEBATqdbuzYsRJX/+233yIjI20227lz5xISEiSuDv0HplEQ0Zw5c5YtW2az2V599VXpq2u12ps3by5fvhw9FESFaRTEVVtbGxkZabVav/7664ceekiyut99911CQkJAQEBFRcWYMWMkqwv9EKZRENeoUaM2btxIRGq1urOzU5qiXc9avfrqq+ihIDZMoyA6m80WFRX166+/pqSkxMTESFCxpKSksLBw9OjRer1eLpdLUBH6M7RRkEJGRsbBgwcbGxslqxgSErJixYo9e/ZIVhH6LbRREB3HcZMmTaqsrHz88cenT58uQcXS0tKioqJx48bpdLqAgAAJKkJ/5sc6AHi/3bt3V1ZWqlSqEydO+PlJ8Veus7Nz+vTply9fzsvL4x+/BxAPplEQ1/Xr1yMiIlpaWk6fPj137lzJ6n711VeJiYlBQUEGg+G+++6TrC70Q7hTD+LKzMxsaWlZvHixlD2UiB555JEnnniira0tKytLyrrQD2EaBRGVlpbGxsYOGDDgypUrYWFhElf/5ZdfoqKiOI4rLi6eNWuWxNWh/8C1URCL0+ncsGGDw+HQarV37KEGg6G5uVmQWoMGDYqIiHBZHDduXEZGRk5OzoYNG3788UcfH5x7gSgwjYJYDh48uHr16pCQEKPROHDgwNv/g+Tk5NOnTwtSa968eadOnbp9va2tLSIior6+/uDBgytXrhSkFoALTKMgiq6Lkrm5uXfsoUQUGRlpsVgEKRcZGXnH9aCgoJycnDVr1mRmZqakpPxZEgB3YBoFUWRnZ+fk5MyYMYP52bTT6ZwzZ86FCxeys7P5LVABhIU2CsLrurfzzTffxMfHs45DP/zwwwMPPODv78/kThd4PVx0B+Fptdpbt26tXLmyL/RQIpo9e3ZaWhrHcUz26wOvh2kUBMY/9y6Xy/V6/ejRo1nH+Z+6urrIyMi2tjaJfwUA/QGmURBSZ2enRqMhouzs7L7TQ4koNDSUH0U1Gk1HRwfrOOBVMI2CkPbt27d+/fq+uSdI1w4p+/bte+GFF1jHAe+BNgqCsVgsSqXSbDYXFBQsXryYdZw7KCgoePLJJ4cMGWI0GocOHco6DngJnNSDYLZt22Y2mx955JG+2UOJaMmSJXPnzm1qasKTTyAgTKMgDL1eP2XKFIfDUVpaGh0dzTrOn/r555+nTp1KRGVlZSqVinUc8AaYRkEYGRkZdrv9ueee68s9lIhUKtWzzz7b0dGhVqtZZwEvgWkUBHDy5MkFCxYMHjzYaDQOHz6cdZy/0NTUFB4e3tTUdPLkyfnz57OOAx4P0yi4q729XavVEtHWrVv7fg8loiFDhmzZsoWI1Go1x3Gs44DHQxsFd/3zn/80GAyRkZEbNmxgnaWnXnrpJZVKVVlZ+c4777DOAh4PJ/Xglhs3biiVyubm5s8///zxxx9nHecunDlzZu7cuQqFwmg03nvvvazjgAfDNApuyc7Obm5u/vvf/+5ZPZSIHn300fnz57e2tr7++uuss4BnwzQKvVdWVhYTE+Pj41NeXn775vN9X2Vl5aRJk+x2+4ULF2JiYljHAU+FaRR6T61Wd3Z2vvzyy57YQ4koLCyMf82JWq3GPAG9hmkUeuno0aPLli0bMWKEwWAYPHgw6zi91NLSEhERcf369aNHjy5dupR1HPBImEahN2w2G79h0o4dOzy3hxLRwIEDt23bRkRarfbmzZus44BHQhv1YCaTSaVSlZeXd60UFBRIs1Py22+//euvv06dOvWZZ56RoJyo1q5dGxMT89tvv+3Zs0fsWgy/MhAP2qgH4zhOp9PZbLauFbPZrNfrxa5bV1eXm5tLRPn5+b6+vmKXE5uPj09+fr5MJtu5c2dNTY2otVh9ZSAqtFG4a5mZmVardenSpQ899BDrLMKIi4tbsmSJzWbbvHkz6yzgefCCZY9XVlbW9YtGg8FARMeOHRP1bklgYOA999yza9cu8UpILzc398SJE8ePH5fJZOJV2bt3L93pKwOPhjbq8bRabdeZNcdxcrmcYRiHw3H58mV+J7q+qaysbMqUKWzf+dynvjIQgBM8VnV1NRFduHCha2Xfvn1Dhw4Vu+6KFSuI6Mknn3RZb21tnTZtWmBgYG1trdgZeqe2tjYwMHDatGmtra0uh5YsWUJEaWlpogZg9ZWBqHBtFO7arl27AgMDjx07du7cue7rQUFBEyZMsFqtffY9xps2bbJarWFhYUFBQd3Xv/vuu48//lgul7/11lussoHnQhuFuxYaGrpp0yb641dM3Q/l5eXJ5fLDhw9/++23jNL9qeLi4iNHjgQEBPCPGXRxOBzp6elOpzMrK+v+++9nFQ88F9qoB7vjzRBprvpptdqxY8eWlZXt37+/+/ro0aMzMjKcTmd6errD4ZAgSQ91/eJz48aNY8eO7X7ogw8+KC0t5ZOLHYPhVwYiYnxRATzW0aNHiWj48OEWi6X7utVq5We6AwcOsMp2u3//+99EFBoa2tbW1n29ubmZ3yXvo48+YpUNPB3aKPQe/9woP352d+jQISIKCQlpbm5mEsxFa2vrfffdR0T//e9/XQ5pNBoiiouLczgcTLKBF0Abhd67dOmSr6/vgAED9Hp993WHw8H/wDErK4tVtu74W16zZ8926ZVXr1719/f38fEpKSlhlQ28ANoouOW5554jovnz57usl5SU+Pj4+Pv7G41GJsG6XLt2LSAgQCaTdX/MiPe3v/2NiJ5//nkmwcBroI2CW0wmE7/D0+eff+5yaPXq1US0aNEiJsG6pKamEtGaNWtc1k+fPk1EAwcObGhoYBIMvAbaKLhr9+7dRBQWFsZxXPf169evDxw4kIhOnTrFKtuXX35JREFBQXV1dd3X29vb+a2m9+zZwyobeA20UXBXV0vKy8tzOZSTk0NEUVFRdrtd+mAdHR1Tpkwhop07d7oc4vfECwsLu3XrlvTBwMugjYIATp48eccTZI7jwsPDiejdd9+VPhX/8uTx48fbbLbu6zdu3OAvRHz22WfSpwLvgzYKwuDfDLpu3TqX9Y8//piIhgwZYjabpczT1NQ0bNgwIvrkk09cDj3//PNENHfuXCnzgBdDGwVhVFRUDBgw4I4PD82bN4+IXn75ZSnzvPTSS0SUmJjosl5WVubr6+vn53flyhUp84AXQxsFwajVaiKKj493eTzz559/9vPz8/Pzu3z5sjRJdDrdgAEDfH19f/rpJ5dDDz/8MBFpNBppkkB/gDYKgrFYLMOHDyeiY8eOuRxav349ESUlJUmTJDk5mYg2bNjgsv7RRx/xVxgaGxulSQL9AdooCGnfvn1ENHr0aKvV2n29sbFx6NChRHTixAmxMxQWFhJRcHDw77//3n3dZrPxm5K89957YmeAfgVtFITU0dERHR1NRDt27HA5lJ+fT0QTJkwQ9RkjjuOUSiUR/eMf/3A5tH37diJSqVRMnr4CL4Y2CgI7f/68TCaTy+XV1dXd1+12+6RJk4goNzdXvOr8G6ImTpzY3t7efb22tpbfqvmrr74Srzr0T2ijILzFixcT0cqVK13Wz5w5Q0QKhaK+vl6MuiaTadCgQUT0xRdfuBxKS0sjoiVLlohRF/o5tFEQXnV1tVwul8lk58+fdzm0YMECInr22WfFqPvMM88Q0cKFC13Wi4uLZTJZQEBAVVWVGHWhn0MbBVFkZ2cT0YwZMzo7O7uvG41Gf39/hULhcv/Hfb///rtCobh9TymHwxEbG0tEW7ZsEbYiAE/mdDoF2UUfoLubN29OnDixpqbmwIED/FZPXT788MOEhITQ0FDBi9bV1Z0/f37ZsmXdFw8cOPD000+Hhobq9XqXN9kBCAJtFMRy6NChVatWhYSEGI1Gfqsn6bW1tUVERNTX1x86dIi/PAogOLxLC8SSlpYWFxdnMpn4u+dM5OTk1NfXz549e8WKFawygNfDNAoiKi0tjY2N5X/Azm/1JKWqqiqVSsVxXHFx8axZsySuDv0HplEQ0YwZM9LS0trb2/m3IUlMq9XeunVr1apV6KEgKkyjIC6TyaRUKltaWk6dOsVv9SSNs2fPJiUlBQUFGQwG/rWgACLBNAriCgkJ2bRpExFpNJqOjg5pinZ2dvJvTt68eTN6KIgN0yiIrr29XaVSVVZWPvbYYzNmzJCgYmlpaVFR0bhx43Q6XUBAgAQVoT/zYx0AvJ+/v/+CBQv+85//FBUVFRUVSVM0JCRk0aJF6KEgAUyjIDqbzTZx4sTq6urU1FRpptGSkpLCwsJRo0bp9frAwEAJKkJ/hmkURLdr167q6upp06YVFBT4+vpKUNHhcMyaNaukpGT37t1bt26VoCL0Z5hGQVy1tbWRkZFWq/XcuXMPPvigZHW///77+Pj4gICAioqKMWPGSFYX+iHcqQdxbdy40Wq1Llu2TMoeSkQPPPDA0qVLbTZbVlaWlHWhH8I0CiIqLi6Oi4tjNRLW1tZGRETYbLZz584lJCRIXB36D0yjIBaHw5Genu50OjMzM5mcVo8aNUqr1TqdzvT0dIfDIX0A6CcwjYJY9u/fv3btWra3y7seEti/fz+/qTOA4NBGQRStra0RERENDQ1HjhxZvnw5wyRHjhxZsWLFiBEjjEYj/4oRAGHhpB5EsX379oaGhjlz5rhsoiy95cuXJyQk3LhxIycnh20S8FaYRkF4165d499j/MMPP8ycOZN1HLp06VJMTIyfn195eTn/+mUAAWEaBeFpNBqO455++um+0EOJaNq0aWvWrGlvb9+4cSPrLOCFMI2CwL788stHH31UoVAYDIaRI0eyjvM/N27cUCqVzc3NRUVFycnJrOOAV8E0CkLq6Ojgd6jbsmVL3+mhRDRixAj+OXyNRmO321nHAa+CNgpC2rt3b3l5+YQJE9LT01lncaXRaJRKZUVFxXvvvcc6C3gVnNSDYJqampRKZWNjY2Fh4cKFC1nHuYPCwsLU1NTg4GCj0Ths2DDWccBLYBoFwbz22muNjY1JSUl9s4cSUUpKSnJyssVieeONN1hnAe+BaRSEodPpoqOjiejixYuTJ09mHedPVVRUREdHOxyOS5cu9eWc4EEwjYIw+Fctvfjii328N02cOHHdunWdnZ1qtZp1FvASmEZBAJ9++ukTTzwRHBx89erVoUOHso7zFywWi1KpNJvNn376aWpqKus44PEwjYK72tvb+Xd/bt++ve/3UCIKDg7mt8R/5ZVXbt26xToOeDy0UXDXnj17rl69GhUVtW7dOtZZeoq/+FBVVZWfn886C3g8nNSDW0wmk1KpbGlpOXXq1Lx581jHuQtnz55NSkoKCgoyGAx4lz24A9MouGXTpk0tLS2LFi3yrB5KRImJiampqW1tbdnZ2ayzgGfDNAq9d/HixZkzZ/r5+V25ciU8PJx1nLtWVVUVFRVlt9uLi4tjY2NZxwFPhWkUeqnr5RwZGRme2EOJaPz48Wq12uFwqNVqzBPQa2ij0EtWqzU0NHTkyJGbN29mnaX3srOzR44cef/991utVtZZwFPhpB7c0tTUNGTIENYp3OIFHwHYwjQKPWIymVQqVXl5eddKQUFBfHy8FzQgu91+x4/GMBJ4FrRR6BGO43Q6nc1m61oxm816vZ5hJKF48UcDaaCNAgC4xY91APAkZWVlHMfxfzYYDGzDCMuLPxqIDbeYoEdqamrGjBmjUCh8fX35FY7j5HK52WxmG8x9XvzRQBo4qYe7cObMGcsf8vLyWMcRkhd/NBAb2igAgFvQRgEA3II2Cj0ik8luX/Tx8Ya/P1780UAauMUEAOAW/JMLAOAWtFEAALegjQIAuAVtFADALWijAABuQRsFAHDL/wG4GNjveARngwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "molecule = Molecule('BNZ.pdb')\n", + "display(molecule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate the Rotamer library file\n", + "The `RotamerLibrary` method handles the rotamer library generation. Here, we are generating it and saving it to a file named __BNZ.rot.assign__." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "rotamer_library = RotamerLibrary(molecule)\n", + "rotamer_library.to_file('BNZ.rot.assign')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameterize with Open Force Field Toolkit and generate the Impact template\n", + "Please, note that before generating the Impact template, we need to parameterize the molecule by calling the `Molecule.parameterize()` method.\n", + "Then, the Impact template, named __bnzz__, can be generated." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading forcefield\n", + " - Computing partial charges with am1bcc\n" + ] + } + ], + "source": [ + "molecule.parameterize('openff_unconstrained-1.2.0.offxml')\n", + "impact = Impact(molecule)\n", + "impact.write('bnzz')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate the Solvent parameters file\n", + "Please, note that before generating the Solvent parameters file, the molecule has to be previously parameterized. However, as we have already run the parameterization with `Molecule.parameterize()`, we can now skip this step because the molecule is already parameterized. Here, we generate the OBC2 Solvent parameters file, named __ligandParams.txt__." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading solvent parameters\n" + ] + } + ], + "source": [ + "solvent = OBC2(molecule)\n", + "solvent.to_json_file('ligandParams.txt')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2: oleic acid\n", + "This example shows how to load and parameterize the oleic acid molecule with `offpele` with some customized settings." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the required classes from `offpele`'s API" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from offpele.topology import Molecule, RotamerLibrary\n", + "from offpele.template import Impact\n", + "from offpele.solvent import OBC2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load `offpele`'s molecule representation with a PDB file of oleic acid" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading molecule from RDKit\n", + " - Generating rotamer library\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "molecule = Molecule('OLC.pdb', rotamer_resolution=60)\n", + "display(molecule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate the Rotamer library file\n", + "We are generating the Rotamer library and saving it to a file named __OLC.rot.assign__. Please, note that in this case the employed rotamer resolution is 60 degrees because we set the __rotamer_resolution__ to __60__ when initializing the `Molecule` class." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "rotamer_library = RotamerLibrary(molecule)\n", + "rotamer_library.to_file('OLC.rot.assign')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameterize with Open Force Field Toolkit and generate the Impact template\n", + "Parameters from the __openff_unconstrained-1.2.0.offxml__ force field are assigned to the molecule. We can use another method to compute partial charges rather than the default one. Here, we are using the __gasteiger__ method. Then, the Impact template, named __olcz__, is generated." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading forcefield\n", + " - Computing partial charges with gasteiger\n" + ] + } + ], + "source": [ + "molecule.parameterize('openff_unconstrained-1.2.0.offxml',\n", + " charges_method='gasteiger')\n", + "impact = Impact(molecule)\n", + "impact.write('olcz')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate the Solvent parameters file\n", + "We generate the OBC2 Solvent parameters file, named __ligandParams.txt__." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading solvent parameters\n" + ] + } + ], + "source": [ + "solvent = OBC2(molecule)\n", + "solvent.to_json_file('ligandParams.txt')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 3: anisole\n", + "This example shows how to load and parameterize the anisole molecule with `offpele` from a SMILES tag." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the required classes from `offpele`'s API" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from offpele.topology import Molecule, RotamerLibrary\n", + "from offpele.template import Impact\n", + "from offpele.solvent import OBC2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load `offpele`'s molecule representation with a PDB file of anisole" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Constructing molecule from a SMILES tag with RDKit\n", + " - Generating rotamer library\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "molecule = Molecule(smiles='COc1ccccc1')\n", + "display(molecule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Save PDB file for PELE\n", + "PELE still needs a PDB file to run a simulation. `offpele` can extract a PDB file with the structure of the molecule with PDB atom names correctly assigned." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "molecule.to_pdb_file('ANI.pdb')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate the Rotamer library file\n", + "We are generating the Rotamer library and saving it to a file named __ANI.rot.assign__." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "rotamer_library = RotamerLibrary(molecule)\n", + "rotamer_library.to_file('ANI.rot.assign')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameterize with Open Force Field Toolkit and generate the Impact template\n", + "Parameters from the __openff_unconstrained-1.2.0.offxml__ force field are assigned to the molecule. Then, the Impact template, named __aniz__, is generated." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading forcefield\n", + " - Computing partial charges with am1bcc\n" + ] + } + ], + "source": [ + "molecule.parameterize('openff_unconstrained-1.2.0.offxml')\n", + "impact = Impact(molecule)\n", + "impact.write('aniz')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate the Solvent parameters file\n", + "We generate the OBC2 Solvent parameters file, named ligandParams.txt." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading solvent parameters\n" + ] + } + ], + "source": [ + "solvent = OBC2(molecule)\n", + "solvent.to_json_file('ligandParams.txt')" + ] + } + ], + "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.7.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/OPLS_parameterization/parameterize.ipynb b/examples/OPLS_parameterization/parameterize.ipynb new file mode 100644 index 00000000..af79d3b5 --- /dev/null +++ b/examples/OPLS_parameterization/parameterize.ipynb @@ -0,0 +1,386 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Parameterization with the Open Force Field Toolkit\n", + "This notebook shows how to use the API of `offpele` to combine the parameters from OPLS2005 and force fields from the Open Force Field initiative. There are several possible combinations that are displayed below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 1: Open Force Field parameters with OPLS2005 charges\n", + "This example shows how to parameterize a molecule by combining the parameters from the Open Force Field initiative with OPLS2005 partial charges." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the required classes from `offpele`'s API" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from offpele.topology import Molecule\n", + "from offpele.template import Impact" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `offpele` requires the Schrodinger Toolkit to use the OPLS2005 parameters\n", + "To indicate the path to the Schrodinger's installation `offpele` needs the following environment variable to be set." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.environ['SCHRODINGER'] = '/opt/schrodinger/suites2020-2/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load `offpele`'s molecule representation with a PDB file of anthracene" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Constructing molecule from a SMILES tag with RDKit\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning: Unable to load toolkit 'OpenEye Toolkit'. The Open Force Field Toolkit does not require the OpenEye Toolkits, and can use RDKit/AmberTools instead. However, if you have a valid license for the OpenEye Toolkits, consider installing them for faster performance and additional file format support: https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html OpenEye offers free Toolkit licenses for academics: https://www.eyesopen.com/academic-licensing\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d41770c93cdb445b9020de31daf8bdce", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Generating rotamer library\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "molecule = Molecule(smiles='c1ccc2cc3ccccc3cc2c1')\n", + "display(molecule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameterize with `Open Force Field Toolkit` and `ffld_server`, and generate the Impact template\n", + "Please, note that to use OPLS2005 partial charges from OPLS2005 we need to select the `OPLS` option in the `charges_method` parameter when calling the `Molecule.parameterize()` function.\n", + "Then, the Impact template, named __antz__, can be generated." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading forcefield\n", + " - Computing partial charges with OPLS\n" + ] + } + ], + "source": [ + "molecule.parameterize('openff_unconstrained-1.2.0.offxml',\n", + " charges_method='OPLS')\n", + "impact = Impact(molecule)\n", + "impact.write('antz')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2: Open Force Field parameters with OPLS2005 non-bonding parameters\n", + "This example shows how to parameterize a molecule by combining the parameters from the Open Force Field initiative with OPLS2005 non-bonding terms. This combination of parameters allows PELE to use its SGB implicit solvent model (which requires OPLS2005 atom types to be assigned)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the required classes from `offpele`'s API" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from offpele.topology import Molecule\n", + "from offpele.template import Impact" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `offpele` requires the Schrodinger Toolkit to use the OPLS2005 parameters\n", + "To indicate the path to the Schrodinger's installation `offpele` needs the following environment variable to be set." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.environ['SCHRODINGER'] = '/opt/schrodinger/suites2020-2/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load `offpele`'s molecule representation with a PDB file of aldicarb" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Constructing molecule from a SMILES tag with RDKit\n", + " - Generating rotamer library\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "molecule = Molecule(smiles='CC(C)(/C=N\\OC(=O)NC)SC')\n", + "display(molecule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameterize with `Open Force Field Toolkit` and `ffld_server`, and generate the Impact template\n", + "To work with OPLS2005 non-bonding parameters, we need to call `Molecule.parameterize()` with an extra parameter, `use_OPLS_nonbonding_params`, set to `True`. Then, the Impact template, named __aldz__, can be generated." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading forcefield\n", + " - Computing partial charges with am1bcc\n" + ] + } + ], + "source": [ + "molecule.parameterize('openff_unconstrained-1.2.0.offxml',\n", + " use_OPLS_nonbonding_params=True)\n", + "impact = Impact(molecule)\n", + "impact.write('antz')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 3: OPLS2005 non-bonding parameters and bond and angle terms with Open Force Field torsions\n", + "This example shows how to parameterize a molecule by combining the parameters from the OPLS2005 with dihedrals from the Open Force Field initiative. This combination of parameters also allows PELE to use its SGB implicit solvent model (which requires OPLS2005 atom types to be assigned)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the required classes from `offpele`'s API" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from offpele.topology import Molecule\n", + "from offpele.template import Impact" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `offpele` requires the Schrodinger Toolkit to use the OPLS2005 parameters\n", + "To indicate the path to the Schrodinger's installation `offpele` needs the following environment variable to be set." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.environ['SCHRODINGER'] = '/opt/schrodinger/suites2020-2/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load `offpele`'s molecule representation with a PDB file of diazinon" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Constructing molecule from a SMILES tag with RDKit\n", + " - Generating rotamer library\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "molecule = Molecule(smiles='CCOP(=S)(OCC)Oc1cc(nc(n1)C(C)C)C')\n", + "display(molecule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameterize with `Open Force Field Toolkit` and `ffld_server`, and generate the Impact template\n", + "To work with OPLS2005 non-bonding parameters, we need to call `Molecule.parameterize()` with two extra parameters, `use_OPLS_nonbonding_params` and `use_OPLS_bonds_and_angles`, both set to `True`. Then, the Impact template, named __diaz__, can be generated." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Loading forcefield\n", + " - Computing partial charges with am1bcc\n" + ] + } + ], + "source": [ + "molecule.parameterize('openff_unconstrained-1.2.0.offxml',\n", + " use_OPLS_nonbonding_params=True,\n", + " use_OPLS_bonds_and_angles=True)\n", + "impact = Impact(molecule)\n", + "impact.write('diaz')" + ] + } + ], + "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.7.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..e41a7712 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,10 @@ +# Examples + +The following examples are available in the [offpele repository](): + +## Summary +- [molecular_representations](): it shows and compares the different methods that can be used to represent molecules in `offpele`. +- [OFF_parameterization](): it shows how to use `offpele` to assign parameters with the `Open Force Field Toolkit`. +- [OPLS_parameterization](): it shows how to use `offpele` to combine parameters from Schrodinger's `OPLS2005` force field with the ones from the `Open Force Field Toolkit`. + +/*To do: include rotamer examples*/ diff --git a/offpele/examples/Molecule.ipynb b/examples/molecular_representations/PDB-SMILES_comparison.ipynb similarity index 97% rename from offpele/examples/Molecule.ipynb rename to examples/molecular_representations/PDB-SMILES_comparison.ipynb index 6109a13d..f8d6c5a0 100644 --- a/offpele/examples/Molecule.ipynb +++ b/examples/molecular_representations/PDB-SMILES_comparison.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Molecule definitions\n", + "# Molecular representations\n", "This notebook shows the two available methods that can be used to define a molecule object in `offpele`. It can accept either a PDB file or a SMILES tag." ] }, @@ -46,23 +46,23 @@ "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - " - Loading molecule from RDKit\n" + "Warning: Unable to load toolkit 'OpenEye Toolkit'. The Open Force Field Toolkit does not require the OpenEye Toolkits, and can use RDKit/AmberTools instead. However, if you have a valid license for the OpenEye Toolkits, consider installing them for faster performance and additional file format support: https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html OpenEye offers free Toolkit licenses for academics: https://www.eyesopen.com/academic-licensing\n" ] }, { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "Warning: Unable to load toolkit 'OpenEye Toolkit'. The Open Force Field Toolkit does not require the OpenEye Toolkits, and can use RDKit/AmberTools instead. However, if you have a valid license for the OpenEye Toolkits, consider installing them for faster performance and additional file format support: https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html OpenEye offers free Toolkit licenses for academics: https://www.eyesopen.com/academic-licensing\n" + " - Loading molecule from RDKit\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "640c0e21cd1c4a7088cd0c8a0735cc27", + "model_id": "468b8abf0d1a48f286b975a02b836141", "version_major": 2, "version_minor": 0 }, @@ -82,19 +82,16 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, - "execution_count": 3, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "m = Molecule(AMMONIUM_PDB)\n", - "m2 = copy(m.rdkit_molecule)\n", - "AllChem.Compute2DCoords(m2)\n", - "m2" + "display(m)" ] }, { @@ -114,19 +111,16 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAGDElEQVR4nO3dQUhkdRzA8d8bhAjaKLotFN4DQSgoKLx0LG/TpYNFbBrSRUkI7DbJEulhD4Ea5KGtS0TsrZNGuJcOvojoEjFGBAMKsRBEgdNhhXJWXdtf+v7a58Medt9z2d8+H1/+w3/GV/X7/QDgXrWaHgDgfJNRgBQZBUiRUYAUGQVIkVGAFBkFSJFRgJShpgeAA9bX1zc3N0dGRsbHxwdO9Xq91dXViJifn29iNDhc5VNMFGV2dnZpaWliYmJtbW3gVF3Xo6OjVVXt7e01MRoczot6gBQZBUiRUYAUGQVIsVNPiTY2NqampgYO7uzsNDIMHE9GKdH29vby8nLTU8CJyCglGhsbm56eHjjY7Xbn5uYamQeOIaOUaHh4uN1uDxys67qRYeB4tpgAUmQUIEVGAVJkFCBFRilLq3Xgntzd3d3d3b39+6EhO6KUyE94omhVVUWEu5SSWY0CpMgoQIqMAqTIKECKjAKkyChAiowCpMgoQIqMAqTIKECKjAKkyChAiowCpMgoQIqMAqTIKECKjAKkyChAiowCpHhGGEW7fHm76RHgLjzSjqJVVUSEm5SSeVEPkCKjACkyCpAiowApMgqQIqMAKTIKkCKjACkyCpAiowApMgqQIqMAKTIKkCKjACkyCpAiowApMgqQIqMAKZ7FRNE+/7zpCeBuPIsJIMWLeoAUGQVIkVGAFBm9yNbX1zudzo0bN+481ev1Op1Op9M5+6ny6jqefjp+/LHpOSLi4l5k/oU+F9fMzExETExM3Hlqa2srIqqqOvOh/gNfftmP6H/7bdNz9Pv9i3uROTlveKJhX3wRX38dVRUzM3H//QdO3boV167FfffFm282NBycgIzSsM8+i5WViIjffouFhQOnfv013n47HnxwP6M3b8b16xERv/wSEdHpxCOPRES88ko88cSZzgz/JKOU4r334qWX4vHHj/yCn3+OmzcjIm7dioio6/3V6wsvnMl8cARbTMTi4mKV0GrtVVXc26+rV/8e488/Y3Iyjvk4yIsvxtZWbG3Fhx9GRHz66f4f6/oe//WqilZrL/N/X1xcPPVvD8WzGr34NjY2pqamBg7u7Ow0MsxRXn01Pv44Njfjgw/iypUDp87F5+zOxUXmtDS9x8Upur2JfIwSNpFfe60f0V9Y6F+92o/oP/xwv9fbP7W93Y/oX7o0+Fe++qof0f/uuzOe9HDn4iJzqqxGL76xsbHp6emBg91ud25urpF5jjI7G598Et98EzMz8dFHx33lM88Ut0Q9LxeZ0yCjF9/w8HC73R44WNd1I8McY2goVlfjqafi+vV4+eV47rmmB/o3zstF5jTYYqIgTz4Zb7wREfH66/H7701PAycjo5Sl04lHH40ffoh33ml6FDgZGaUsDzwQ778fEfHuu/H9901PAycgoxTn+eej3Y4//og73kEEJZLRi6zVOvL7OzRU9O7itWvx0EPR7TY9xwmc34vMf8VDRGjY5GSsrMTCQrz11oHjKysxORkRcenS/qc/oUxWozSsqiIi7ly3XbkSzz4bcU4+xcT/mdUoRbsdWTcpJbMaBUiRUYAUGQVIkVGAFBkFSJFRgBQZBUiRUYAUGQVIkVGAFBkFSJFRgBQZBUiRUYAUGQVIkVGAFBkFSJFRgBRPLqRoly//FBERjzU8BxzNs5goWlVVEeEupWRe1AOkyChAiowCpMgoQIqMAqTIKECKjAKkyChAiowCpMgoQIqMAqTIKECKjAKkyChAiowCpMgoQIqMAqTIKECKjAKkeKQdRdvZ2Wl6BLgLj7QDSLEapSzr6+ubm5sjIyPj4+MDp3q93urqakTMz883MRoczmqUsszOzi4tLU1MTKytrQ2cqut6dHS0qqq9vb0mRoPD2WICSJFRgBQZBUiRUYAUO/WUaGNjY2pqauCg95BSJhmlRNvb28vLy01PAScio5RobGxsenp64GC3252bm2tkHjiGjFKi4eHhdrs9cLCu60aGgePZYgJIkVGAFBkFSJFRgBQZpSyt1pH35NCQHVFK5Cc8AaRYjQKkyChAiowCpMgoQIqMAqTIKEDKX9n2SNNXZ2FUAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, - "execution_count": 4, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "m = Molecule(smiles='[NH4+]')\n", - "m2 = copy(m.rdkit_molecule)\n", - "AllChem.Compute2DCoords(m2)\n", - "m2" + "display(m)" ] }, { @@ -153,19 +147,16 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "m = Molecule(MALONATE_PDB)\n", - "m2 = copy(m.rdkit_molecule)\n", - "AllChem.Compute2DCoords(m2)\n", - "m2" + "display(m)" ] }, { @@ -185,19 +176,16 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, - "execution_count": 6, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "m = Molecule(smiles='O=C([O-])CC(O)=O')\n", - "m2 = copy(m.rdkit_molecule)\n", - "AllChem.Compute2DCoords(m2)\n", - "m2" + "display(m)" ] }, { @@ -224,19 +212,16 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deXSTZb4H8O+bpUmzdCVJFyi0gCzFgpRVEJgBPQ6MI+hwBVRQBkYuzOiM545XZvAeriJX78w56kVQFjccpiqKjiwubLI6FEqppWgr2NK0SduUNm3WNst7/3jTNOlGad60WX6f08N53jdP3+cJh/Pj2d7nYViWBSGEkL4SDHQFCCEkvFEYJYSQgFAYJYSQgFAYJYSQgIgGugKEBIxlYTSitRVxcYiNHejakKhDYZSEM6MRp07hyhXY7Z47Gg0mT8Ydd0BAPS3STxha8ETCVUkJ/vlPOBxdfDR4MJYsgVze73Ui0Yj+xybhqawMn3zSdQwFUFWF99/v9lNCeEVhlIShlhZ8/jl67kjV1uLEif6qEIlqFEZJGCoshMUCACxb3ti46eTJ9k/0+q35+Z6L/Hy0tg5E/Uh0oTBKwlBpqSfBMJVNTdsvXPB+UlxXl3f5sufC4UB5eb9XjkQdCqMkDN24wX9OQvqKFjyRMOR2+14Z7fbNp05x6UK93i+ny9VvlSJRi8IoCUPx8Z6xUQAAwzDmtjFQu9PplzMhoT/rRaIThVEShrKyoNN5r+Ilks1z53Lp3UVFOwoKPB8wDIYN6/fKkahDY6MkDOXmQii8ebaxY6FUBr82JNpRGCVhKCEBs2dzSYZh3Cz7t7NnP7lyxS9PbCzuuWcA6kaiD70MSsITy+Krr3DuHIALOt3kHTsmpqYWPPGE51OZDMuWIT19IGtIogaNjZLwxDC4916IxTh9us5iAaDm3qBnGIwbh3nzEBc3wDUkUYPCKAlnSUlg2VqzGYBGoQCAMWPwwAMDXCsSZWhslIQziwUM49cajY8f4CqR6ENhlIQziwUAF0Y1XBilzfFIv6MwSsKZ2Qyg1rc1ynXtCelHFEZJOLNYAPiNjVJrlPQ7CqMknPl06tXUqScDhMIoCWc+nXoNderJAKEwSsIWy8Jmc7PsDauVAQbJZADA/UlIP6IwSsKW1QqWvWG1Ot3uJJlMLBRCKu3Vu/aE8IrCKAlb1KMnoYHCKAlbNE1PQgOFURK2aJqehAYKoyQ0sCzs9g6ng9wEdepJaKCtSciAYllcuYKCAmi1cDrBMNBokJODSZMgFt/kd6k1SkIDhVEycKxW7N2Lior2OyyLmhrU1CA/Hw89hJSUnn7d94V6GhslA4c69WSAtLZi926/GOrLaMR776G+vqcn+EwxUWuUDCBqjZIBcvQoamt7ymC349NPsWoVGKbrDH0YG7XZcOkSrl1DYyMEAqhUGD0a2dm02pQEgsIoGQgWC9rO7yxvbNxTXLxh1izuslCvP6vVrpsyBQB0Ovz4I267reOvOxzIz+eisN/YqKjHf8/FxTh0CHZ7+536enz/PU6cwIMPIi2Njy9GohF16slAKCuDy8UlK5uatl+44P2kuK4u7/Ll9pynT8NggO+JYfX1ePNNHDkCtxss6xdG//53VFV1XWJ+Pvbt84uhXg0NePddaLUBficStag1GllcLrzxBs6cgcuF3Fw8+SRiYwe6Tl0xGHqbU6vFtm2IiYFGg7Q0qFQ4fpwbFQXQ3NpqczgUMTHymBgAsFjw/vtYuRIajd9D9Hp89VVPpTgc2LsX69ZBIrnl70KiHoXRyLJwIc6dw6pVkMmwZQvy8nD+PLZtQ0kJ/vhHjBkz0PVr43T6Xhnt9s2nTnHpQr0ewKaTJ4+Vl09JT5+anj4lPT09Lg5abecGo19TlNPaik8+wcKFYBjYbABgt+PUKW5Fak8DCCYT8vNx113B+LokslEYjSDff4+DB1FV5Rnme/ppqNU4fRr33YfZszF48EDXz4dS6XvFMIy5tZVL251OAEd/+umbiorj5eXczVSlMjc1NTctLTc1dWZGRmJbE9vvTVAvgwE7d3ZZLDeA4A2j3ACCJ4wCKC6mMEr6gMJoBDl0CFOmtE+VyGSYPx+HDuGvfx3QanVl6FDfq3iJZPPcuVx6d1HRjoKCz5YsOa/Tna6sLNDp/lVVpTeZDphMB8rKAAgFglHJyVxItTgcaJumb25pcbndTS0tbpZtstvdLGu021mg0WZjAaPd7mbZjJ4PvDMY4HTeZJ6KkE7oX0wEKSnBuHF+dzSabqdcBtaQIVCrUVfX3efxUum8zMx5WVkAWJb9saHhXFVVfnV1fnX1pZqaKwbDFYPh/aIiLvPnpaXMxo29KXbPgw92HkDw09JCYZTcKvoXE0GGD8euXX53jhzBkiUDVJseMQwWLMC774JlmQ7LQr2T8gyDrCwAjFZ7W3LybcnJj44fD8DpdpfW15/Rak9XVn559WqjzeZ0uwEoYmLEQqEyJkYkEMRJJEKBIF4iETBMglTKMEyiVMowjEwk6jyA0E4ggFQa7K9OIg/D+i4lIWGtshK33YZt27ByJQDk5WHlSly9ivT0ga5ZNy5dwv793W5HMmkS5s8Hw8Dtxo0b0Olw/jyqq32zrDt4cNv586/ee+9T06b1psATFRWP7Nunffpp7pIbQDjN/XUBSEvD6tV9/jYkalFrNIJkZGDfPqxciWefhVAIkQiHDyM9HXZ7iDayJkxAUhK++AI1NX73lUr8/OeYMMFzyb1upFIhKQlvv+2bkZupT/WfsAKAhATExkIigUAAiQQ6HZqaelUfQm4dhdHIMn8+9HqUl0MkQkYGqqtx332or8e33w50zbqRkYEnnoBOh8pKmM2QSpGaisxMCLp6MWTIEAwe7Dva6/cmqFdiIn73O78nNDTgzTfhcHQcQPClUmHixAC/DYlO1KmPaHY7MjNRU4PjxzFnzkDXhg8GA3btQtvg5ujXXy+tr7+ybt0YlcqTQSDA8uUdVgIAwA8/YO/ebgcQFAo89hiSk4NUaxLZ6GXQiCaVYu1aAHj55YGuCk9UKjz8sPf4z47rRmNisHhxFzEUwOjRWLECSUldfJSZiVWrKIaSPqPWaKRraMCwYTCZcPEi7rijHwosLy/fs2fPhg0buMvCwsKzZ8+uW7eOzzKMRrz2WqvLJX3hBZFQ2LJhA8MwyMnBnDlITOzpF91ulJV13OFpyBA+60aiD7VGI11SElatAoC//a1/CqysrNy+fbv3sri4OC8vj+cyGAZAncXCAmq5nGEYKBRYtOgmMRSAQIDRo7FgAR55BMuW4e67KYaSwFEYjQJPP42YGHz4Ia5dG+iq8KR/NmyuqcH58zh+HP/6F65fB/XbSDdopj4KDB6MpUvx3nt49VVs2dIPBRqNxs2bN3PpwsJC/gswm+E9PiQYh9lptfjyS+h0fjcTEnD33Rg7ls+CSESg1mh0ePZZCAR4++1b2KEuAAzDmNvYu9ziM0BcazRIh9lduoR33+0YQwEYjdi7F4cP81YQiRQURqMDNyBotfZPazQ+Pn5zm8WLF/NfgE+nnufD7K5fx+ef93TO89mzOH+en7JIpKAwGjX+8hcA2LqV6xGHN4sFgIvNGa9ZPCRuBMBTGGVZHDzIjYGWNzZuOnnS+0mhXr81P99zcfSoZydTQgBQGI0iU6dixgw0NHTcvoRvPb0pxBeLBcD3hhVFtR/FSxcCPI2NXr/uHfTo6WiTlhZ89x0PxZFIQWE0ijjXr/92zpx733vP4XAEr5RZs2Zptdq8vLwnnnji2LFjy5cvP336NM9leM4EVQDQyM0AT63R7k57DiQniQIURqOIcP7839bXf3XpEv8LOTs5f/78jh07Ll26FJSnWywA6ixyAGq5BeApjDY3+15xO5NyP/tLS/1ymkw8FEciBYXRKMIwzJ/+9CcAL730kruHWRQ+xMbGArAFaQzRM8UkB6BR8BdG/Tds5nYm5X467kxK59oTHxRGo8vSpUuHDh36/fffHzx4MKgFcWE0KKudWBZWK8ui3ipjwKpk/IVR7/4mANqONuF+Fmdn95CTRDkKo9FFLBb/4Q9/APDiiy8GtSCpVIogtUatVrDsDZvM6RYkyexioRtSKT/Nw1Gj0Mv5sdGjeSiORAoKo1Fn9erVgwYNOnfu3JkzZ4JXShA79T49ej4HRgHExXl3bu5pvUF6OoYP56dEEhEojEYduVy+du1aAC8Hc/e8IHbqO0/T8/gm6D33cDvmzRo69C+zZk3bteuDy5cBLB8/3nPWiFSKhQt722gl0YHCaDR68skn5XL5gQMHLnvXQvIt2K1R/qfpOVIpVqzgzlw5ef36uaoq7/l3AJCQgBUrMGgQb8WRiEBhNBolJyc//vjjLMv+NWhH2AdlbNTtRmkp8vPRYZqe37ahUsmNtJ6rqgIwNT0dLIvERMybh7VrkZLCZ1kkIlAYjUbPPffc/PnzxWJxXl7e9evXg1EE/63RkhL83//hgw+4s5j8WqMlJdizBzdu8FNQUxMslhtWa3ljozwmZoxKBaEQa9dixgyIxfwUQSILhdGo8+GHH27atGnZsmWLFi1yOBwrV6789NNPT58+XVpa2uy//jwQfI6Nut34/HN8/LHv6Z5+YRTA1avYvh0//MBDcVVVAM5VV7PA5LQ0kUCAlJQOS0oJ8UX/OKJLdXW1d35p2rRpOp3u2LFjx44d82aQSCRJSUmJiYlpaWmpqam+CS6dkZEh6kVM4bNTv38/Or0N9XBO8ViVYcaQyvZbDgf27sXSpRgxIqDiqqsB5FdXA5iSng4A3J+EdIPCaBRxu93Lly9vaGi49957V69ezTDM/v37169fr9VqjUZjXV2dXq83m816vV6v11+5cqXLhwgEApVKpVKp1Gp1SkqKWq3mEtyd1NRUlUollUp569QXF3eOoQDmDKuYM6yi8zfEp59i3TrvmXe3rKkJZWVoGxilMEp6g8JoFHnllVeOHTumUqneeecdbl1kQkLCK6+8Mnny5DFjxhw4cCAhIcFms9XV1dXU1NTV1RkMBr1ebzAYuAR3x2Aw1NbW1tbW9lCQUqlMTk4GUF5evnbtWrVarVKpUlNTuURKSkp8fHyvaux24+jR3n49lgXDwGrFmTO4++7e/pZXYyO++gqlpQBYlj2v0wGYOngwAKSl3fLTSDShMBotSkpKuNM633rrrRSf6eb169dfvnzZbrdzXfXY2NihQ4cO7fKM4jaNjY06na6xsVGv13MJ37RWqzWZTCaTSSQSmc3mN954o/MTJBIJF081Gs3ttz8F3K3RQKWCRgMuwc3roLzcdzy0S1aHeMnHv/58aV77fH1BAbKzoVRCoejtJP7168jLQ0sLd3W1oeGG1ZqqVA6OiwOAo0exeDG9R0+6Q2E0KrS0tDz88MN2u33NmjX33Xef9/6RI0dee+01kUi0Z88eRa8XsXPjpD1kMBqNr7322saNG2fPnr148WKDwcCNGHgTZrO5qqqqqqoKQEPDo99+2/EJDAO1GqpYjZpZnqIw35Z8Y9ntxTsKcp+cem5IfDOA72o1Z7VDRiQ1lN1IrmyKf+viHT/LrMhKbOS+LXbu9DxIKoVS6fmzcyI+HgIBjEbfGIq2gdFpXFMUQGkpvvgCv/xlL/9+umYyobAQFRUwmSCRQKNBdjaysgJ6JgkNFEajwp///OeioqLhw4f7LhQ1Go0rV65kWXbjxo1TpkzhsbiEhITKykoAv/71r7s8od5ms3kHCpqbJy9YAIMBBgP0etTVedK1taiFAlAAmJBSc+cQ7d/O3vljQ/JnSz4AUFqf/FFJ9vM/O66IaRUJ3EpJa4tTuDV/cqrSrJZbVDJLisIcL22B3Y6eVwvIZHA64bvGvsP8EqegABMn9rF3z7I4exbffAPfbaKqq3HxIjIzsWgRlMq+PJaEDAqjke/kyZOvvvpq5ybnmjVrtFrtjBkznn32Wd4LPXfuHIDuonNsbGxGRkZGRkZ3v+5ywWCAIe9ITaG+1qKIFTkAZMQ3ndUO+eyH0QtHexY2zcyovCNF//GVsf+WXVJSp/rdofm+D5GIXFw81SgsKplFo7Bo5OYh8UfiJbUpCoVKLlfJZEKrtYvKdw6jAD76CEOHIjbWM1zgTdx06ODLL+E9gKSD8nK89RZ+8xuKpGGNwmiEMxqNjz76qNvt3rhx49SpU733d+/e/eGHHyoUinfffVfI96ifyWT64YcfJBLJ+PHj+/YEoRApKUjJYW5v/om7c/haVlKs7U8zjv7+0C/mZf3kzSmPcXy+NI9LrJl0ocasMFjldRa53qQwt8ZUNcdVNcf5Pnnq4A3nqjyngzCAWqFQyWRquZwLrGq5XCWTXdTrBQyTqlDYnU6pd3VXU1O3Z4f0MHSg13cbQ72P/eQTrFhB7+mHLwqjEe6r//7vysrK6dOnr1+/3ntTq9Vy2+Vt2bJlRICrLLty/vx5l8s1adIkiUQS0IOGDYP/ASTLbi/eXTT+uWM/u3OItmPeBOMbvzwItE3ZAzaHyGCV600Kg1VusMj0ZmWdRe5yD5KLM+ssljqLxWCx1JrNtZ3O+JOJxQ6Xa+zWrQCkIlFibGyaUpmqUHSZSFEoBDcdOgDKGxv3FBdvmDWLuyzU689qteu41vr167h6FSNH9vWviQwwCqMRbc+eh159NWfu3Jjt271r5rnVo42NjQsXLnzssceCUWx+fj4A38ZvH2VmIj6+w2T9GwsOjH/z36UiZ8fMbdETCQmIiYHNFms2Z8Q3ZcR3mOufBkzjUi6322C1GiyWGrO5louqFktJXd2BsjK5WJwYG2uwWu1Op95k0nd/aohEJFLJZCkKhUahUMlkGoVCI5er5HJNWwtXJZMJBQLujDxvGOXOyFvnHfQoLqYwGr4ojEauqir8/vcAxixb5rs/5ssvv/zNN9+kpaXtCtoRoVwY5WHaSiDA3LnYt8/3Xmai8b9mn3j2yLxZQ/13A+BiqEyG3/7Ws/ze6YTNBrsdJhNMps4JocWSolCkKBS3azTeKFxcW3ugrCwzMbF47VoARru9xmw2WCx1FkuN2WywWussFr3JxMVfvdlsammpam6u6v49Wm7o4B8PPtjTN9Xp+vhXREIAhdEI5XZj+XI0NuL++8FtlAkAKCws3LhxI8MwO3fu5FbIBwNvYRTA7bfjp586vMg0JK4pVWFqdXUa0hUIsGhR+ytMIpFnjLK7Mz/cbpjN2LkTZrN3aDJWLAbgPXwpQSpNkEpHd785XovTecNma7TZ9GazzmTqnDBYLA6XS8gw3Bl53G8V6vV+TwnGxqykv1AYjVB//SuOH4daje3b22/abMP+8pd5gwcPX7Bg/vz53f9yQKqqqqqrq5OSkngbdb3vPjDM3SgsHO75LtvOT65qjnv/gU/9sonFeOCBW3uhXiBAXBzmzcNnn3nvcXNKtg5n2CmV+MUvYLV6GrM2G8xmmEyw2SRmc5pSmaZUZqvVXRbicrsb7faSujrujDzuZscz8vr89ioJARRGI9Hly9i4EQyDt9+GRtN+/z//M/GLL/ZPnNgSzH3vvU3Rns7huCUCAX71KwwfjsOHuXFSv63vOSNG4N570bf29fjxKC9HURF3FcuFUYejPUNMDJYs6XbRaA9DBw0NqK8XCgSDZDK0nZHH/dLuoqIdBQXtD6HX9sMZhdGI09KCZctgt2PdOixY0H7/8GG8/jrEYsGbb3L7hgRJzytG+y47G2PG4KWX4HD47ZI3fTrGj/f736IP7r8fCgXOngXLdujUIzERixcjNbXb3+1h6IBlsW0b6utvXoG+rgwjoYD2G404zzyD4mKMHo3//d/2m/X1WLECLIsXXsDkyUEtn7dp+s7cbjgcrS6h0SYRCdyJsXYwDO6+O9AYCoBhMG8e1qwBIBWJGMDudLIsCwBr1/YUQ2/62HvuaUt23za/7TYMG9bHIkgIoDAaWQ4fxpYtEInw3nt+w21r10Kvx8yZ+I//CGr5brf74sWLACZNmsT/09tOYWLBqOUWAcNCLudz1bpaDaFQwDAxIpGbZVtdLh6eOXIk5swBMGvoUO3TT3tvt5+Rp1Jh4UIeCiIDh8JoBDEa8ZvfgGXx/PPw7VO//Tb27kV8PN5/P9jbFJWUlDQ3N2dlZam7mW8JSFAPs+OIROgwy+TstED1Vs2ejfvv547J62jcOKxciWCOsZB+QGOjEWTNGmi1mDkTzzzTfrO8HH/8IwC8/no/9ByD2KOH3wn1nsPseA+jYjFaWmJFoibA5nAkSKU8hFEAEyZgzBhcvoyKClitnndds7N5GI4gIYDCaAT5wx9QWop33mlvcrrdePxxNDfjgQfwyCP9UIVgzS9xzGa0tUb5P6Gew2266jvL5DtlHwiJBLm5yM3l52kklFCnPoJMm4aLF/0WTr74Ik6cQHp6+/6bQdYfrVGLAkHq1BuNsNnQoVN/5ozvVqSEdEat0cjiO99y8SJeeAEMg507kZTUD4VbrdaSkhKxWDxhwoSgFBDUsdHSUuzbh9ZWsKzf0tGCAly7hmXLun0VikQ9ao1Grl274HDgqafwi1/0T4EXLlxwOp05OTnBWpcavLHRigp89JFn82aGWZyd/dvc3ATvpJDRiN270f3uJCTKUWs0/LlceOMNnDkDlwu5uXjySc/M79atmDIFS5b0W0WC26OH39iopzXKy9ioy4V//hNut/fGszNndlH0oUN46CEeiiMRh1qj4W/hQjz/PDIzkZODLVswfbpnVoRh8NhjXa+zCY7gzi/B0xoVCv5tUtqEFMVlgKfW6JUrMBq5ZHlj46aTJ72fFOr1W72bLv/wAxoaeCiORBwKo2Hu++9x8CAuXcLmzdiwAWVluHq1w1bH/YbPjZ26ZLEAKNSXXdAVqWStAE9h9McfvUluV1DvJbcraJc5CfGiMBrmDh3ClCntu2bIZJg/H4cO9X9FampqKisr4+PjR40aFZQCWBZWK8uy9VYrA6i4AMpLGL1xo7c5qTVKukJjo2GupATjxvnd0WhQVdX/FeF69JMnTxYIgvN/s9UKlr1hsznd7qTY2BihEFIpPy9lce/Ot+lpV1D/nIRwqDUa5oYPx9GjfneOHMHo0f1fkaDPL3mm6c0ANNzMEl/T9ImJvlfcrqDcT8ddQRMS+CmRRBYKo2Hu0Ueh1+Pttz2XeXmoqMCqVf1fkeeee+7s2bOPP/54sArwTNNbAKi5AMrXK0zeE1ZYFm27gnI/i7Ozu85JiA8Ko2EuIwP79uHPf4ZajdRUPPMMDh/uzz2Ay8vLN23aBEAqlU6fPr1Zp9v6/PP46SeehxHLynDwIIBaiwWAhgujra389LLHjfM0bHveLGrYMHoFnnSJxkbD3/z50OtRXg6RCBkZ/Vx4ZWXl9u3bN2zYgJISnDpV/PXXeQUF67jolpSEO+/ExIkB7WXHsjhwABcvcld+nXq9Hrt346GHAl3UFRODBQvw0UfoYVdQLg8hXaHWaERgGGRl9X8MbbdvHz7+GLW1fjcbGnDgAPbsQdsBRH3x5ZfeGIoOnXoAFRX44APflfN9NGYMFiyAQND1rqBSKZYtQ/en2pEoR61REihjff3mbdu4dMepbQDXrmHvXixb1pc2aWUlvKvfAXQOowCuX8eFC+husarFgmvXcOMGWBZJSRg+HEpl1zknTUJaGo4cQXl5+02hENnZmDsXcXG3XHkSNSiMksDodAzLmltbjXZ7SV1dnETC3S7U689qteu46Hb1Kk6eRGYmnE7Pj8PRq7TB0KE0v7FRr2+/xeTJHcN0SwuOHEFhIXw3sWcY5OTgnnu6PokzLQ3Ll8Nkgl4PpxNSKdLT0faNCOkOhVESmJISbmr7REXFI6WlL86dyx14yb3/s87bSPzmG3zzTV+ez7K+8VFnMsE7Nur91GjEZ58hKwtpaRg0CAwDkwm7d3dxlhzLoqgI169j+fIO65zacefTEdJrFEZJAFwu1NT08Lnd6dSZTI02GwsY7XY3yzbZ7S6WbW5pcbrdppYWh9ttbm1tdbks3J8OR4vTaXU47E6nzem0ORx2p9PqcLS0ZQDAMMyj+/b9PDNzRkZGbmrqWJWKYRh89x2++w4ApFKkpqK+vqcNmYxG/OMfeOIJbpNmQgJE/4xIAJqbGZ/pHaPdvr+0tKq5efOpU9wg6aWamum7dvFbJsuyVxsarjY0cM3eZJlsSnr6lPT0qenpU9LTkwHv4GZ5Y+Oe4uINs2Zxl37jDPX1+Ne/0HknJ0JuHYVREhDfqW2GYUYmJ49MTva+/xMvkWQlJiZIpQzDJEqlDMMkSKUChomXSIQCQZxEIhIIlDExIoFAKZGIBQJFTEyMUCiPiZEIhTKxWCoSxYrFsSIRl3C4XHH/8z8ysfirRx8t0OkK9PrTlZXljY1f/PjjF22bhqQqlbmpqTMzMmZkZFgdju0XLnjDaMdxhgsXKIwSXlAYJQGIi4NQ6J3D4QZJufTuoqIdBQVjVKprTz3FV2nVzc0AUhSKmRkZM9tWd+lMJi6kFuh0Z7Ravcl0wGQ6UFYG4E8zZnT9IG5EtakJRiO930kCR2GUBEAoRGYmrl69eU6RCEOGgGE8S+W5jaWlUs8dhoFEAoHA82dMDIRCxMTAaMTHH3uXhdZ2Xu0EpCmVaaNG3TdqFACX211iMORXV5+rqsqvrh4zaFDX+4x456yamymMksBRGCWBmT6dC6Pdvv/DWbAAfTigKTUVc+bg2DHuyu8VJq8RI5CdjZoa6HRCnS5Ho8nRaFZNnAjgREUFt88Il7HjPiMAxOJbrhIhnVAYJYHJysIdd6CwsPP7P8vHj/dcjBgBb/pW3XUXWBbHj6PLtfc5OfjVr/wOlNbr8c47PYwztP+uQIDk5D7WihAf9DIoCdiCBR33PPWVlYXFiwN6rX7WLO54d7+19wkJWLYMixb5bTkqECA9HWPH9uqxWVmIiel7rQhpQ61REjChEA8+iFGjcOoU6ura7ycm4s47kZsbUAzlMAw6tEanTcPIkV1nnjkTJSVwu3saZ2AYtM3gExIgCqOEJ+PGYdw4GI2eF9gTE/nsMntOqLegN3s2q9WYNw9ff93TOMNdd2HIEN6qR6IbhVHCq4SEoMx9+2x9r+7NKUzTp0MgwOHDfi/UcwQCzJ5NTUHq1RIAAALBSURBVFHCIwqjJBxwYdR3bPSmW99PnYoRI/Dttygr87wYKpdj5EhMnw61OsjVJdGFwigJB51PEOnNQUzJyfjlLwHA4QDL0oQSCRIKoyTkuVxoaWl1uYw2m0ggSIyNBcN4FvD3Eq0PJcFEC55IyGtrirKAWi4XMAzkch5m/wnhCYVREvJ8pulvoUdPSH+hMEpCXvBOqCeEDxRGScjrPE1PYZSEEgqjJOR1nqa/6WonQvoRhVES8mhslIQ2CqMk5NHYKAltFEZJyPN9oZ5aoyT0UBglIc9sRoet72lslIQSCqMk5FGnnoQ2CqMktLEsbDaWZeutVgZQyWQAwP1JSGigd+pJCLt2DV9/Dbf7hs3mdLuTYmPFQiGEQjQ3IylpoCtHiAe1RkmoOnECf/876urAsn49epcL27fjp58GuHqEtGFYlh3oOhDSycWL2L/fe3XDav34yhWpSLTCe7yoWIzVq6FSDUz1CPFBrVESemw2fP01lyxvbNx08mSyTPbEpEkrJkwo1Ou35ucDgMOBQ4cGspKEtKEwSkLPpUtoaeGSlU1N2y9c8H5SXFeXd/my56Kiwu8EPUIGCIVREnrKy3ubk0ZISQigmXoSeoxGvyu7ffOpU1y6UK/3y9nU1G+VIqQ7FEZJ6BEKfa8YhjG3tnJpu9Ppl1NA3Sky8CiMktCTnIyaGu9VvESyee5cLr27qGhHQYFfTkIGGv1nTkLPqFG9yiYQYOTIIFeFkJujMEpCz9ixSEzkkj0dXJeTA6WyXypESE9o+T0JSVot3nsPLle3GRITsXr1rR2zTEhwUGuUhKQhQ7B0KaTSrj9Vq7F8OcVQEiKoNUpCmNmMU6dw+TKsVs+d5GTk5mLKlA6z+YQMIAqjJOSxLJqbYbMhLo62yCMhiMIoIYQEhMZGCSEkIBRGCSEkIBRGCSEkIBRGCSEkIP8PSrlATTVYG1kAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, - "execution_count": 7, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "m = Molecule(TRIMETHYLGLYCINE_PDB)\n", - "m2 = copy(m.rdkit_molecule)\n", - "AllChem.Compute2DCoords(m2)\n", - "m2" + "display(m)" ] }, { @@ -256,19 +241,16 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVxTV94/8M9NAlkh7IsoiNiqoKhFwW2sU2vr2HFanadVp8qM1Zk6o+38dDptnVefzq+/sc7098w8Yze3sZudEfu01drFlbZWUAuVQQTcBcoWTJQEk5BAlvv8cUNIAkSEGwjJ9/3y1d7cXO45+rKfnnPPuecwLMuCEEJIXwkGuwKEEDK0UYwSQki/UIwSQki/UIwSQki/iAa7AoTcDsvi1i2YTAgPh0w22LUhxBPFKPFjBgMKClBRgdZWx5noaGRlITsbQuGg1oyQTgxNeCJ+6to1fPQRzOZuvoqLw7JliIgY8DoR0g16Nkr8Ul0d8vK6z1AAajV274bJNLB1IqR7FKPE/9hs2L8fNhsA9NRb0mpx9OhAVoqQnlCMEv9TWQmtljus1uk2nTjh/KZUpXqzuNjx4dw56PUDXztCPFCMEv9z+bLzsLalZceZM86P5Wp1XkWF44PdjitXBrhqhHRFMUr8z82b/F9JiM/QhCfif7inoh10ZvPmggLuuFSlcrvSbh+wShHSE4pR4n8iIqDROD8xDGNob+eOzVar25VK5UDWi5BuUYwS/5Oa6vrQUykWb547lzveXVa2s6Sk88pRowa4aoR0Rc9Gif+ZNAlicY/fOqdAjRyJuLiBqREhXlBrlPgfqRQPPIDPPgPAMAyAm62tH50/LxGJGIYBwwBASAgWLBjcahLCoZdBib86cQJffw0ALHv+xo2MN98cGxNzYd06AAgNxZIl1KMnfoJao8RfzZ6NpCQcPQq1Ol4uB3DdaAQAgQBPPomoqEGuHiEd6Nko8WNpaVizBgJBlFQaIhTqTKZ2mw12O8LDB7tmhHSiGCX+jWEgkzEMEyOTsYCGa5By/yTEP1CMEr8nlwNw69dTjBJ/QjFK/B4XowoFADXFKPE/FKPE7ykUAOK41qjBAFCMEv9CMUr8XtdOPRemhPgHilHi9+RydLRGqVNP/BDFKPF7FKPEv1GMEr/nMsREz0aJH6IYJX5PoQA9GyV+jGKU+D3q1BP/RjFK/F5HjDKAxmi0syxaW3vcMZSQAUcxSvyeUAiJJEQojJRKrXZ7s8kELkl7z2JBx/r5hPCOVngiQ4FcDrM5Ti5vNpnURmOMTAajkWulenPzJk6fxuXLjn2Y5XLcdRemT6fFngm/qDVKhoI+DNYXFWHbNpSUdO5lbzTi7Fns2AGXje8J6T9qjRJe6XS4eRMsi8hIREfzdluXwXp1bwbrT5/G0aPdf2W34+uvYbPhhz/krXokuFGMEp5UVKCgAGp155nISMyYgawsx7Yf/eEyWH/7RZ7UauTn3+aGBQUYPRojRvS3YoRQp57wwGbDxx/j44/dMhSAVosvvsA//8nD8I7dDo85T0VFrruHuiks5K6v1mo3ufTfS1WqN4uLHR9Ylrr2hC8Uo6TfvvgCFRU9fltVhQ8/7Nf8pBMnUFICj2ejOh327MH+/bDZOq+029HQgPPnuU+1LS07zpxxflmuVue51rOqiobvCS+oU0/6p6oKpaUAqrXaf5WXvzB7Nne6VKU6VVe3NjsbAK5eRVkZJk3qy/0LChwb23m0RjnnzqG1FRkZaGpCYyMaG91S1Tu7HTdvIjGxL7UixAXFKOmf06e5f3NNP2eMck0/R4wC+PxzFBdDJEJICEQiSCSOA+5XT8d6PY4fdxbl9j6o09WruHqVO7TZ7ZUaTXFDQ1F9fXFDw/+ZNk1nNm8uKOC+LVWpPCtvsfD4J0GCFsUo6QebDdXVvb2ya4rdIbcF8Ds06vUljY0lKlVJY+PJujqtyeT86sKNGwzDGDp67mar1fEFyzpGvWhrPMIHilHSD7duuXaiuzb9Lmg0P96zJ0IiYRgmUiJhGCZCIhEwjFIsFgoE4WKxSCAICw0VCQRhYnGIQKAIDQ0VCuWhoWKhUBYSIhGJpCEhUpGIO+A69U0GQ2FtLRedhbW11Vqta40Sw8KyEhNnJSfPTE5utVjyyss3z53LfbW7rGxnSQkAR4YqlYiIGIA/JBLwKEYJb7o2/Vra2qrcY67/TBbLD95+2/kxWibLTkrKTkrKSUrKTkqKlsmcX31TU+PtRlOm8FsxErQoRkk/hIdX37r1r7NnuUeiSrH40fR0bmSJa/pNSki49tvfak0mFtCZzXaWbTGbbSx7q63Narfr29osdruhvb3dZjNy/7RY2qzWVovFbLWarFaTxWK2WlstlraOCwAwDJMWGXlfaurM5OSsxMT02FjGdV6qRILERNy4Ab2e8TJfNSYG06b5/M+HBAeKUdIPQmGtVOplZEkiEo2KjERkZN+LcD7HBABM/cc/zjQ07F60aDo3c975bWYmRo3CsGGIiQHDQK/H7t2zgboNG5w/mztxYu7EiQAQEYGf/Qwi+stP+EF/k0j/ZGRw//bW9AMwZw5SU2G1On5ZLL061mhgNrveZhg3ddQ5ysQVGhGBRx5xe1cqLAyrVyM/H6WlblOgGAaZmXjgAbj0/T3p9VCpYLVCIkFSEsTiO/jTIEGJYpT0z7BhuvZ2bmTp11OnfnbpEne6s+kHYPRozJ7dl1dCa2vxzjuuJ9xm4DtNn97NzcViPPQQ5szBtWu4eRMAIiORloawsB6La2xEfr7b3AOhEBkZmDuXxvSJFxSjpL+YkBCDUgmNBq6TipzS0vDoo318rT45GdnZcL7B2e0M/JQUb4NFcjkyM3tV1pkzOHSIe4u0k82Gc+dw+TKWLkVKyh3VnQQPilHSX0qlcvPHH6OyEgUFu48edUwqAhAVhRkzcM89/VqaZP58WK3497+5T54xOnIkliyBoN/vNF+4gC++6PFbsxl79uCXv0RMTH8LIoGIYpTwJCMDGRlgGNTWYsUKREQgKoqH2zIMFi7EmDE4cgTNzW4vMiUkIDeXh+Wj2tudGdrjK63cNT//eX/LIoGIliYh/eIcWTKbzadPn1br9ZBIMGoUPxnqdPfd+PGP4fFsNDSUhwwFUFHhWHaPZb2tZlJTg+vXeSiOBByK0aHPZsMbb2DZMjz2GF55BS5vQw6A2bNn19XVAdi0adOMGTO0Wm1hYaFPSvLd/qDXrjkObhvKzisJcUGd+qHvkUdQVITVqyGT4fXXkZeH775DSMgA1yI7OxtAUVGRrwrw3W717u9ZeVvNRKfjp0QSWChGhzhubKS+HsOGAcCGDYiLQ2HhwO+QMW3aNADFxcV2u13Q/zGfrqRSCARRUmmIUKgzmdqsVjEAq5WHWfTujdDuVzPp7kpCONSpH+IOHkR2tiNDAchkWLAABw8OfEXi4uJSUlL0ev3Fixd9UgDDQCplGCZGJmMBDbfB8h1ts9wT9z2jlGLx5rlzuV+Pdrxc4MDvA18SKChGh7jKSowf73YmPh719YNSF65fX+wyzZNnCgWASQlzpiStutEqBXjq1991F/9XkmBCMTrEpaXhyy/dzuTnY+xYAGBZvPuux8uUPpWTkwOfxqhcDsDO/v1Mwy6VfhzA0yhTerpzxTxvr7SOHUutUdItitEhbsUKqFRwLhyXl4eaGqxeDQBr12LlSmzcOGB18fkok2Ow3ghAbZQDPMWoUIiHH+bm8M9OSanbsOEvhYVPfvbZtebm3IkTC594AgAUCixYwENZJBBRjA5xycnYtw9/+APi4pCYiGefxbFjSEoCgNWrERqKV1/FoUMDU5esrCyRSFReXm7y0aQrx2C9AcB1owLgb7B+5Eg89hhCQwGAZT+srNxZUqJzNuQjIpCb6+1lfBLcKEaHvgULoFLh229RVITaWsya5Th/zz34z/8Ey2L1asfaHD4mk8nGjx9vsVhKS0t9UoCPWqOcMWPw619DLAbDmKxWAFJu0lhWFtasQWwsbwWRgEMxGhAYBqNGobER99zj3N8NAP7wB9x7Lxob8atfDUxFfNuvl8sBxCt8E6MAIiIglaJjnpOUm0o1cyatlUe8oxgNIFu24OxZrFzZucKmQIB33kF4OPbtw/vvD0AVfDvK5NIavW7wQYwCsFoBmCwWABIuRvl6kaGtDSUl+PhjvP8+9uzBV1/Rq6UBg2I0gGzfjhEjUFiIV17pPJmaii1bAOCpp+B9byI+DERr1PXZKO8xarEAcOvU87JI/tmz2LIFn3+OigpUVeHKFRQUYPt2fPzxQE6lID5CMRpAIiLw9ttgGPzxj65rdGLlSjz2GFpasHy521LwPpCenh4eHl5dXa1Wq/m/u0IBj2ejfA0xOVmt8OjU9z9Gv/kGBw50H5cVFXj77QFeBoHwjmI0sNx/P55+GlYrHn/cLWK4hurJk/iv//Jp+QKBICsrC8B3333H/907OvUMWI1RZmcZtLaCZXm7v1oNm83Osu1Wq4BhQoVCHu555QqOH/d2gUaDTz7hoSAyeChGA84rryAzE1ev4rnnOk9GRuKtt8AwePFF+CLgXPiwX88wCA0NEdojpWarXdBskoJlcewYDw8ZWRb5+di+HYDZamUBiUjkmIq/bRs8Fii5o9sePcodVmu1m06ccH5TqlK96ewxXL48AM9biO9QjAYcsRh79kAiwbZt+PzzzvPz5mHdOlgs9jVrfDWvE4DvRpkqK/Haa2hvh0e//vRpbN+Of/2rX5O6DhzAyZNcw9ZtfAlAczPefReNjT3+rNUKvR4aDaqqUFaGoiLk52P/fuTlYetW3LjBXeVtJVMAZWV9rzwZbLTCUyDKyMBLL+G557BqFc6dQ3y84/wrr2ivXl1+6VLac8+99tprPiqcW+qpqKiIZdnbbBfaS3Y7Pv8cLnNR4xXGizdirhvk6bEax6mrV7FjBxYvdrwIe0fKylxTzG18idPejr178aMfobUVej3MZphMMBig1zsOvLLZ7drbjiM1NNxxtYnfoBgNUM88gyNH8NVXePLJzkdvUmnNyy/nT5t26I035s+fv8A3bzcmJiYmJSU1NDRcuXLl7rvv5uGOn32Gs2ddT6ydWvxoeuVd0c1ul1ks+PBDLFuG0aN7e2e7HQYD8vNdz7mNLznp9fif/+n2Hmartdlk0ppMKoOhUa/veqAxGsPE4v1LlnhbyZSXparIIKEYDVACAd57D5mZOHAAb72FVau405MnT37ppZc2bty4cuXK8vLyuLg4XxSek5Ozb9++4uJiHmK0vNwjQwE8mnG++4vtduzfj7VrHdvQW60wmWA2Q693tCI9DozGzhEqluWWE/Xo1OvM5iaDQWM0qo3GJoNB09qqNhpVer2mtVVjNKoMBn1bm/ffAQOECoU2lvW2kqlE0us/EeJ3KEYD1/DheP11LF9+IS8vdM6ctLQ07vSzzz575MiR48ePP/nkk/v37/dFydnZ2VyMLl++vF83sts916/ygsvB1lZs3w6JpJfdbS4NmwyG60ajxmi8bjRWqtUAqrXaEf/935rW1rauW0a7E4tEsTJZgkIRr1DEymTxCkW8XB4rl8fL5QkKRaxcHiuTCQWCb2pquJVMuZ/aXVbWuYUq0LliLBmCKEYD2uOPf3DmzNItW6avWHHixAmRSARAIBC8//77mZmZn3zyyTvvvLNy5Urei+VtsL66Gi0t3i9ptYQs/eg/Pl2W17k0/a1b0OsBmCwiTatcpVdoWuUao0xlCFMb5Tb7/z2vuaQ2GtVGo8Zo7Ha2lCwkxGixGDuapZFS6bCwsESFotuDBIVC0P9HwBMm9PcOZPBQjAa4B//4x+R9+06fPr158+YXX3yROzl8+PBXX301Nzf3qaeemjVr1l18r0Y8ZcoUoVB49uzZtrY2cX9eSHeZBnTlZtTOkqync4pGKG8BOHc9/lTdiNFRzZdvRte2KN/69+S7opvzysc3GRSaVrnaKFfpFYb20K63zBl+o6i+mjtmAK4JGdfRcoyTy+NksrUHDzJA+W9+kxYVJenN9HuJBGFhjn96HKhUOHwY3lcyTUm5g+e5xP8wLI+zl4lfKigomDNnjkAgKCgo4IbROcuWLdu7d++MGTNOnDgh5GWquYsJEyZUVFR8++233PynO2WzQaOBJi+/qVR13aiQiizh4rYH3l/x8NhLnyzdC+DDyvRtZ6b+vx9+XaWNfK0o59mZJ6OkrfN257reRCyyxcqMCQpDvMIYKzPGK4zxcsMIZb5SfN21u9219Om7dn1bX5+fmzt31KjOs0olUlIglSIsDApF54FCcZs9mg4dgpfpX0olVq2iVfiGNGqNBr4f/OAH69ev/9vf/rZ8+fLS0tKwjv9it23bdurUqVOnTv35z39+4YUX+C00JyenoqKiuLi42xg1mUwajUalUqnV6lu3ptbUJGg00GigUkGtBnfMsgDu566flND0/+cdS1a2nKob8cnFsY+MdWz3NCu5dnKC6qPz6Y9lVOrbQt9YcDAxzBAnN3LpqZR0O/ijABSdn2Qy2GxwHybKGT782/r64oYGtxh97LE+PsGcPx/h4Th+HF0fs6amYtEiytChjmI0KLz88sv5+fllZWW///3vt2/fzp2MiIh46623HnzwwZdeemnevHl9azZ2S6fTJScnA/joo48EAoFGo1Gr1SqVynlgcBn8mT597+nTSzzuwDCIj0es1BDHaBIUhrujbwKIkpp+P/PLpw7+6P5RVc4r5aGWT5flAQgTt6/N7vKClpfudlgYlEoIBNDpsGOH6zvv2UlJAIpd53JmZfV9FIhhMHMmMjNRWoqaGuj1EIsRH4+MDLjGNBmyqFMfLM6fPz9lyhSTyfTpp58uXLjQeX7Dhg1///vfR48eXVpaqlAovNzBSavVNjY2arValUrlcaDVauvq6vR6PQCRSGTtYZhbLBbHxsYmJCTEx8dPmPBbYF58PGJjER8P7iA2FkIhcO0a/vlP7keOXRv17LF5pWt2zP/n8nExmhkj6radmfrVz9/r9u5YtcrR7+6l779HXp6zTXq1ufmu115LDAtr/N3vAGDMGDz6KPh+7kECBrVGg0V6evqmTZt+97vfrVq16ty5cwkJCdz5zZs3Hzt2bNy4cVzkmUwmtVrd1NSkVqu5frdGo3F2wLnj2/6vNywsLDo6uqamRqFQrFixIi4uLjY2NjExkTtISEhQKpW9qnRqKpRKj8H6bQ99PnH7ryWiLgHdMfETWVl3vFh9SgqefBJHjuDSJQBpkZExMplKr69raRmhVGLuXMpQ4gXFaBBZv379sWPHDh8+vHLlyoMHDzIMo9PpNm7cmJKS0tjYmJ2d7dHd7pZAIODSMC4uLiEhIS4ujjvgziQmJsbGxkokknPnzk2cODE1NXXr1q19r7FAgLlzsW+f67nUSN2L937zfP79s1O+d7uYy1CZDDNn9qWsyEgsXYqWFrz/PnPz5tSkpENXrhQ1NIxQKtHYSJuIEC8oRoMIwzC7du3KzMw8fPjwzp07p0+fvm7duoKO1xM5YrE4KioqMjJy2LBhiYmJrgfccXJysqgXc4C41U+kve9W92TCBFRVebzItH7a6Z1nsupbwivVsRlxms4vBAIsWuR4halvlEqMGYNTp7KTkg5duVLc0PAf6emor8fEiX2/Jwl0FKPBJSkpaevWrUuXLn3++efnzZtXUFBw3333rVu3LjY2lut3h4eH81KQ2WwGLzEKYOFCMMw8lJam7eBOCAXsnNSaf5TcU1ib3BmjISFYvJiHCZhJSQByXEeZaN0Q4hXFaNBZsmRJRUVFdnb24sWLQ0JC3nnnHW5UnV9ca1TCy6viAgF+8hOkpeHYMedzUre18gCMHo358xEdzUNxXIwOH84AZxobrXa76Pp1WK387CZCAhGtNxqM/vSnPx05csRqtf7sZz/zRYaCx069U0YGnn4aS5di+HB4xGhGBh5/nJ8MBaBUQqGIkkpHRUUZ29vPazSw2bB1K06e5HZqIsQDxWgwunnz5rvvvsswzDPPPOOjIvjs1DsJBBgzBjk58NjYjt9Je3o9N0+e69cX1deDYaDVIj8fW7eiqYnPskhAoBgNRq+++qrRaFy4cOH48eN9VAT/rVEnl22W+d/YzmzGe+9xU/F/kJKSM3x4mOuaADod3nvPuaA9IRx63BN0jEbjtm3bADz77LO+K4XPZ6MeuG2WFb7Zrf7oUedmJGumTFkzZYrnBWYzPvkEq1bd5j16EkyoNRp0du7ceePGjVmzZs3s2/zK3vF1a5Tr1Dtao3zF6K1bzplV3naga2jAtWv8lEgCAsVocLFYLFu2bAHwnOu+oT7gk2ejHJkMAkGU1BQitGtNknabEGZzN6t+9MGlS87HrLfZge7iRR6KI4GCYjS47Nmzp7a2dty4cT7aiMnJh516hoFUyjCIkbWyYDRGGcDTXkYaze2vudMrSRCgZ6NBhGXZv/71rwA2btwo6G6dTR75sFMPQC6H0RgvN6j0iutGRVK4HkYj+v/igHuT1tsOdDZbf8siAYRao0HEdvDgzpiYBydNWrp0qa/Lmjp16q9+9atJkyb55O4KBXwxWO8exNwOdNwvzx3oaIVQ4oJao0FE9Oc/Tz958vCWLXDdhN03li1btmzZMl/d3UeD9SNH4ptvnJ+87UA3ciQPxZFAQa3RoFFYiJMnERXl3GzZR6qrqzdt2uT8WFpa+uabb/JchlwOYGz0lokJY2+17QV4itGUlF6t5CQWIzOTh+JIoKAYDRqvvAIA69ahd2sz91ltbe2OHTucH8vLy/Py8nguQy4HIBLWlzVdqm2pA3iKUYbBQw9xE0K97UA3d+4dLAhNggDFaHC4cAEHD0Imw7p1g10VPigUAOLlcgDXuQDl60WmlBT85CcQCGanpNRt2OA8nTtxYuETTwDAjBmYOpWfskigoGejweEvf4HdjlWrBmb5YZ1Ot3nzZu64tLSU/wIcz0YVANRcjPL4ItOkSYiOxuHDaGx0Ox8RgXnzkJ7OW0EkUFCMBoH6euzdC6EQv/3twBTIMIxzFX2zy1ZxvHG8Vi8HcJ0riMcYBTBiBH75SzQ1oa4Oej1kMiQmIjmZXgAl3aIYDQJ/+xva2/H440hLG5gClUqlszW6e/funTt38lyAS6ee/9aoU0ICOnasIsQLitFA19yMXbsAgNvkMjCwLIA4uZwB1EajnWUFBgP278ecOYiM9PaDdjsuX8a1a9BqIRAgNhZjx2LEiAGqNglQFKOB7o03YDDgRz/C5MkDU6C3MW5e1Nbigw8AhAiFEVKp1mTSmkzRMhnOncOFC1i8GGPH9viDBw6gubnzzJUrOHUKqal4+GH0crNSQrqgfeoDWmsrRo6ERoPjx3HvvYNdGz5oNNi1C+3t3Kdxb7xx8caNyrVr051DZwIBcnORkuL5gxcv4sMPYbd3f1uFAr/4BW/r55MgQxOeAppWi5wcTJvm7xna2Ihvv0V+PgoLce1aj2EH4NNPnRmKjlEmteuDUbsdBw543qG5Gfv2ebutwYAPPqA35UnfUKc+oCUl4bPP4Iuxcr7U1uLQIc+dOcLCcN996Po+fl0d6utdT3Bznq57TBrVavH665BKIRZDIIBYjMZGbhulaq32X+XlL8yezV1YqlKdqqtbm50NABoN/v1vmhNK+oBao0HAF6vV8eLsWbz3Xje7G+n1OHAAX3zhWP3TbodGg7IyHDnicSHXGlXp9Z530OmgUqGmBlVVuHDBuZ/obVYR7VizmZA7Qq1RMkhqa/Hpp93sRseyjumZZ844hoPq6ly35LTa7Zdu3DhZV1dYW3v46lWRQLD+yJH1R44oQkNDhMKw0FCRQBAuFgsFAqVYLGCYCImEYZhIiYRhmPnep3w1NcFmg1DI8++UBDqKUTIYWNbZ2PTsaDc1OTraLIuqKgAsy15pbi6qry9uaChuaDjb1NTu/hBTwDB2ljW0twPQmkxeip2dkuJtFVG7HWYzN7efkN6jGA0sNhu2bcPJk7DZkJWFp5+GVIpXX0VlJdavx7hxg12/DnV1UKu5Q66j7YxRrqO9PDPzu8bGwtraksbGb+vrb7gsbi8UCNJjY7OGDctKTGy1WP7w5ZcLx4z5ZOnSW21tNru9pa3NzrItZrOdZXVmMwtoTSYW0JnNdpblWqaGjkEqz1VEAbjuA0pI71CMBpZHHkFREVavhkyG119HXh6++w4LF+LeezF8+GBXzsX333v/ftEHH3xdXe38mBgWlpWYyEXnrOTkyI4Flk7V1aFjiClcLAYQ6XXtpW9qarytIhobCxH9F0HuGP2lCSAXLuCLL1Bfj2HDAGDDBsTFobAQP/zhYNesC/dBoa4d7ftSUwFkJyXlJCVlJyUl9bBBiNsiT06xsXjkETAMuA6+2YyCgm4GsrqaMOGOfyOEUIwGlIMHkZ3tyFAAMhkWLMDBg/4Yo+6Nvq4d7Rdmz3Z28wEgNBTx8Rg2DLGx+Ppr5xv0bquTOK/86U8RH+9WXGQkdu2C3e7tDauwMHAznwi5QxSjAaSyEuPHu52Jj/eYaOkv3Nfr89bRHjECCxciJqZzdaWUFOTlcYP4YaGhspCQVovF2N4uDw2FXI6lSz0zFEBiIh58EIcOdV1FNHfiRAAICcGjj9KDUdI3NG80gKSl4csv3c7k5/f4gvnguvvu3s4rmjULsbFuK9TFxGDNGtx/PwQCMEyca7/+8cd7fAScnY3Fi7ufQhsVhV/8ghYoIX1GMRpAVqyASoW333Z8zMtDTQ1Wrx7UOvVALkdWFnforaM9bBjuuqub8yEhmDmTW8XO7X3QriPvriZMwNNP44EHkJaGqCjExGDcOCxahN/8pvNJCCF3jjr1ASQ5Gfv24Ykn8PzzEAohEuHYMSQlDXa1ejB3Lr7/Htev99jRlkiwaJG3lZJd1sDv7eLNUimmT8f06f2uPSGdKEYDy4IFUKlQXQ2RCMnJg10br0JDkZuLDz9ETU0330ZEYMkSxMR4u0PXxZv52pGJkDtBMRpwGAajRg12JXpHJkNuLs6fR0kJ6upgtYJhEB+PzExMmYKQkNv8uOtWIr5bA5+Q26EYJYOKYZCRgYwMsCza2hAaCkGvn9e7xKgPtxIh5HYoRol/YA3ybocAAAJgSURBVJg7XomqD89GCfEBGqknQ5ZCAY/WKD0bJYOBYpQMWVxrlJ6NksFGMUqGLOrUE/9AMUqGLJkMDBMtlYoEAq3JZLHZYDbTfkpk4FGMkiGLYSCTMQwTI5OxgIZbk5QapGTAUYySoYz69cQPUIySoYwG64kfoBglQxkN1hM/QDFKhjKXTj29yEQGC8UoGcpcX6unZ6NkkFCMkqFMoQDLuj0b1ekGuUok+FCMkqGsuRkM4/Zs9OJF7NuHW7cGuWIkmFCMkqGJZXH4MAoK4DFSz7IoL8eOHWhoGNwKkuDBsCw72HUg5M4VFOCrr7jDZpPp7dLS1IiIn6and14glWLNGvSwMzMhPKLWKBmCdDp88w13WK3Vbv3uu2dmzOAytFSlerO4GABMJhw9Ooh1JMGDYpQMQSUlznfna1tadpw54/ymXK3Oq6hwfDh/Hnr9wNeOBBuKUTIEVVX16jKW7X6jJ0J4RavfkyGopcX1k85s3lxQwB2XqlReriTEFyhGyRDkvl8TwzCG9nbu2OyxVX3vd3YipK8oRskQFB3t+tBTKRZvnjuXO95dVrazpMTtSkJ8jP5fTYagMWMcB96n64WEIDV1AKpDghzFKBmCJk/m3qYHwzAM0+Nl2dkIDR2wSpGgRdPvydB0+TL27vXWGo2Px6pVCAkZwDqRIEWtUTI03X03fvrTHlNy+HCsWEEZSgYGtUbJUKbToaAA58/DbHaciY/H1KmYPJnG6MmAoRglQx/LQqdDezvCwyGVDnZtSNChGCWEkH6hjg8hhPQLxSghhPQLxSghhPQLxSghhPTL/wJYcfZD+dQitAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, - "execution_count": 8, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "m = Molecule(smiles='C[N+](C)(C)CC(=O)[O-]')\n", - "m2 = copy(m.rdkit_molecule)\n", - "AllChem.Compute2DCoords(m2)\n", - "m2" + "display(m)" ] } ], diff --git a/offpele/examples/Parameterize.ipynb b/offpele/examples/Parameterize.ipynb deleted file mode 100644 index 2ff1273b..00000000 --- a/offpele/examples/Parameterize.ipynb +++ /dev/null @@ -1,237 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from offpele.topology import Molecule, RotamerLibrary\n", - "from offpele.template import Impact\n", - "from offpele.solvent import OBC2" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning: Unable to load toolkit 'OpenEye Toolkit'. The Open Force Field Toolkit does not require the OpenEye Toolkits, and can use RDKit/AmberTools instead. However, if you have a valid license for the OpenEye Toolkits, consider installing them for faster performance and additional file format support: https://docs.eyesopen.com/toolkits/python/quickstart-python/linuxosx.html OpenEye offers free Toolkit licenses for academics: https://www.eyesopen.com/academic-licensing\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Loading molecule from RDKit\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6611b69506ef4041b8db2a94d1575718", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Generating rotamer library\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "097ca2c09122475abd7c336b65412aef", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "NGLWidget()" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Loading forcefield\n", - " - Computing partial charges with am1bcc\n" - ] - } - ], - "source": [ - "NAME = 'BNZ'\n", - "EXTENSION = '.pdb'\n", - "FORCEFIELD = 'openff_unconstrained-1.1.1.offxml'\n", - "CHARGES_METHOD = 'am1bcc'\n", - "\n", - "# Load molecule\n", - "molecule = Molecule('../data/ligands/' + NAME.upper() + EXTENSION,\n", - " rotamer_resolution=30)\n", - "display(molecule.off_molecule)\n", - "\n", - "# Generate its rotamer library\n", - "rotamer_library = RotamerLibrary(molecule)\n", - "rotamer_library.to_file('../data/templates/' + NAME.upper() + '.rot.assign')\n", - "\n", - "# Generate its parameters and template file\n", - "molecule.parameterize(FORCEFIELD, charges_method=CHARGES_METHOD)\n", - "impact = Impact(molecule)\n", - "impact.write('../data/templates/' + NAME.lower() + 'z')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Loading molecule from RDKit\n", - " - Generating rotamer library\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "96d4741edabc48899e798d00ce079009", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "NGLWidget()" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Loading forcefield\n", - " - Computing partial charges with gasteiger\n" - ] - } - ], - "source": [ - "NAME = 'OLC'\n", - "EXTENSION = '.pdb'\n", - "FORCEFIELD = 'openff_unconstrained-1.1.1.offxml' \n", - "CHARGES_METHOD = 'gasteiger'\n", - "\n", - "# Load molecule\n", - "molecule = Molecule('../data/ligands/' + NAME.upper() + EXTENSION,\n", - " rotamer_resolution=30)\n", - "display(molecule.off_molecule)\n", - "\n", - "# Generate its rotamer library\n", - "rotamer_library = RotamerLibrary(molecule)\n", - "rotamer_library.to_file('../data/templates/' + NAME.upper() + '.rot.assign')\n", - "\n", - "# Generate its parameters and template file\n", - "molecule.parameterize(FORCEFIELD, charges_method=CHARGES_METHOD)\n", - "impact = Impact(molecule)\n", - "impact.write('../data/templates/' + NAME.lower() + 'z')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Loading molecule from RDKit\n", - " - Generating rotamer library\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "abe2a90957b94339ab25c332d2ef0030", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "NGLWidget()" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " - Loading forcefield\n", - " - Computing partial charges with am1bcc\n", - " - Loading solvent parameters\n" - ] - } - ], - "source": [ - "NAME = 'TOL'\n", - "EXTENSION = '.pdb'\n", - "FORCEFIELD = 'openff_unconstrained-1.1.1.offxml'\n", - "CHARGES_METHOD = 'am1bcc'\n", - "\n", - "# Load molecule\n", - "molecule = Molecule('../data/ligands/' + NAME.upper() + EXTENSION,\n", - " rotamer_resolution=30)\n", - "display(molecule.off_molecule)\n", - "\n", - "# Generate its rotamer library\n", - "rotamer_library = RotamerLibrary(molecule)\n", - "rotamer_library.to_file('../data/templates/' + NAME.upper() + '.rot.assign')\n", - "\n", - "# Generate its parameters and template file\n", - "molecule.parameterize(FORCEFIELD, charges_method=CHARGES_METHOD)\n", - "impact = Impact(molecule)\n", - "impact.write('../data/templates/' + NAME.lower() + 'z')\n", - "\n", - "# Generate its solvent parameters\n", - "solvent = OBC2(molecule)\n", - "solvent.to_json_file('ligandParams.txt')" - ] - } - ], - "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.7.8" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/offpele/examples/README.md b/offpele/examples/README.md deleted file mode 100644 index e69de29b..00000000 From 460aa36e0e3dbd01a8bac1e86b3a3a4bb6c5781c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Municoy?= Date: Thu, 3 Sep 2020 13:43:39 +0200 Subject: [PATCH 04/12] Change path to examples --- docs/examples.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples.rst b/docs/examples.rst index 8da9b6a7..d9bda2e3 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -1 +1 @@ -.. mdinclude:: ../offpele/examples/README.md +.. mdinclude:: ../examples/README.md From b410e86e33e625e53a6eb7032af1aad271a30a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Municoy?= Date: Thu, 3 Sep 2020 13:46:59 +0200 Subject: [PATCH 05/12] Update README.md --- examples/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/README.md b/examples/README.md index e41a7712..ab06ccb9 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,10 +1,10 @@ # Examples -The following examples are available in the [offpele repository](): +The following examples are available in the [offpele repository](https://github.com/martimunicoy/offpele/tree/master/examples): ## Summary -- [molecular_representations](): it shows and compares the different methods that can be used to represent molecules in `offpele`. -- [OFF_parameterization](): it shows how to use `offpele` to assign parameters with the `Open Force Field Toolkit`. -- [OPLS_parameterization](): it shows how to use `offpele` to combine parameters from Schrodinger's `OPLS2005` force field with the ones from the `Open Force Field Toolkit`. +- [molecular_representations](https://github.com/martimunicoy/offpele/tree/master/examples/molecular_representations): it shows and compares the different methods that can be used to represent molecules in `offpele`. +- [OFF_parameterization](https://github.com/martimunicoy/offpele/tree/master/examples/OFF_parameterization): it shows how to use `offpele` to assign parameters with the `Open Force Field Toolkit`. +- [OPLS_parameterization](https://github.com/martimunicoy/offpele/tree/master/examples/OPLS_parameterization): it shows how to use `offpele` to combine parameters from Schrodinger's `OPLS2005` force field with the ones from the `Open Force Field Toolkit`. -/*To do: include rotamer examples*/ +[//]: # (include rotamer examples) From 09d9a4966869534bfeff4fd2aac5fab117a48481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Municoy?= Date: Thu, 3 Sep 2020 14:19:08 +0200 Subject: [PATCH 06/12] Update releasehistory.rst --- docs/releasehistory.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/releasehistory.rst b/docs/releasehistory.rst index 8eb0d25d..6626b9be 100644 --- a/docs/releasehistory.rst +++ b/docs/releasehistory.rst @@ -18,7 +18,8 @@ New features - `PR #28 `_: Adds a new method to define a `Molecule` object through a SMILES tag. This molecule can be written as a PDB file later for PELE. - `PR #31 `_: Adds the possibility to combine nonbonding and solvent parameters from OPLS2005 with bonding parameters from OFF. - `PR #36 `_: Minor changes to improve the quality of the code. -- `PR #37 `_: Adds a new partial charge calculator that uses OPLS2005 to assign partial charges. Includes new flags in the CLI from main.py to combine bonding and nonbonding parameters and partial charges from OPLS2005. +- `PR #38 `_: Adds a new partial charge calculator that uses OPLS2005 to assign partial charges. Includes new flags in the CLI from main.py to combine bonding and nonbonding parameters and partial charges from OPLS2005. +- `PR #42 `_: Improves the documentation, adding a section specific for CLI-usage and API examples. Bugfixes """""""" From 4ca63e2a0b35afb9d0d4791e5372a5d7115295d0 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 14:29:04 +0200 Subject: [PATCH 07/12] Fix minor issue in examples.rst title --- docs/examples.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/examples.rst b/docs/examples.rst index d9bda2e3..0ba645a3 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -1 +1,2 @@ +.. _examples :: .. mdinclude:: ../examples/README.md From 94df2ac6496b73808a07a345566f7f4dc891b97b Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 16:03:32 +0200 Subject: [PATCH 08/12] Add new tests for Molecule tags and names --- offpele/tests/test_molecule.py | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/offpele/tests/test_molecule.py b/offpele/tests/test_molecule.py index f65ae8aa..c56a57b2 100644 --- a/offpele/tests/test_molecule.py +++ b/offpele/tests/test_molecule.py @@ -54,3 +54,60 @@ def test_good_init_parameterization(self): molecule = Molecule(ligand_path) molecule.parameterize(FORCEFIELD_NAME) + + def test_molecule_name_assignment(self): + """ + It tests the molecule name assignment. + """ + # Look for an empty name when dummy Molecule is loaded + molecule = Molecule() + assert molecule.name == '', 'Unexpected atom name' + + # Look for the PDB name when a Molecule is loaded from a PDB file + ligand_path = get_data_file_path('ligands/BNZ.pdb') + molecule = Molecule(ligand_path) + assert molecule.name == 'BNZ', 'Unexpected atom name' + + # Look for benzene name when a Molecule is loaded from a PDB file + # with a custom name + ligand_path = get_data_file_path('ligands/BNZ.pdb') + molecule = Molecule(ligand_path, name='benzene') + assert molecule.name == 'benzene', 'Unexpected atom name' + + # Look for the SMILES name when a Molecule is loaded from a SMILES tag + molecule = Molecule(smiles='c1ccccc1') + assert molecule.name == 'c1ccccc1', 'Unexpected atom name' + + # Look for benzene name when a Molecule is loaded from a SMILES tag + # with a custom name + molecule = Molecule(smiles='c1ccccc1', name='benzene') + assert molecule.name == 'benzene', 'Unexpected atom name' + + def test_molecule_tag_assignment(self): + """ + It tests the molecule tag assignment. + """ + # Look for UNK tag when dummy Molecule is loaded + molecule = Molecule() + assert molecule.tag == 'UNK', 'Unexpected atom tag' + + # Look for the PDB residue name as a tag when a Molecule is loaded + # from a PDB file + ligand_path = get_data_file_path('ligands/BNZ.pdb') + molecule = Molecule(ligand_path) + assert molecule.tag == 'BNZ', 'Unexpected atom tag' + + # Look for BEN tag when a Molecule is loaded from a PDB file with + # a custom name + ligand_path = get_data_file_path('ligands/BNZ.pdb') + molecule = Molecule(ligand_path, tag='BEN') + assert molecule.tag == 'BEN', 'Unexpected atom tag' + + # Look for UNK tag when a Molecule is loaded from a SMILES tag + molecule = Molecule(smiles='c1ccccc1') + assert molecule.tag == 'UNK', 'Unexpected atom tag' + + # Look for BNZ tag when a Molecule is loaded from a SMILES tag with + # a custom tag + molecule = Molecule(smiles='c1ccccc1', tag='BNZ') + assert molecule.tag == 'BNZ', 'Unexpected atom tag' From 63745c93ec52bdee58e1d0fefe8f2110da6bacc9 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 16:04:09 +0200 Subject: [PATCH 09/12] Add tag and name attributes to Molecule --- offpele/template/impact.py | 2 +- offpele/topology/molecule.py | 65 ++++++++++++++++++++++++++++-------- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/offpele/template/impact.py b/offpele/template/impact.py index 60d91f57..72b7f223 100644 --- a/offpele/template/impact.py +++ b/offpele/template/impact.py @@ -148,7 +148,7 @@ def _write_resx(self, file): File to write to """ # template name - file.write('{:5}'.format(self.molecule.name)) + file.write('{:5}'.format(self.molecule.tag)) # number of non bonding parameters file.write('{:6d}'.format(len(self.molecule.atoms))) # number of bond parameters diff --git a/offpele/topology/molecule.py b/offpele/topology/molecule.py index 5b31797c..a771b2e4 100644 --- a/offpele/topology/molecule.py +++ b/offpele/topology/molecule.py @@ -447,7 +447,7 @@ class Molecule(object): """ def __init__(self, path=None, smiles=None, rotamer_resolution=30, - exclude_terminal_rotamers=True): + exclude_terminal_rotamers=True, name='', tag='UNK'): """ It initializes a Molecule object through a PDB file or a SMILES tag. @@ -464,6 +464,10 @@ def __init__(self, path=None, smiles=None, rotamer_resolution=30, exclude_terminal_rotamers : bool Whether to exclude terminal rotamers when generating the rotamers library or not + name : str + The molecule name + tag : str + The molecule tag. It must be a 3-character string Examples -------- @@ -485,6 +489,8 @@ def __init__(self, path=None, smiles=None, rotamer_resolution=30, >>> molecule.parameterize('openff_unconstrained-1.2.0.offxml') """ + self._name = name + self._tag = tag self._rotamer_resolution = rotamer_resolution self._exclude_terminal_rotamers = exclude_terminal_rotamers @@ -507,7 +513,6 @@ def __init__(self, path=None, smiles=None, rotamer_resolution=30, def _initialize(self): """It initializes an empty molecule.""" - self._name = '' self._forcefield = None self._atoms = list() self._bonds = list() @@ -543,9 +548,16 @@ def _initialize_from_pdb(self, path): # RDKit must generate stereochemistry specifically from 3D coords rdkit_toolkit.assign_stereochemistry_from_3D(self) - # Set molecule name according to PDB's residue name - name = rdkit_toolkit.get_residue_name(self) - self.set_name(name) + # Set molecule name according to PDB name + if self.name == '': + from pathlib import Path + name = Path(path).stem + self.set_name(name) + + # Set molecule tag according to PDB's residue name + if self.tag == 'UNK': + tag = rdkit_toolkit.get_residue_name(self) + self.set_tag(tag) openforcefield_toolkit = OpenForceFieldToolkitWrapper() @@ -570,9 +582,9 @@ def _initialize_from_smiles(self, smiles): # RDKit must generate stereochemistry specifically from 3D coords # rdkit_toolkit.assign_stereochemistry_from_3D(self) - # Set molecule name according to PDB's residue name - name = rdkit_toolkit.get_residue_name(self) - self.set_name(name) + # Set molecule name according to the SMILES tag + if self.name == '': + self.set_name(smiles) openforcefield_toolkit = OpenForceFieldToolkitWrapper() @@ -595,12 +607,27 @@ def set_name(self, name): name : str The name to set to the molecule """ - if isinstance(name, str) and len(name) > 2: - name = name[0:3].upper() - self._name = name + assert isinstance(name, str), 'Invalid type for a name, it must be ' \ + + 'a string' - if self.off_molecule: - self.off_molecule.name = name + self._name = name + + def set_tag(self, tag): + """ + It sets the tag of the molecule. It must be a 3-character string. + + Parameters + ---------- + tag : str + The tag to set to the molecule. It must be a 3-character string + """ + # Some previous checks + assert len(tag) == 3, 'Invalid tag length, it must be a ' \ + + '3-character string' + assert isinstance(tag, str), 'Invalid type for a tag, it must be ' \ + + 'a string' + + self._tag = tag.upper() def parameterize(self, forcefield, charges_method=None, use_OPLS_nonbonding_params=False, @@ -1312,6 +1339,18 @@ def name(self): """ return self._name + @property + def tag(self): + """ + Molecule's tag. + + Returns + ------- + tag : str + The tag of this Molecule object + """ + return self._tag + @property def forcefield(self): """ From 0e3395377650d98e5e8de5a0e55f08e36b83c8d4 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 16:17:02 +0200 Subject: [PATCH 10/12] Warn about missing SCHRODINGER variable --- offpele/utils/toolkits.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/offpele/utils/toolkits.py b/offpele/utils/toolkits.py index 3ce6391c..3d81faea 100644 --- a/offpele/utils/toolkits.py +++ b/offpele/utils/toolkits.py @@ -1117,6 +1117,15 @@ def __init__(self): """ super().__init__() + if "SCHRODINGER" not in os.environ: + import logging + logging.warning("Schrodinger Toolkit requires the environment " + + "variable SCHRODINGER to be previously set, " + + "pointing to the Schrodinger's installation " + + "path. For more information, please, refer to " + + "https://martimunicoy.github.io/offpele/installation.html#external-dependencies", + ) + if not self.is_available(): raise ToolkitUnavailableException( 'The required toolkit {} is not '.format(self.toolkit_name) From 6cf07d2c3693942464a7165da96a03a316588be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Municoy?= Date: Thu, 3 Sep 2020 16:24:48 +0200 Subject: [PATCH 11/12] Update releasehistory.rst --- docs/releasehistory.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/releasehistory.rst b/docs/releasehistory.rst index 6626b9be..d0e972e1 100644 --- a/docs/releasehistory.rst +++ b/docs/releasehistory.rst @@ -20,18 +20,21 @@ New features - `PR #36 `_: Minor changes to improve the quality of the code. - `PR #38 `_: Adds a new partial charge calculator that uses OPLS2005 to assign partial charges. Includes new flags in the CLI from main.py to combine bonding and nonbonding parameters and partial charges from OPLS2005. - `PR #42 `_: Improves the documentation, adding a section specific for CLI-usage and API examples. +- `PR #46 `_: Adds a tag to Molecule class. Besides, the handling of Molecule names is improved. Both attributes can be set when initiating the molecule. Bugfixes """""""" - `PR #22 `_: Fixes many bugs. For example, the default output name of the solvent parameters template is changed to `ligandParams.txt`, which is the name that PELE expects. - `PR #32 `_: Minor fixes in ToolkitWrapper classes. - `PR #34 `_: Improves the translation of dihedrals coming from the Open Force Fielf Toolkit and corrects the lack of exclusions in PELE 1-4 list that result from Impact's dihedral definitions. +- `PR #46 `_: Prevents molecule to be untagged when loading it from a SMILES tag. Tests added """"""""""" - `PR #31 `_: Adds tests to validate some functions of the new SchrodingerToolkitWrapper. - `PR #34 `_: Adds tests to further validate the assignment of parameters from the Open Force Field Toolkit. -- `PR #37 `_: Adds tests to validate the new OPLS charge calculator. +- `PR #38 `_: Adds tests to validate the new OPLS charge calculator. +- `PR #46 `_: Adds tests to validate the name and tag assignment to Molecule class. 0.2.1 From 713fa830b74bfe31e4ccdaec18b7b47e444a9a00 Mon Sep 17 00:00:00 2001 From: Marti Municoy Date: Thu, 3 Sep 2020 16:27:22 +0200 Subject: [PATCH 12/12] Remove deprecated function --- offpele/topology/molecule.py | 37 ------------------------------------ 1 file changed, 37 deletions(-) diff --git a/offpele/topology/molecule.py b/offpele/topology/molecule.py index a771b2e4..1af1d697 100644 --- a/offpele/topology/molecule.py +++ b/offpele/topology/molecule.py @@ -700,43 +700,6 @@ def parameterize(self, forcefield, charges_method=None, if use_OPLS_bonds_and_angles: self.add_OPLS_bonds_and_angles() - # To do: consider removing this function - def plot_rotamer_graph(self): - """It plots the rotamer graph in screen.""" - try: - from rdkit import Chem - except ImportError: - raise Exception('RDKit Python API not found') - - # Find rotatable bond ids as in Lipinski module in RDKit - # https://github.com/rdkit/rdkit/blob/1bf6ef3d65f5c7b06b56862b3fb9116a3839b229/rdkit/Chem/Lipinski.py#L47 - rot_bonds_atom_ids = self._rdkit_molecule.GetSubstructMatches( - Chem.MolFromSmarts('[!$(*#*)&!D1]-&!@[!$(*#*)&!D1]')) - - graph = self._compute_rotamer_graph(rot_bonds_atom_ids) - - rot_edges = [(u, v) for (u, v, d) in graph.edges(data=True) - if d['weight'] == 1] - nrot_edges = [(u, v) for (u, v, d) in graph.edges(data=True) - if d['weight'] == 0] - - import networkx as nx - - pos = nx.circular_layout(graph) - - nx.draw_networkx_nodes(graph, pos, node_size=400) - nx.draw_networkx_edges(graph, pos, edgelist=rot_edges, - width=4) - nx.draw_networkx_edges(graph, pos, edgelist=nrot_edges, - width=4, alpha=0.5, edge_color='b', - style='dashed') - nx.draw_networkx_labels(graph, pos, font_size=10, - font_family='sans-serif') - - import matplotlib.pyplot as plt - plt.axis('off') - plt.show() - def assert_parameterized(self): """ It checks that the molecule has been parameterized, raises an