This is a preliminary API and may be improved based on user feedback. It is currently available in C++ and Python.

void OECreateSmartsString(std::string &str, const OEMolBase &mol,
                          const char *smartsTag=nullptr,
                          unsigned int flavor=(OESMILESFlag::DEFAULT & ~OESMILESFlag::Canonical),
                          std::pair<const OEAtomBase*,const OEAtomBase*> *atmord=nullptr);

Generate the SMARTS string from the provided molecule using the flavors from the OESMILESFlag namespace. If the smartsTag argument is null, the data tag applied by OEParseSmarts is assumed to contain the atom and bond annotations from the SMARTS parse, otherwise an explicit generic data tag can be provided for custom SMARTS constraint annotations. Note that custom constraint annotations are not validated, so extra checking for a valid SMARTS query will be required (e.g., by calling OEParseSmarts).

The provided default flavor for the SMARTS generation suppresses reordering which can invalidate the statically captured pattern constraints. Any explicitly provided non-default flavor should also suppress reordering activity for the same reason. While the flavor is provided for user control and experimentation, be aware that only actual atom/bond properties on the molecule are considered for the flavor provided, so any SMARTS qualifiers from the smartsTag generic data are considered to be completely irrelevant during canonicalization. Extra care is also required if any atom (OESMARTSAtomFlag.Chirality) or bond (OESMARTSBondFlag.Chirality) stereo parity is encoded as into the SMARTS string, requiring one or both of OESMILESFlag.AtomStereo for tetrahedral stereo parity SMARTS encodings, or OESMILESFlag.BondStereo for cis/trans SMARTS encodings.

This function is only provided in C++ and python.