Converting structure from Kekulé form to aromatic form

Three methods are provided to convert a molecule from Kekulé form to aromatic form: basic, general, and loose aromaticity detection.

The basic method locates the ring atoms in the molecule connected with single and double bonds. Takes each ring in a ring system separately and sums the number of electrons. If the Hückel's rule holds, then the ring is aromatic.

There are some exceptions, when the double and single bonds are not sequential yet the ring is aromatic. In this case the atom between single bonds has an orbital which takes part in the aromatic system. (Relevant atoms: N, O, P, S, As and Se as they can donate a free electron-pair to the aromatic system and B as it can donate a molecular orbital without additional electron.) Rings of less than 5 atoms are so constrained that they cannot be aromatic.

The general method also locates the ring atoms in the molecule connected with single and double bonds, then it sums the number of electrons in the ring system and if the Hückel's rule is fulfilled, then the ring system is aromatic. In this method the atoms defining the ring system may not form a continuous ring like in benzo[de]chromene (see figure on the below), where all atoms of the molecule are in the ring system generated from the three 6 membered rings.

images/download/thumbnails/45333274/convert_to_aromatic_1.png

benzo[de]chromene

Some examples for heteroatoms in aromatic ring systems:

  • Oxygen and sulfur can share a pair of pi-electrons with the delocalized electron system like in the case of furan.

    images/download/attachments/45333274/convert_to_aromatic_2.png
    furan

  • Nitrogen can also share a pair of pi-electrons if it has three ligands, otherwise the sp2 nitrogen shares just one electron (as in pyridine).

    images/download/attachments/45333274/convert_to_aromatic_3.png

    images/download/thumbnails/45333274/convert_to_aromatic_4.png

    pyrrol

    pyridine

  • An exocyclic double bond to an electronegative atom takes out one shared pi-electron from the cycle, as in 2-pyridone or coumarin.
    images/download/thumbnails/45333274/convert_to_aromatic_5.png

    coumarin

The loose method also locates the ring atoms in the molecule connected with single and double bonds, then it sums the number of electrons in the ring system and if the Hückel's rule is fulfilled, then the ring system is aromatic. Only five membered rings, six-membered rings that can be drawn as alternating single and double bonds and the perimeter bonds of azulenes are considered.

The aromatization functions, aromatize(), aromatize(boolean a) and aromatize(int method) are located in MoleculeGraph class. While aromatize() uses the default aromatization method, in aromatize(int method) the basic (MoleculeGraph.AROM_BASIC), general (MoleculeGraph.AROM_GENERAL) or loose (MoleculeGraph.AROM_LOOSE) method can be specified.

Code example: aromatize the molecule with the default aromatization method

molecule.aromatize();

Code example: aromatize the molecule with general aromatization method

molecule.aromatize(MoleculeGraph.AROM_GENERAL);
Working example of converting a molecule to aromatic form
/*
* Copyright (c) 1998-2014 ChemAxon Ltd. All Rights Reserved.
* This software is the confidential and proprietary information of
* ChemAxon. You shall not disclose such Confidential Information
* and shall use it only in accordance with the terms of the agreements
* you entered into with ChemAxon.
*
*/
package chemaxon.examples.strucrep;
 
import chemaxon.formats.MolFormatException;
import chemaxon.formats.MolImporter;
import chemaxon.struc.MolBond;
import chemaxon.struc.Molecule;
import chemaxon.struc.MoleculeGraph;
 
/**
* Example class for aromatization.
*
* @author Janos Kendi
*
*/
public class AromatizationExample {
 
public static void main(String[] args) throws MolFormatException {
 
// Import a molecule from smiles
Molecule mol = MolImporter.importMol("O=C1NC=CC=C1");
 
// Call basic aromatization method
mol.aromatize(MoleculeGraph.AROM_BASIC);
System.out.println("Aromatic: " + isAromatic(mol));
 
// Call general aromatization method
mol.aromatize(MoleculeGraph.AROM_GENERAL);
System.out.println("Aromatic: " + isAromatic(mol));
}
 
/**
* Check if the given molecule is aromatic or not.
*
* @param m
* @return true if the molecule is aromatic, false otherwise
*/
public static boolean isAromatic(Molecule m) {
boolean aromatic = false;
for (MolBond b : m.getBondArray()) {
if (b.getType() == MolBond.AROMATIC) {
aromatic = true;
break;
}
}
return aromatic;
}
}

More information about aromatization can be found here.