OESystem::OEIterBase<OETorsionScanResult>* OETorsionScan(OEChem::OEMCMolBase& dst,
                                                         const OEChem::OEMCMolBase& src,
                                                         const OEChem::OETorsion& torsion,
                                                         const OETorsionScanOptions& opts)

Performs potential energy scan for a selected torsion in the input molecule. Torsion scan is preformed by a series of constrained Newton optimizations in which all internal degrees of freedom but selected torsion, are optimized. Returns an iterator to the OETorsionScanResult objects from which the user can obtain actual values of the torsion angle within \([0.0^{\circ}, 360.0^{\circ}]\) range and the correponding relative energies.

The output multi-conformation molecule that stores conformations corresponding to the points on the scan.
The input molecule of which torsion is scanned.
The torsion of the input molecule that is being scanned.
The option that stores parameters for the scan such as force field, environment (vacuum or solution), and resolution (OETorsionScanOptions).


Using multiple conformations for the input molecule (src) is not a requirement as the function will work for a single conformation. However using as many as possible conformations is recommended because it increases the probablilty of finding the minimum energy path for a given torsion. The indication that the torsion profile is not the minimum energy path is the occurence of sharp drop(s) of potential energy, or/and different energy values obtained for 0.0 and 360.0 degrees. Increasing the number of the input geometries in such a situation might remove those symptoms.


As the function is identifying the minimum energy path the output conformations can come from different input conformations this means the SD data from the input conformations is not passed through to the output molecule.

Example to scan all torsions of a molecule:

OEMol outmol = new OEMol();

OETorsionScanOptions opts = new OETorsionScanOptions();

foreach (OETorsion tor in OEChem.OEGetTorsions(mol))
    Console.WriteLine("Torsion: {0} {1} {2} {3}",
                      tor.a.GetIdx(), tor.b.GetIdx(),
                      tor.c.GetIdx(), tor.d.GetIdx());

    foreach (OETorsionScanResult res in OESzybkilib.OETorsionScan(outmol, mol, tor, opts))
        Console.WriteLine("{0:0.00} {1:0.00}", res.GetAngle(), res.GetEnergy());