Converting structure from Kekule 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/1806279/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/1806279/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/1806279/convert_to_aromatic_3.png images/download/thumbnails/1806279/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/1806279/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 MoleculeGraphclass. 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-2022 Chemaxon. All Rights Reserved.
     */
    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.