class OETorLib

This class represents OETorLib.



Default and copy constructors.

operator bool

operator bool() const

Returns false if the torlib if empty, otherwise returns true.


void AddTorsionLibrary(const std::string &)
void AddTorsionLibrary(OEPlatform::oeistream &)

Takes a string or an oeistream to add a torsion library. This will put the new torsion library above the current torsion library, which means that they will be checked first for a match. To replace the torsion library, call OETorLib.SetTorsionLibrary. The format for rules is a SMARTS pattern followed by the torsion angles. The following is an example of a general rule:

[*:1][CH2:2][a:3][a:4] 0 180 90 -90 45 -45 135 -135


bool AddTorsionRule(const std::string &)

Add a single torsion rule as a string. The string should be in the same format as a single line from a torsion library file. The following code demonstrates how to add a new torsion rule to an existing OEOmega object named omega.

Example of adding a new torsion rule

// Adding the torsion rule "[O:1]=[C:2]-[O:3][CH3:4] 90" as a string
// This takes precedent over previous rule
string rule = "[O:1]=[C:2]-[O:3][CH3:4] 90";
    OEChem.OEThrow.Fatal("Failed to add torsion rule: " + rule);

    OEChem.OEWriteMolecule(ofs, mol);

The new rule will take precedence over all rules previously added to this object either from a file or calling this method.

bool AddTorsionRule(OEChem::OEQMolBase &qmol, std::vector<int> &degrees)

The next signature of AddTorsionRule takes a generic OEQMolBase with a corresponding std::vector<int> containing the angles. The pattern represented by OEQMolBase should have map indices set on the atoms considered the torsion. In SMARTS this means the atoms should have map indices numbered from 1-4. This can theoretically allow torsion rules to be written in other query file formats provided there is a method for setting the appropriate map indices. The following code demonstrates how to initialize an OEQMolBase and use it to define a new torsion rule.

Example of adding a new torsion rule from a query molecule

// Adding torsion rule "[O:1]=[C:2]-[O:3][CH3:4] 45" as a query
// molecule. This takes precedent over default rule
OEQMol qmol = new OEQMol();
OEChem.OEParseSmarts(qmol, "[O:1]=[C:2]-[O:3][CH3:4]");
OEIntVector degrees = new OEIntVector();

if (!torlib.AddTorsionRule(qmol, degrees))
    OEChem.OEThrow.Fatal("Failed to add torsion rule");

if (omega.Call(mol))
    OEChem.OEWriteMolecule(ofs, mol);


void ClearTorsionLibrary()

Clear the current torsion library. Omega cannot operate with an empty torsion library, so a new torsion library must be set before running Omega.


OESystem::OEIterBase<OEChem::OESubSearch> *GetTorRules()

Returns an iterator over the torsion rules. The rules are stored as OESubSearch objects.


void ResetTorsionLibrary()

Resets the torsion library stored internally by Omega.


void SetTorsionLibrary(const std::string &)
void SetTorsionLibrary(OEPlatform::oeistream &)

Replaces the current torsion library with the one passed in as an argument.