Skip to main content

⚗️ Dimorphite-DL

PyPI version Supported Python versions License: Apache 2.0 Tests Ruff

A fast, accurate, and modular open-source program for enumerating the ionization states of drug-like small molecules over a user-specified pH range.

⚠️ This repository is a modernized fork of Durrant Lab's original Dimorphite-DL (original article), reworked for easier installation and integration into bigger cheminformatics projects — see CHANGES.md for the full history.

✨ Features

  • Fast pH-range enumeration — adds/removes hydrogens for any pH window you specify, with a tunable --pka_precision (number of standard deviations around each predicted pKa).
  • 🧬 Broad functional-group coverage — alcohols, amides, amines/anilines, azides, carboxyls, guanidines, imides, nitro groups, phosphates/phosphonates (including ATP/NAD-style polyphosphate chains), sulfates/sulfonates/sulfonamides, thiols, indoles/pyrroles, aromatic nitrogens, and more.
  • 🖥️ CLI and 🐍 Python API — run it as a dimorphite command, or call dimorphite_dl.run(...) directly from your own scripts.
  • 📄 Flexible input — SMILES from the command line, an .smi file, or a Python SMILES string / RDKit Mol object (or list of either).
  • 🏷️ Optional state labeling — tag each output SMILES as PROTONATED, DEPROTONATED, or BOTH.
  • 🛡️ Bounded output--max_variants caps the number of protonation variants generated per input compound.
  • Modern toolingpyproject.toml packaging, a pytest test suite, ruff linting/formatting, and CI across Linux/macOS/Windows × Python 3.11-3.13.

✍️ Copyright and Citation Notice

Olivier J. M. Béquignon is neither the copyright holder of the original Dimorphite-DL algorithm nor responsible for it. This repository packages and modernizes Jacob D. Durrant's original work (Apache-2.0 licensed) — see CONTRIBUTORS.md for the original authors.

Citing

If you use Dimorphite-DL in your research, please cite the original publication:

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

📦 Installation

pip install dimorphite-ojmb

Or from source:

git clone https://github.com/OlivierBeq/dimorphite_dl.git
pip install ./dimorphite_dl

🛠️ Requirements

  • Python 3.11+
  • RDKit
  • Click (installed automatically)

💡 Usage

Command line

usage: dimorphite [-h] [--min_ph MIN] [--max_ph MAX] [--pka_precision PRE]
                  [--smiles SMI] [--smiles_file FILE] [--output_file FILE]
                  [--max_variants MXV] [--label_states] [--silent]

Dimorphite 1.2.4: Creates models of appropriately protonated small moleucles.
Apache 2.0 License. Copyright 2020 Jacob D. Durrant.

Options:
  -h, --help           Show this message and exit.
  --min_ph MIN         minimum pH to consider (default: 6.4)
  --max_ph MAX         maximum pH to consider (default: 8.4)
  --pka_precision PRE  pKa precision factor (number of standard devations,
                       default: 1.0)
  --smiles SMI         SMILES string to protonate NOTE: This argument is
                       mutually exclusive with smiles_file.  [required]
  --smiles_file FILE   file that contains SMILES strings to protonate NOTE:
                       This argument is mutually exclusive with smiles.
                       [required]
  --output_file FILE   output file to write protonated SMILES (optional)
  --max_variants MXV   limit number of variants per input compound (default:
                       128)
  --label_states       label protonated SMILES with target state (i.e.,
                       "DEPROTONATED", "PROTONATED", or "BOTH").
  --silent             do not print any messages to the screen

The default pH range is 6.4 to 8.4, considered biologically relevant pH.

dimorphite --smiles_file sample_molecules.smi
dimorphite --smiles "CCC(=O)O" --min_ph -3.0 --max_ph -2.0
dimorphite --smiles "CCCN" --min_ph -3.0 --max_ph -2.0 --output_file output.smi
dimorphite --smiles_file sample_molecules.smi --pka_precision 2.0 --label_states

Python API

import dimorphite_dl

# Using the dimorphite_dl.run() function, you can run Dimorphite-DL exactly as
# you would from the command line. Here's an example:
dimorphite_dl.run(smiles="CCCN", min_ph=-3.0, max_ph=-2.0)

# One can also provide multiple SMILES at once.
dimorphite_dl.run(["C[C@](F)(Br)CC(O)=O", "CCCCCN"], min_ph=5.0, max_ph=9.0, silent=True)

RDKit Mol objects are accepted too, either on their own or in a list:

from rdkit import Chem

mol = Chem.MolFromSmiles("CCCN")
dimorphite_dl.run(mol, min_ph=-3.0, max_ph=-2.0, silent=True)
dimorphite_dl.run([mol], min_ph=-3.0, max_ph=-2.0, silent=True)

Running the tests

From a source checkout:

pip install -e ".[test]"
pytest

⚠️ Caveats

Dimorphite-DL deprotonates indoles and pyrroles around pH 14.5. But these substructures can also be protonated around pH -3.5. Dimorphite does not perform the protonation.

📄 License

This project is licensed under the Apache 2.0 License - see the LICENSE.txt file for details.

📚 API Documentation

def run(smiles, min_ph=6.4, max_ph=8.4, pka_precision=1.0, max_variants=128, label_states=False, silent=False):

Runs Dimorphite-DL protonation on one or more molecules.

Parameters

  • smiles : str | Chem.Mol | list[str] | list[Chem.Mol] A SMILES string, an RDKit Mol object, or a list of either, to protonate. None returns [None].
  • min_ph : float Minimum pH to consider (default: 6.4).
  • max_ph : float Maximum pH to consider (default: 8.4).
  • pka_precision : float pKa precision factor — number of standard deviations around each predicted pKa to consider (default: 1.0).
  • max_variants : int Limit on the number of protonation variants generated per input compound (default: 128).
  • label_states : bool If True, each result becomes a (smiles_list, state) tuple, where state is "PROTONATED", "DEPROTONATED", "BOTH", a list thereof (one per site), or None if the molecule has no ionizable site.
  • silent : bool Suppress the citation banner and warning messages.
  • return_type : list One entry per input molecule, in the same order: a SMILES string (or (smiles_list, state) tuple if label_states=True), or None if the molecule could not be parsed.

👥 Authors and Contacts

See the CONTRIBUTORS.md file for a full list of original contributors. Please contact Jacob Durrant (durrantj@pitt.edu) with any questions about the original algorithm, or open an issue for questions about this fork.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dimorphite_ojmb-1.3.0.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dimorphite_ojmb-1.3.0-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file dimorphite_ojmb-1.3.0.tar.gz.

File metadata

  • Download URL: dimorphite_ojmb-1.3.0.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for dimorphite_ojmb-1.3.0.tar.gz
Algorithm Hash digest
SHA256 5f2188c1942b340db07d457d818bb9c54e933ba2388ad5348a5e07ecdbcd83e0
MD5 3d3f9e6c410058828d19a03b0a7eff18
BLAKE2b-256 50f4b0b637cfc62393ae44f4cdd59cb33794f5fb42934c4fab2c3bf58781abf7

See more details on using hashes here.

File details

Details for the file dimorphite_ojmb-1.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dimorphite_ojmb-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 837f9e2bb202298041b8ce05cc92db805248161121d3b893ee8e14cdbaac9d12
MD5 360ffc386491191b02484573451520d4
BLAKE2b-256 ed22afc480716d9f3f624e026e7135dc422c621816c53045750ce6096d4805ae

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 files

1.2.5.post1

2 files

1.2.5

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page