Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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