Molecule FragmentationΒΆ

The OEMedChem TK currently provides four ways to partition a molecule into fragments:

These functions return an iterator over OEAtomBondSet objects that store the atoms and the bonds of the fragments.

The following examples (Listing 1, Listing 2) show how to fragment a molecule into ring and chain components. The code loops over the OEAtomBondSet objects returned by the OEGetRingChainFragments. Each OEAtomBondSet object is used to initialize an atom and a bond predicates. These predicates specify which atoms and bonds have to be considered when creating a subset of the molecule, i.e the fragment, when calling the OESubsetMol function. See the depiction of the input molecule and the generated fragments in Figure: Example of fragmentation.

Listing 1: Example of molecule fragmentation

/**********************************************************************
  Copyright (C) 2013 OpenEye Scientific Software, Inc.
***********************************************************************/
using System;
using OpenEye.OEMedChem;
using OpenEye.OEChem;

public class FragRingChain
{
    public static int Main(string[] args)
    {
        OEGraphMol mol = new OEGraphMol();
        OEChem.OESmilesToMol(mol, "COc1ccc(cc1)CC(=O)N");
        
        foreach (OEAtomBondSet abset in OEMedChem.OEGetRingChainFragments(mol)) 
        {
            OEIsAtomMember fragatompred = new OEIsAtomMember(abset.GetAtoms());
            OEIsBondMember fragbondpred = new OEIsBondMember(abset.GetBonds());

            OEGraphMol fragment = new OEGraphMol();
            bool adjustHCount = true;
            OEChem.OESubsetMol(fragment, mol, fragatompred, fragbondpred, adjustHCount);
            Console.WriteLine(OEChem.OEMolToSmiles(fragment));
        }
        return 0;
    }
}

The output of Listing 1 is the following:

CO
c1ccccc1
CC(=O)N
../_images/Fragmentation.png

Example of fragmentation (A) input molecule (B) fragments returned by the OEGetRingChainFragments function

See also

The following example (Listing 2) shows how to fragment a molecule into ring and chain components with annotations. See the depiction of the input molecule and the generated fragments in Figure: Example of Bemis Murcko fragmentation.

Listing 2: Example of molecule fragmentation with annotations

/**********************************************************************
  Copyright (C) 2013 OpenEye Scientific Software, Inc.
***********************************************************************/
using System;
using OpenEye.OEMedChem;
using OpenEye.OEChem;

public class OEGetBemisMurcko
{
    public static int Main(string[] args)
    {
        OEGraphMol mol = new OEGraphMol();
        OEChem.OESmilesToMol(mol, "CCOc1ccc(cc1)CC(OC)c2ccccc2CC(=O)N");
        
        foreach (OEAtomBondSet abset in OEMedChem.OEGetBemisMurcko(mol)) 
        {
            OEIsAtomMember fragatompred = new OEIsAtomMember(abset.GetAtoms());
            OEIsBondMember fragbondpred = new OEIsBondMember(abset.GetBonds());

            OEGraphMol fragment = new OEGraphMol();
            bool adjustHCount = true;
            OEChem.OESubsetMol(fragment, mol, fragatompred, fragbondpred, adjustHCount);
            foreach (OERole role in abset.GetRoles())
            {
              Console.WriteLine("{0} {1}", role.GetName(), OEChem.OEMolToSmiles(fragment));
            }
        }
        return 0;
    }
}

The output of Listing 2 is the following:

Framework c1ccc(cc1)CCc2ccccc2
Ring c1ccccc1.c1ccccc1
Linker CC
Sidechain CCO.CC(=O)N.CO
../_images/OEGetBemisMurcko.png

Example of Bemis Murcko fragmentation