Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SetRemoveSp3Stereo(False) does not keep isotope (deuterium) induced stereochemistry #7410

Open
pechersky opened this issue May 1, 2024 · 4 comments
Labels

Comments

@pechersky
Copy link
Contributor

pechersky commented May 1, 2024

Describe the bug
Canonicalizing a molecule with implicit-ized isotopic Hs removes the stereo that those deuteriums might induce. The implicitization of these Hs is necessary to overcome the issue described in #5340. Perhaps @ptosco or @kienerj have comments.

To Reproduce

from rdkit import Chem
from rdkit.Chem.MolStandardize import rdMolStandardize

smiles = [
    # these are fine
    r"FC(C)C",
    r"F[C@H](C)CC",
    r"F[C@@H](C)CC",
    r"FCC",
    # and these lose stereo
    r"F[C@H]([2H])C",
    r"F[C@@H]([2H])C",
]

for smi in smiles:
    mol = Chem.MolFromSmiles(smi)
    had_at_sign = "@" in smi
    params = Chem.RemoveHsParameters()
    params.removeAndTrackIsotopes = True
    mol = Chem.RemoveHs(mol, params)
    enumerator = rdMolStandardize.TautomerEnumerator()
    enumerator.SetRemoveSp3Stereo(False)
    mol = Chem.AddHs(enumerator.Canonicalize(mol), explicitOnly=True)
    print(("@" in Chem.MolToSmiles(mol)) == had_at_sign)

Expected behavior
I expect the sp3 stereo of the carbons (due to D stereo) to remain. This means all the output of the above script should be True.

Screenshots
image

Configuration (please complete the following information):

  • RDKit version: 2024.3.1
  • OS: [e.g. Ubuntu 20.04]: ubuntu 20.04
  • Python version (if relevant): py3.11
  • Are you using conda? no
  • If you are using conda, which channel did you install the rdkit from? self-built(rdkit-pypi style)
  • If you are not using conda: how did you install the RDKit? pip install from wheel

Additional context
Add any other context about the problem here.

@pechersky pechersky added the bug label May 1, 2024
@pechersky pechersky changed the title SetRemoveSp3Stereo does not keep isotope (deuterium) induced stereochemistry SetRemoveSp3Stereo(False) does not keep isotope (deuterium) induced stereochemistry May 1, 2024
@greglandrum
Copy link
Member

greglandrum commented May 2, 2024

@pechersky This isn't really a problem with the tautomer enumeration: it is not possible to preserve stereochemistry when you remove one of the atoms which determine the stereochemistry.
Here's a quick demo of what happens:

In [5]: m = Chem.MolFromSmiles('F[C@@H]([2H])C')

In [6]: params = Chem.RemoveHsParameters()

In [7]: params.removeAndTrackIsotopes = True

In [8]: nm = Chem.RemoveHs(m,params)

In [9]: Chem.MolToSmiles(nm)
Out[9]: 'CCF'

In [11]: Chem.AssignStereochemistry(nm,force=True,cleanIt=True)

In [12]: nm.Debug()
Atoms:
	0 9 F chg: 0  deg: 1 exp: 1 imp: 0 hyb: 4 arom?: 0 chi: 0
	1 6 C chg: 0  deg: 2 exp: 4 imp: 0 hyb: 4 arom?: 0 chi: 0
	2 6 C chg: 0  deg: 1 exp: 1 imp: 3 hyb: 4 arom?: 0 chi: 0
Bonds:
	0 0->1 order: 1 conj?: 0 aromatic?: 0
	1 1->2 order: 1 conj?: 0 aromatic?: 0

As an aside: this example, where you have a chiral center because a C has one H and one D attached, strikes me as highly artifiical. Do you have a real-world example of this?

@pechersky
Copy link
Contributor Author

Without removing (and tracking) these deuteriums, then the tautomer enumeration does not shift around the explicit Hs (or Ds), thus creating, in some instances, a bad valence "canonical tautomer". This is what came up in the issue referenced above.

We're working on shoring up our canonicalization-and-comparison tools, and part of them is considering isotopically induced stereochemistry (heavy atom or not). Our current approach treats all elements equally -- but this ran aground of the molecule cleanup we do before tautomer canonicalization in this D/T case.

One option we might take is "we're never going to have isotopically labeled Hs on tautomeric centers so it's fine to clear them away".

@greglandrum
Copy link
Member

I think there's a case to be made for an enhancement request to allow the tautomer enumeration to work on molecules with Hs in the graph. That's a non-trivial change, but it is theoretically doable. But that's not this.

I wonder if there's any real-world situation (i.e. something that has actually been done in the lab and not just constructed as a what if? example) where a D in place of an H makes a molecule chiral in a way that matters

@pechersky
Copy link
Contributor Author

Real world situations:
Chemical-shift isotope effect (NMR): Lambert, Joseph B., and Linda G. Greifenstein. "Stereochemical dependence of the chemical-shift isotope effect." Journal of the American Chemical Society 95.18 (1973): 6150-6152.
Chiral catalyst (chirality due to H-D chirality in the catalyst): Sato, Itaru, et al. "Highly enantioselective synthesis induced by chiral primary alcohols due to deuterium substitution." Journal of the American Chemical Society 122.47 (2000): 11739-11740.
Diastereomerically pure bicycles due to trans or cis H-D:
Saito, Fumito, et al. "Breaking the Symmetry of a Meso Compound by Isotopic Substitution: Synthesis and Stereochemical Assignment of Monodeuterated cis-Perhydroazulene." Organic Letters 23.1 (2020): 113-117.

The chiral catalyst paper is particularly relevant because the catalysts are c1ccccc1[C@H]([2H])O, which, if tautomer-canonicalization was applied to, might have issues in the keto-enol reactions (?)

I stereoenumerate molecules and then pose them into 3D in pockets. Assuming that my stereoenumeration code is cognizant to generate 2 enantiomers of something like FC[2H] and 3D conformer generation respects the stereochemistry, differentiating the two allows for downstream analysis for something like positioning of the D in an enzyme's active site and whether that would affect the enzyme's catalytic cycle.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants