Gypsum-DL is a free, open-source program for preparing 3D small-molecule models. Beyond simply assigning atomic coordinates, Gypsum-DL accounts for alternate ionization, tautomeric, chiral, cis/trans isomeric, and ring-conformational forms.
You can install the latest released version on PyPI using the following command.
pip install gypsum-dlOr you can install the latest development version from the main branch on GitHub using
pip install git+https://github.com/durrantlab/gypsum_dl.gitGypsum-DL accepts the following command-line parameters:
-h, --help show this help message and exit
--json param.json, -j param.json
Name of a json file containing all parameters.
Overrides all other arguments specified at the
commandline.
--source input.smi, -s input.smi
Name of the source file (e.g., input.smi). Note:
support for SMI (SMILES) files is better than support
for SDF files, though Gypsum-DL can handle both.
--output_folder OUTPUT_FOLDER, -o OUTPUT_FOLDER
The path to an existing folder where the Gypsum-DL
output file(s) will be saved.
--job_manager {mpi,multiprocessing,serial}
Determine what style of multiprocessing to use: mpi,
multiprocessing, or serial. Serial will override the
num_processors flag, forcing it to be one. MPI mode
requires mpi4py 4.0 or higher and should be executed
as: mpirun -n $NTASKS python -m mpi4py -m gypsum_dl
...-settings...
--num_processors N, -p N
Number of processors to use for parallel calculations.
Defaults to -1 (use all available processors).
--max_variants_per_compound V, -m V
The maximum number of variants to create per input
molecule.
--thoroughness THOROUGHNESS, -t THOROUGHNESS
How widely to search for low-energy conformers. Larger
values increase run times but can produce better
results.
--random_seed S Seed for the random number generators. Makes a run
reproducible regardless of the number of processors.
--separate_output_files
Indicates that the outputs should be split between
files. If true, each output .sdf file will correspond
to a single input file, but different 3D conformers
will still be stored in the same file.
--add_pdb_output Indicates that the outputs should also be written in
the .pdb format. Creates one PDB file for each
molecular variant.
--add_html_output Indicates that the outputs should also be written in
the .html format, for debugging.
--min_ph MIN Minimum pH to consider.
--max_ph MAX Maximum pH to consider.
--pka_precision D Size of pH substructure ranges. See Dimorphite-DL
publication for details.
--skip_optimize_geometry
Skips the optimization step.
--skip_alternate_ring_conformations
Skips the non-aromatic ring-conformation generation
step.
--skip_adding_hydrogen
Skips the ionization step.
--skip_making_tautomers
Skips tautomer-generation step.
--skip_enumerate_chiral_mol
Skips the ennumeration of unspecified chiral centers.
--skip_enumerate_double_bonds
Skips the ennumeration of double bonds.
--let_tautomers_change_chirality
Allow tautomers that change the total number of chiral
centers (see README.md for further explanation).
--use_durrant_lab_filters
Use substructure filters to remove molecular variants
that, though technically possible, were judged
improbable by members of the Durrant lab. See
README.md for more details.
--2d_output_only Skips the generate-3D-models step.
These examples use the sample library included in the Gypsum-DL repository
(tests/files/sample/sample_molecules.smi), so run them from the repository
root, or substitute your own SMILES or SDF file.
Prepare a virtual library and save all 3D models to a single SDF file in the present directory:
gypsum-dl --source ./tests/files/sample/sample_molecules.smiInstead save all 3D models to a different, existing folder:
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--output_folder /my/folder/Additionally save the models associated with each input molecule to separate files:
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--output_folder /my/folder/ --separate_output_filesIn addition to saving a 3D SDF file, also save 3D PDB files and an HTML file with 2D structures (for debugging).
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--output_folder /my/folder/ --add_pdb_output --add_html_outputSave at most two variants per input molecule:
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--output_folder /my/folder/ --max_variants_per_compound 2Setting this parameter to zero turns variant enumeration off entirely. Gypsum-DL still desalts each input molecule and still writes one 3D model per input, but it does not generate alternate ionization states, tautomers, enantiomers, or double-bond isomers:
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--output_folder /my/folder/ --max_variants_per_compound 0Control how Gypsum-DL ionizes the input molecules:
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--output_folder /my/folder/ --min_ph 12 --max_ph 14 --pka_precision 1Run Gypsum-DL in serial mode (using only one processor):
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--job_manager serialRun Gypsum-DL in multiprocessing mode, using 4 processors:
gypsum-dl --source ./tests/files/sample/sample_molecules.smi \
--job_manager multiprocessing --num_processors 4Run Gypsum-DL in mpi mode using all available processors.
This mode requires mpi4py, which is not installed by default because
building it needs an MPI toolchain (mpicc and the MPI headers).
Install it with the mpi extra:
pip install "gypsum-dl[mpi]"mpirun -n $NTASKS python -m mpi4py -m gypsum_dl \
--source ./tests/files/sample/sample_molecules.smi \
--job_manager mpi --num_processors -1Gypsum-DL can also take parameters from a JSON file:
gypsum-dl --json myparams.jsonWhere myparams.json might look like:
{
"source": "./tests/files/sample/sample_molecules.smi",
"separate_output_files": true,
"job_manager": "multiprocessing",
"output_folder": "/my/folder/",
"add_pdb_output": true,
"add_html_output": true,
"num_processors": -1
}Gypsum-DL is designed to process drug-like molecules.
Generating 3D structures for larger molecules takes a very long time.
For example, in our tests it takes Gypsum-DL a very long time to process this molecule: CCCC[C@@H](C(N[C@H]1CC(NCCCC[C@H](NC([C@@H](NC([C@@H](NC([C@@H](NC([C@@H]2CCCN2C1=O)=O)Cc3ccccc3)=O)CCCNC(N)=N)=O)Cc(c[nH]4)c5c4cccc5)=O)C(N6CCC[C@H]6C(N[C@@H](C(C)C)C(N)=O)=O)=O)=O)=O)NC(C)=O You may wish to run your compounds through a drug-like filter before processing them with Gypsum-DL.
Gypsum-DL uses MolVS to generate tautomers.
While MolVS is effective, we have noticed that it sometimes generates inappropriate tautomers that change the total number of chiral centers, e.g., O=C(c1ccc(CN)cc1)N to N=Cc1ccc(C(O)N)cc1.
But some legitimate tautomers also change the number of chiral centers, e.g., C[C@@H](C(C)=O)F to C/C(F)=C(C)\O.
To compensate for this MolVS bug, by default Gypsum-DL rejects all tautomers that change the total number of chiral centers
Use the --let_tautomers_change_chirality flag if you would like to retain these tautomers instead
As always, be sure to examine the structures that Gypsum-DL outputs to ensure they are chemically feasible.
When Gypsum-DL protonates a tertiary amine with three different substituents, the nitrogen becomes a stereocenter, and Gypsum-DL enumerates both configurations (e.g., C[N@H+](CC)CCC and C[N@@H+](CC)CCC).
These invertomers interconvert rapidly in solution, but docking programs do not invert nitrogen atoms, and the two forms point the N-H hydrogen in different directions.
Generating both lets the docking program consider either orientation of what is often a key hydrogen-bond or salt-bridge donor.
In ring amines the two forms differ more substantially, for example by placing the N-H axial or equatorial.
These variants count toward max_variants_per_compound.
The --skip_enumerate_chiral_mol flag disables them along with all other chirality enumeration.
In looking over many Gypsum-DL-generated variants, we have identified a number of substructures that, though technically possible, strike us as improbable or otherwise poorly suited for virtual screening. Here is the full list of substructures Gypsum-DL matches, in the order they appear in the code:
C=[N-][N-]C=[N+][nH+]c[n-][#7+]~[#7+][#7-]~[#7-][!#7]~[#7+]~[#7-]~[!#7][#5](boron)O=[PH](=O)([#8])([#8])[#7]=C1[#7]=C[#7]C=C1N=c1cc[#7]c[#7]1[$(N)]=C[$([OH]),$([O-])][$(N)]C(=C)[$([OH]),$([O-])]- Metals (any metal atom left after desalting, so a metal counterion that desalting removes does not count)
Note that the two iminol patterns match any aliphatic nitrogen, so internal (N-substituted) iminols and the mistaken amide tautomers built on them are discarded along with the terminal forms.
If you'd like to discard molecular variants with these substructures, use the --use_durrant_lab_filters flag.
Some users have reported that Gypsum-DL fails to produce 3D models when processing molecules with highly constrained ring systems, such as amantadine compounds (e.g., this molecule from ChemBridge: CC1=CC=CN2N=CC(C(=O)NC34CC5CC(C3)CC(C5)(C4)N3C=NC=N3)=C12).
Increasing the thoroughness parameter may help in these cases.
When processing large libraries, Gypsum-DL requires substantial memory. Some users have reported that the program suddenly stops in these situations. To correct the problem, either increase the available memory, or divide your library into several smaller files and processes them sequentially.
Gypsum-DL aims to enumerate many possible variant forms, including forms that are not necessarily probable. Beyond applying Durrant-Lab filters, several methods allow users to exclude other potentially problematic forms:
- Identify the steps Gypsum-DL takes to generate a given problematic form (see the "Genealogy" field of every output SDF file).
Then use parameters such as
--skip_optimize_geometry,--skip_alternate_ring_conformations,--skip_adding_hydrogen,--skip_making_tautomers,--skip_enumerate_chiral_mol, or--skip_enumerate_double_bondsto skip the problem-causing step. This fix is easy, but it may unexpectedly impact unrelated compounds. - Consider adjusting the
--min_ph,--max_ph, or--pka_precisionparameters if Gypsum-DL is producing compounds with undesired protonation states. Alternatively, you can delete specific protonation rules by modifying thesite_substructures.smartsfile of the installeddimorphite_dlpackage. - Add to the Durrant-Lab filters if there is a specific substructure you would like to avoid (e.g., imidic acid due to amide/imidic-acid tautomerization).
Simplify modify the
gypsum_dl/steps/smiles/DurrantLabFilter.pyfile.
If you use Gypsum-DL in your research, please cite:
Ropp, Patrick J., Jacob O. Spiegel, Jennifer L. Walker, Harrison Green, Guillermo A. Morales, Katherine A. Milliken, John J. Ringe, and Jacob D. Durrant. (2019) "Gypsum-DL: An Open-source Program for Preparing Small-molecule Libraries for Structure-based Virtual Screening." Journal of Cheminformatics 11:1. doi:10.1186/s13321-019-0358-3.
Ropp PJ, Kaminsky JC, Yablonski S, Durrant JD (2019) Dimorphite-DL: An open-source program for enumerating the ionization states of drug-like small molecules. J Cheminform 11:14. doi:10.1186/s13321-019-0336-9.
This project is released under the Apache-2.0 License as specified in LICENSE.md.