Does anyone know if there's a tool for listing the functional groups present in a molecule?
Norbert Haider from the University of Vienna has been working on the identification of functional groups for quite a while.
You might want to have a look at his checkmol/matchmol tool, which natively reads from MDL, Alchemy, and Sybyl mol files.
Other input formats may be processed after converting them using Open Babel.
RDKit is an option with a python interface. Here's an example using rdkit to find furan groups in 2-Acetylfuran:
from rdkit import Chem mol = Chem.MolFromInchi("InChI=1S/C6H6O2/c1-5(7)6-3-2-4-8-6/h2-4H,1H3") furan_smarts = "o1cccc1" furan = Chem.MolFromSmarts(furan_smarts) Chem.Mol.GetSubstructMatches(mol, furan, uniquify=True) >>> ((7, 3, 1, 2, 5),)
The length of the outer tuple is the number of matched substructures, while the integers in the inner tuple are the indices of the molecule's atoms.
Here are some other smarts strings:
aldehydes: [CX3H1](=O)[#6] esters: [#6][CX3](=O)[OX2H0][#6] ketones: [#6][CX3](=O)[#6] amides: C(=O)-N thiol groups: [SH]
The FP4 fingerprint in Open Babel matches a set of SMARTS patterns for functional groups against a molecule. Usually the results is a binary fingerprint, but the "-xs" option below prints out the names of the matching patterns. Here are the results for acetamide, for example:
> obabel -:CC(=O)N -ofpt -xfFP4 -xs > Primary_carbon Carboxylic_acid_derivative Amide Primary_amide C_ONS_bond 1,3-Tautomerizable