A common method of creating a molecule in OEChem is via the SMILES representation. SMILES notation is commonly used in chemical information systems, as it provides a convenient string representation of a molecule. An introduction to SMILES syntax is provided later in this manual. For examples, below we'll use the SMILES ``c1ccccc1'' which describes the molecule benzene.
A molecule can be created from a SMILES string using the function
OEParseSmiles()
.
#include "oechem.h" using namespace OEChem; int main() { OEMol mol; OEParseSmiles(mol,"c1ccccc1"); return 0; }
The OEParseSmiles function actually returns a boolean result indicating whether the input string was a valid SMILES string. It's good programming practice to check the return value and report an error message if anything went wrong. The following example uses C++'s iostream library to report the error.
#include "oechem.h" #include <iostream> using namespace OEChem; using namespace std; int main() { OEMol mol; if (OEParseSmiles(mol,"c1ccccc1")) { // Do something with the molecule! } else cerr << "SMILES string was invalid!" << endl; return 0; }
The molecule returned by OEParseSmiles preserves the aromaticity present in the input SMILES string, so for example, if benzene is expressed as ``c1ccccc1'' all atoms and bonds are marked as aromatic, but if expressed as a Kekulé form, ``C1=CC=CC=C1'' all atoms and bonds are kept aliphatic. A common task after creating a molecule from SMILES is to normalize its aromaticity with OEAssignAromaticFlags.
#include "oechem.h" #include <iostream> using namespace OEChem; using namespace std; int main() { OEMol mol; if (OEParseSmiles(mol,"c1ccccc1")) { OEAssignAromaticFlags(mol); // Do something with the molecule! } else cerr << "SMILES string was invalid!" << endl; return 0; }