Package org.openscience.cdk.aromaticity
Class Aromaticity
java.lang.Object
org.openscience.cdk.aromaticity.Aromaticity
A configurable model to perceive aromatic systems. Aromaticity is useful as
both a chemical property indicating stronger stabilisation and as a way to
treat different resonance forms as equivalent. Each has its own implications
the first in physicochemical attributes and the second in similarity,
depiction and storage.
To address the resonance forms, several simplified (sometimes conflicting)
models have arisen. Generally the models loosely follow
Hückel's rule
for determining aromaticity. A common omission being that planarity is not
tested and chemical compounds which are non-planar can be perceived
as aromatic. An example of one such compound is, cyclodeca-1,3,5,7,9-pentaene.
Although there is not a single universally accepted model there are models
which may better suited for a specific use (Cheminformatics Toolkits: A Personal Perspective, Roger Sayle).
The different models are often ill-defined or unpublished but it is important
to acknowledge that there are differences.
Although models may get more complicated (e.g. considering tautomers)
normally the reasons for differences are:
Recommended Usage:
Which model/cycles to use depends on the situation but a good general purpose configuration is shown below:
- the atoms allowed and how many electrons each contributes
- the rings/cycles are tested
ElectronDonation
model and CycleFinder
. To obtain an instance
of the electron donation model use one of the factory methods,
ElectronDonation.cdk()
, ElectronDonation.cdkAllowingExocyclic()
,
ElectronDonation.daylight()
or ElectronDonation.piBonds()
.
Recommended Usage:
Which model/cycles to use depends on the situation but a good general purpose configuration is shown below:
ElectronDonation model = ElectronDonation.daylight(); CycleFinder cycles = Cycles.or(Cycles.all(), Cycles.all(6)); Aromaticity aromaticity = new Aromaticity(model, cycles); // apply our configured model to each molecule for (IAtomContainer molecule : molecules) { aromaticity.apply(molecule); }
- Author:
- John May
- See Also:
- Source code:
- main
- Belongs to CDK module:
- standard
-
Constructor Summary
ConstructorsConstructorDescriptionAromaticity
(ElectronDonation model, CycleFinder cycles) Create an aromaticity model using the specified electron donationmodel
which is tested on thecycles
. -
Method Summary
Modifier and TypeMethodDescriptionboolean
apply
(IAtomContainer molecule) Apply this aromaticity model to a molecule.static Aromaticity
Access an aromaticity instance that replicates the previously utilised - CDKHueckelAromaticityDetector.findBonds
(IAtomContainer molecule) Find the bonds of amolecule
which this model determined were aromatic.
-
Constructor Details
-
Aromaticity
Create an aromaticity model using the specified electron donationmodel
which is tested on thecycles
. Themodel
defines how many π-electrons each atom may contribute to an aromatic system. Thecycles
defines theCycleFinder
which is used to find cycles in a molecule. The total electron donation from each atom in each cycle is counted and checked. If the electron contribution is equal to4n + 2
for an >= 0
then the cycle is considered aromatic. Changing the electron contribution model or which cycles are tested affects which atoms/bonds are found to be aromatic. There are severalElectronDonation
models andCycles
available. A good choice for the cycles is to useCycles.all()
falling back toCycles.relevant()
on failure. Finding all cycles is very fast but may produce an exponential number of cycles. It is therefore not feasible for complex fused systems and an exception is thrown. In such cases the aromaticity can either be skipped or a simpler polynomial cycle setCycles.relevant()
used.// mimics the CDKHuckelAromaticityDetector Aromaticity aromaticity = new Aromaticity(ElectronDonation.cdk(), Cycles.cdkAromaticSet()); // mimics the DoubleBondAcceptingAromaticityDetector Aromaticity aromaticity = new Aromaticity(ElectronDonation.cdkAllowingExocyclic(), Cycles.cdkAromaticSet()); // a good model for writing SMILES Aromaticity aromaticity = new Aromaticity(ElectronDonation.daylight(), Cycles.all()); // a good model for writing MDL/Mol2 Aromaticity aromaticity = new Aromaticity(ElectronDonation.piBonds(), Cycles.all());
- Parameters:
model
-cycles
-- See Also:
-
-
Method Details
-
findBonds
Find the bonds of amolecule
which this model determined were aromatic.Aromaticity aromaticity = new Aromaticity(ElectronDonation.cdk(), Cycles.all()); IAtomContainer container = ...; try { Set<IBond> bonds = aromaticity.findBonds(container); int nAromaticBonds = bonds.size(); } catch (CDKException e) { // cycle computation was intractable }
- Parameters:
molecule
- the molecule to apply the model to- Returns:
- the set of bonds which are aromatic
- Throws:
CDKException
- a problem occurred with the cycle perception - one can retry with a simpler cycle set
-
apply
Apply this aromaticity model to a molecule. Any existing aromaticity flags are removed - even if no aromatic bonds were found. This follows the idea of applying an aromaticity model to a molecule such that the result is the same irrespective of existing aromatic flags. If you require aromatic flags to be preserved thefindBonds(IAtomContainer)
can be used to find bonds without setting any flags.Aromaticity aromaticity = new Aromaticity(ElectronDonation.cdk(), Cycles.all()); IAtomContainer container = ...; try { if (aromaticity.apply(container)) { // } } catch (CDKException e) { // cycle computation was intractable }
- Parameters:
molecule
- the molecule to apply the model to- Returns:
- the model found the molecule was aromatic
- Throws:
CDKException
-
cdkLegacy
Access an aromaticity instance that replicates the previously utilised - CDKHueckelAromaticityDetector. It has the following configuration:new Aromaticity(ElectronDonation.cdk(), Cycles.cdkAromaticSet());
This model is not necessarily bad (or really considered legacy) but should not be considered a gold standard model that covers all possible cases. It was however the primary method used in previous versions of the CDK (1.4).
This factory method is provided for convenience for those wishing to replicate aromaticity perception used in previous versions. The same electron donation model can be used to test aromaticity of more cycles. For instance, the following configuration will identify more bonds in a some structures as aromatic:
new Aromaticity(ElectronDonation.cdk(), Cycles.or(Cycles.all(), Cycles.relevant()));
- Returns:
- aromaticity instance that is configured to perform identically to the primary aromaticity model in version 1.4.
-