Source code for shepherd_score.protonation.molscrub_utils
"""
Script to tautomerize and protonate molecules using `molscrub` package developed by ForliLab.
https://github.com/forlilab/molscrub
"""
from typing import List
from rdkit import Chem
from rdkit.rdBase import BlockLogs
from shepherd_score.protonation.protonate import neutralize_atoms, remove_bad_protomers
from molscrub import Scrub
[docs]
def tautomerize_molscrub(
smiles: str,
pH: float = 7.4,
neutralize: bool = True,
) -> List[str]:
"""
Find all tautomers/protomers of a molecule using `molscrub` package.
Parameters
----------
smiles : str
SMILES string of the molecule to tautomerize/protonate.
pH : float (default: 7.4)
pH value to use for the protonation.
neutralize : bool (default: True)
Whether to neutralize the molecule before scrubbing.
chemaxon_license_path : str | None (default: None)
Path to the chemaxon license file.
If ``None``, the ``CHEMAXON_LICENSE_URL`` environment variable is used.
Returns
-------
list[str]
List of SMILES strings of the tautomers/protomers.
"""
scrub = Scrub(
ph_low=pH,
ph_high=pH,
skip_gen3d=True,
)
_log_blocker = BlockLogs()
mol = Chem.MolFromSmiles(smiles)
if neutralize:
mol = neutralize_atoms(mol)
tautomers = scrub(mol)
del _log_blocker
return remove_bad_protomers([Chem.MolToSmiles(tautomer) for tautomer in tautomers])