1
$\begingroup$

I was recently exploring the VEHICLe data set and seem to have run into an inconsistency. The dataset is described as, The VEHICLe database, short for Virtual Exploratory heterocyclic library, contains all possible aromatic molecules meeting the following constraints: 1) neutral, 2) composed only of carbon, nitrogen, oxygen, sulfur, and hydrogen, 3) all atoms in rings except hydrogen and carbonyl oxygens 4) either 1 or 2 aromatic rings. The majority of these compounds have not yet been synthesized in the laboratory.

I took the resource data and extracted the SMILES and converted to Molecule by supplying the strings. The molecule object conversion works fine.

ringCounts = MoleculeValue[molecules, "AromaticRingCount"] // Counts
<|1 -> 217, 2 -> 20613, 0 -> 4037|>

However, when I count the number of rings, I get more than 4000 molecules with 0 rings. Perhaps, something is up with AromaticRingCount that the rings are not detected correctly. A couple of molecules with 0 rings are shown here. Is there something about AromaticRingCount that's not working correctly here?

SMILES strings for 10 of those molecules are posted here:

"O=c1cc2cnc(=O)c(=O)c-2c1", "O=c1cc2c(=O)c(=O)ncc-2n1", \
"O=c1cc2cnc(=O)c(=O)c-2n1", "O=c1nc2cnc(=O)c(=O)c-2n1", \
"O=c1cc2cnc(=O)c(=O)c-2cc1=O", "O=c1ncc2cnc(=O)c(=O)c=2c1=O", \
"O=c1ncc2c(=O)c(=O)ncc=2c1=O", "O=c1cc2cnc(=O)c(=O)c-2nc1=O", \
"O=c1cc2c(=O)c(=O)ncc-2nc1=O", "O=c1[nH]c2cnc(=O)c(=O)c=2c(=O)c1=O"

failing molecule enter image description here

$\endgroup$
1
  • $\begingroup$ Calling MoleculeValue[molecules,"RingCount"] identifies molecules as having only 1 or 2 rings for the entire dataset. $\endgroup$
    – bhopshang
    Commented Nov 18, 2022 at 21:41

1 Answer 1

3
$\begingroup$

Ring perception in Molecule is performed to find the smallest set of smallest rings (SSSR) which for this molecule is just the two smaller rings:

In[28]:= 
Molecule["O=c1cc2cnc(=O)c(=O)c-2c1"]["SmallestSetOfSmallestRings"]

Out[28]= {{2, 3, 4, 11, 12}, {5, 6, 7, 9, 11, 4}}

You can find all the rings using FindCyle if you prefer:

In[29]:= FindCycle[
 MoleculeGraph[Molecule["O=c1cc2cnc(=O)c(=O)c-2c1"]], Infinity, All]

Out[29]= {{2 <-> 3, 3 <-> 4, 4 <-> 11, 11 <-> 12, 12 <-> 2}, {4 <-> 11, 
  11 <-> 9, 9 <-> 7, 7 <-> 6, 6 <-> 5, 5 <-> 4}, {2 <-> 3, 3 <-> 4, 
  4 <-> 5, 5 <-> 6, 6 <-> 7, 7 <-> 9, 9 <-> 11, 11 <-> 12, 12 <-> 2}}

The important point here is that neither of the smaller rings are considered aromatic, but the enveloping ring is:

MoleculePlot[Molecule["O=c1cc2cnc(=O)c(=O)c-2c1"], {Bond[_, "Aromatic"]}]

enter image description here

So the "AromaticRingCount" property looks at each of the rings in the SSSR and checks whether all bonds in those rings are aromatic. For the two rings checked in this molecule, neither is considered aromatic by the aromaticity model used. This is less than ideal, but is generally an edge case.

You can see why the smaller rings aren't considered aromatic using this WolframAlpha query where there is a Step-by-Step to show the electron counting. I'm including a screenshot of the SBS here for completeness:

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.