Source code for bbprep._internal.processes.torsion
import stk
import stko
from bbprep._internal.ensemble.ensemble import Conformer
from .process import TargetProcess
[docs]
class TargetTorsion(TargetProcess):
"""Get the molecule with the closest torsion to the target."""
def _run_process(
self,
conformer: Conformer,
conformer_id: int,
) -> float:
key = stk.Smiles().get_key(conformer.molecule) + f"__{conformer_id}"
if key in self._data:
return self._data[key]
atom_positions = self._selector.get_atomic_positions(
conformer.molecule
)
expected = 4
if len(atom_positions) != expected:
msg = f"Selector found {len(atom_positions)} atoms, not 4"
raise RuntimeError(msg)
value = stko.calculate_dihedral(
pt1=atom_positions[0],
pt2=atom_positions[1],
pt3=atom_positions[2],
pt4=atom_positions[3],
)
self._save_to_data(conformer, conformer_id, value)
return self._data[key]