Source code for rpxdock.sampling.xform_grid

import numpy as np
import rpxdock.homog as hm

[docs]def grid_sym_axis(cart, ang, axis=[0, 0, 1], flip=None): if not isinstance(axis, (np.ndarray, list, tuple)): raise TypeError('axis must be ndarray, list tuple') if len(axis) not in (3, 4): raise ValueError('bad axis') if flip is not None and not isinstance(flip, (np.ndarray, list, tuple)): raise TypeError('flip axis must be ndarray, list tuple') if flip and len(flip) not in (3, 3): raise ValueError('bad flip axis') if flip and hm.hdot(axis, flip) > 0.001: raise ValueError('flip axis must be perpendicular to main axis') axis = np.array(axis[:3] / np.linalg.norm(axis[:3])) c = hm.htrans(cart[:, None] * axis[:3]) r = hm.hrot(axis, ang) grid = (r[None] @ c[:, None]).reshape(-1, 4, 4) if flip: cen = np.mean(cart) xflip = hm.hrot(flip, 180.0, axis * cen) grid = np.concatenate([grid, xflip @ grid]) return grid