def get_residue_vdw(self, residue, res_num, padding=3.0): """ generates a mask for the residue where points within VdW distance of residue heavy atoms are :param residue: `ccdc.prottein.Residue` :param res_num: The value which to assign to voxels in the masked area :param padding: float, padding around minimal coordinates in Angstroms :return: `hotspots.grid_extension.Grid` """ coords = np.array([a.coordinates for a in residue.atoms]) min_coords = (np.min(coords[:, 0]), np.min(coords[:, 1]), np.min(coords[:, 2])) max_coords = (np.max(coords[:, 0]), np.max(coords[:, 1]), np.max(coords[:, 2])) # Put some padding around the minimal and maximum values: g_origin = tuple(x - padding for x in min_coords) g_far_corner = tuple(y + padding for y in max_coords) layer = Grid(origin=g_origin, far_corner=g_far_corner, spacing=self.g_spacing, default=0.0, _grid=None) for a in residue.atoms: layer.set_sphere(point=a.coordinates, radius=a.vdw_radius, value=1, scaling='None') layer = self.set_uniform_values(layer, res_num) print("Size of layer: {}".format(layer.count_grid())) return layer
def _as_grid(self, feature_type=None, tolerance=2): """ returns _features as grid """ if feature_type == None: filtered_features = self._features else: filtered_features = [ feat for feat in self._features if feat.feature_type == feature_type ] x = [feat.feature_coordinates.x for feat in filtered_features] y = [feat.feature_coordinates.y for feat in filtered_features] z = [feat.feature_coordinates.z for feat in filtered_features] origin = [min(x) - tolerance, min(y) - tolerance, min(z) - tolerance] far_corner = [ max(x) + tolerance, max(y) + tolerance, max(z) + tolerance ] grd = Grid(origin=origin, far_corner=far_corner, spacing=0.5, default=0, _grid=None) for feat in filtered_features: grd.set_sphere(point=feat.feature_coordinates, radius=self.settings.radius, value=1, scaling='None') return grd
def get_grid_from_plip_coords(probe, coords, out_path, padding=4.0): """ :param probe: :param coords: :param padding: :return: """ Coordinates = collections.namedtuple('Coordinates', ['x', 'y', 'z']) dims = np.array(coords) min_coords = np.array( [np.min(dims[:, 0]), np.min(dims[:, 1]), np.min(dims[:, 2])]) max_coords = np.array( [np.max(dims[:, 0]), np.max(dims[:, 1]), np.max(dims[:, 2])]) origin = Coordinates(x=round(min_coords[0] - padding), y=round(min_coords[1] - padding), z=round(min_coords[2] - padding)) far_corner = Coordinates(x=round(max_coords[0] + padding), y=round(max_coords[1] + padding), z=round(max_coords[2] + padding)) plip_grid = Grid(origin=origin, far_corner=far_corner, spacing=0.5, default=0, _grid=None) for coo in coords: plip_grid.set_sphere(point=coo, radius=1, value=1, scaling='None') plip_grid.write(str(Path(out_path, f"plip_{probe}.ccp4").resolve())) return plip_grid