Source code for molecular_simulations.utils.mda_utils

import MDAnalysis as mda
import numpy as np
from pathlib import Path
from rust_simulation_tools import (kabsch_align,
                                   unwrap_system,
                                   rewrap_system)
from typing import Optional

[docs] def trim_trajectory(u: mda.Universe, out: Path, stride: int=1, align: bool=False, rewrap: bool=False, sel: Optional[str]=None, align_sel: Optional[str]=None,) -> None: if sel is not None: selection = u.select_atoms(sel) else: selection = u.atoms positions = np.zeros((u.trajectory.n_frames // stride, selection.n_atoms, 3), dtype=np.float32) for i, ts in u.trajectory[::stride]: positions[i, ...] = selection.positions.copy().astype(np.float32) if align: if align_sel is None: align_idx = selection.select_atoms('backbone or nucleicbackbone').ix else: align_idx = selection.select_atoms(align_sel).ix positions = kabsch_align(positions, positions[0], align_idx) if rewrap: pass with mda.Writer(str(out), n_atoms=selection.n_atoms) as W: for pos in positions: W.write(pos)