This API is currently available in C++ and Python.

bool OEUpdateDesignUnit(OEDesignUnit &du,
                        const OEChem::OEMolBase &mol,
                        const unsigned componentId, const bool retainStyle=false)

This function updates an existing OEDesignUnit object du by setting the component given by componentId with the input molecule mol, the input molecule must be valid (not empty). The component ID should be specified from constants in the OEDesignUnitComponents namespace. The optional parameter retainStyle retains the style on the input molecule, otherwise undergoes standard OEDesignUnit object styling (default). If the update function is called with an empty molecule the function returns false. In the event the update operation fails due to the inability to update a specific component, the function returns false, and the input du is cleared.


List components, co-factors, excipients etc. are updated by appending to the list. To modify one of them, we recommend getting all the molecule components from a list (e.g. co-facors), clearing that component in the designunit and adding the co-factors back where one or more have been modified.


Updating the content of a design unit invalidates the OEReceptor object stored on the design unit and it will be removed as part of the update.

See also


The example below demonstrate how to use OEUpdateDesignUnit to update an existing OEDesignUnit object.

if(!OEUpdateDesignUnit(du, lig, OEDesignUnitComponents::Ligand))
  OEThrow.Fatal("Error: Could not add the ligand to the OEDesignUnit.");