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.
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.
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).
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.
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);
/*
* 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.