Skip to content

AtomPairs.Utils.NumPiElectrons fails on atoms with dative bonds #7318

Description

@ricrogz

A quick example:

>>> from rdkit import Chem
>>> from rdkit.Chem.AtomPairs.Utils import NumPiElectrons
>>> m = Chem.MolFromSmiles("O=C1[O-]->[Cr+3]23(<-[O-]C(=O)C4=CC=CC=N->24)(<-[O-]C(=O)C2=CC=CC=N->32)<-N2=CC=CC=C12")
>>> sum(NumPiElectrons(atom) for atom in m.GetAtoms())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <genexpr>
  File "/Users/vonbarge/schrodinger/builds/2024-2/internal/lib/python3.11/site-packages/rdkit/Chem/AtomPairs/Utils.py", line 157, in NumPiElectrons
    raise ValueError("explicit valence exceeds atom degree")
ValueError: explicit valence exceeds atom degree

Also, while having a look at this, I noticed that some of the atoms seem to be assigned incorrect hybridization states:

>>> from rdkit import Chem
>>> m = Chem.MolFromSmiles("O=C1[O-]->[Cr+3]23(<-[O-]C(=O)C4=CC=CC=N->24)(<-[O-]C(=O)C2=CC=CC=N->32)<-N2=CC=CC=C12")
>>> m.Debug()
--------------------------
Atoms:
	0 8 O chg: 0  deg: 1 exp: 2 imp: 0 hyb: SP2
	1 6 C chg: 0  deg: 3 exp: 4 imp: 0 hyb: SP2
	2 8 O chg: -1  deg: 2 exp: 1 imp: 0 hyb: SP3D
	3 24 Cr chg: 3  deg: 6 exp: 6 imp: 0 hyb: SP3D
	4 8 O chg: -1  deg: 2 exp: 1 imp: 0 hyb: SP3D
	5 6 C chg: 0  deg: 3 exp: 4 imp: 0 hyb: SP2
	6 8 O chg: 0  deg: 1 exp: 2 imp: 0 hyb: SP2
	7 6 C chg: 0  deg: 3 exp: 4 imp: 0 hyb: SP2 arom?: 1
	8 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	9 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	10 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	11 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	12 7 N chg: 0  deg: 3 exp: 3 imp: 0 hyb: SP2 arom?: 1
	13 8 O chg: -1  deg: 2 exp: 1 imp: 0 hyb: SP3D
	14 6 C chg: 0  deg: 3 exp: 4 imp: 0 hyb: SP2
	15 8 O chg: 0  deg: 1 exp: 2 imp: 0 hyb: SP2
	16 6 C chg: 0  deg: 3 exp: 4 imp: 0 hyb: SP2 arom?: 1
	17 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	18 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	19 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	20 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	21 7 N chg: 0  deg: 3 exp: 3 imp: 0 hyb: SP2 arom?: 1
	22 7 N chg: 0  deg: 3 exp: 3 imp: 0 hyb: SP2 arom?: 1
	23 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	24 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	25 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	26 6 C chg: 0  deg: 2 exp: 3 imp: 1 hyb: SP2 arom?: 1
	27 6 C chg: 0  deg: 3 exp: 4 imp: 0 hyb: SP2 arom?: 1
Bonds:
    [...]

Atoms 2, 4 and 8 have SP3D hybridization, despite they are involver in a carbonyl group. I would expect them to have SP2 hybridization.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions