OETorsionScan

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 corresponding relative energies.

dst

The output multi-conformation molecule that stores conformations corresponding to the points on the scan.

src

The input molecule of which torsion is scanned.

torsion

The torsion of the input molecule that is being scanned.

opts

The option that stores parameters for the scan such as force field, environment (vacuum or solution), and resolution (OETorsionScanOptions).

Note

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 probability of finding the minimum energy path for a given torsion. The indication that the torsion profile is not the minimum energy path is the occurrence 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.

Note

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;

OESz::OETorsionScanOptions opts;
opts.SetDelta(30.0);
opts.SetForceFieldType(OESz::OEForceFieldType::MMFF94);
opts.SetSolvationType(OESz::OESolventModel::NoSolv);
opts.SetNumStarts(2);
opts.SetOverlapDiv(4);

for (OEIter<OETorsion> ti = OEGetTorsions(mol); ti; ++ti)
{
  cout << "Torsion: " << ti->a->GetIdx() << " " << ti->b->GetIdx() << " "
                      << ti->c->GetIdx() << " " << ti->d->GetIdx() << endl;
  for(OEIter<OESz::OETorsionScanResult> ri = OETorsionScan(outmol, mol, *ti, opts); ri; ++ri)
  {
    cout << ri->GetAngle() << " " << ri->GetEnergy() << endl;
  }
}