Hello all, Digging around within the documentation the imidazole example I shared is yet another example on how RDKit defines aromaticity. I know there might be a lot of nuance here since RDKit already makes it clear aromaticity is difficult, but here is what I don't understand.
RDKit gives examples of their aromaticity model, found [here]( https://www.rdkit.org/docs/RDKit_Book.html#the-rdkit-aromaticity-model). Applying the examples given in the table possibly would explain the behavior I am observing, but the nomenclature is going over my head. For example the table shows an atomic environment 'c(a)a' contributing one pi-electron. Breaking down the terms, 'a' is any aromatic atom (this is given in the footnote of the table), and I assume 'c' is a carbon atom. Using the daylight nomenclature I would read the parenthesized expression as a branch containing any aromatic atom. Is that correct? Also, if the atomic environment of 'c(a)a' is showing at most three atoms (one carbon, one branching aromatic atom, and then another aromatic atom), which atom is contributing the single pi-electron. If anyone had any thoughts on how to read the table, it would be appreciated. I didn't have any responses on my last email, but I thought I would add what I dug up. Hopping it might help. I thought the AtomParis might be using another flavor of aromaticity, such as [MDL]( https://www.rdkit.org/docs/RDKit_Book.html#the-mdl-aromaticity-model), where five-member rings are never considered aromatic. This doesn't seem to be the case since every atom is aromatic, and every bond in the ring is aromatic. I found the isRingAromatic from [Greg]( https://sourceforge.net/p/rdkit/mailman/message/23801106/) >>> from rdkit import Chem >>> def isRingAromatic(mol,bondRing): ... for id in bondRing: ... if not mol.GetBondWithIdx(id).GetIsAromatic(): ... return False ... return True ... >>> m = Chem.MolFromSmiles('C1=CN=CN1') >>> ri = m.GetRingInfo() >>> isRingAromatic(m,ri.BondRings()[0]) True >>> [m.GetBondWithIdx(id).GetIsAromatic() for id in range(0,5)] [True, True, True, True, True] v/r, Ben On Thu, Nov 21, 2019 at 11:06 PM Benjamin Datko < benjamin.datko....@gmail.com> wrote: > Hi all, > > When counting the number of pi-electrons in Imidazole, I would expect a > total of 6 pi-electrons, and the contribution of pi-electrons from the > nitrogen atoms showing 2 and 1. > > But both pyScorePair and NumPiElectrons within AtomPairs only show 5 > pi-electrons, missing the pi-electron from one of the nitrogens. What am > I missing? > > >>> from rdkit import rdBase > >>> rdBase.rdkitVersion,rdBase.boostVersion > > ('2019.03.4', '1_70') > > >>> from rdkit import Chem > >>> from rdkit.Chem.AtomPairs import Pairs > > >>> m = Chem.MolFromSmiles('C1=CN=CN1') > >>> score = Pairs.pyScorePair(m.GetAtomWithIdx(2),m.GetAtomWithIdx(4),3) > >>> Pairs.ExplainPairScore(score) > (('N', 2, 1), 3, ('N', 2, 1)) > > >>> [Chem.AtomPairs.Utils.NumPiElectrons(atom) for atom in m.GetAtoms()] > [1, 1, 1, 1, 1] > >
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss