Skip to content

Gridmesh

Grid mesh construction and manipulation for pocket detection.

This module provides the GridMesh class, which represents a box of equidistant 3D points used during POVME's pocket-detection phase. The class supports:

  • Generating a regular grid that encompasses a protein's bounding box.
  • Removing points outside a convex hull.
  • Removing points that clash with protein atoms.
  • Filtering isolated points that lack sufficient neighbors.
  • Expanding the grid to higher resolution around surviving points.
  • Separating surviving points into distinct pockets.

GridMesh(box, res)

A class representing a box of equidistant points.

Initialize the class.

PARAMETER DESCRIPTION

box

A numpy array representing two 3D points, (min_x, min_y, min_z) and (max_x, max_y, max_z), that define a box.

TYPE: NDArray[float64]

res

The space between the points of the box, in the X, Y, and Z direction.

TYPE: float

points = np.array(list(zip(x.ravel(), y.ravel(), z.ravel())))

write_pdbs = write_pdbs()

__snap_float(val, res)

Snaps an arbitrary point to the nearest grid point.

PARAMETER DESCRIPTION

val

A numpy array corresponding to a 3D point.

TYPE: NDArray[float64]

res

The resolution (distance in the X, Y, and Z directions between adjacent points) of the grid.

TYPE: float

RETURNS DESCRIPTION
NDArray[float64]

A numpy array corresponding to a 3D point near val that is on a nearby grid point.

__unique_points()

Identifies unique points (rows) in an array of points.

PARAMETER DESCRIPTION

a

A n x 3 np.array representing 3D points.

RETURNS DESCRIPTION

A n x 2 np.array containing the 3D points that are unique.

expand_around_existing_points(num_pts, reso)

Add points to the current box that surround existing points, essentially increasing the resolution of the box.

For each surviving grid point, new points are placed at all integer multiples of reso within a cube of half-width num_pts x reso centred on the original point. Duplicates are removed.

PARAMETER DESCRIPTION

num_pts

An int, the number of points to place on each side of the existing points, in the X, Y, and Z directions.

res

The distance between adjacent added points.

filter_isolated_points_until_no_change(reso, number_of_neighbors)

Iteratively remove points with too few neighbors.

Points on the fringe of a pocket often have fewer grid neighbors than points in the pocket interior. This method repeatedly removes any point with fewer than number_of_neighbors neighbors (counted within the diagonal distance of one grid cell) until the point set stabilizes.

PARAMETER DESCRIPTION

res

The grid spacing. The neighbor cutoff is derived as reso x sqrt(3) x 1.1 to include diagonal (kitty-corner) neighbors.

number_of_neighbors

The minimum number of permissible neighbors.

remove_all_points_close_to_other_points(other_points, dist_cutoff, config)

Remove grid points that are within a cutoff of protein atoms.

PARAMETER DESCRIPTION

other_points

An (m, 3) array of protein-atom coordinates.

TYPE: NDArray[float64]

dist_cutoff

Grid points closer than this distance to any atom are removed.

TYPE: float

config

Configuration object (n_cores, use_ray).

TYPE: PocketVolumeConfig

remove_points_outside_convex_hull(hull, config)

Removes box points that are outside a convex hull.

PARAMETER DESCRIPTION

hull

The convex hull.

config

Configuration object containing n_cores.

separate_out_pockets()

Partition surviving points into distinct pockets.

Two points belong to the same pocket if they are connected through a chain of grid neighbors (26-connectivity, i.e., including diagonal/kitty-corner neighbors).

  1. Points are mapped to integer (i, j, k) indices by subtracting the grid minimum and dividing by the grid spacing.
  2. A 3D boolean volume is constructed and filled at the appropriate indices.
  3. scipy.ndimage.label performs connected-component labelling with 26-connectivity.
  4. Each connected component is extracted as a separate pocket.
RETURNS DESCRIPTION
list[NDArray[float64]]

A list of (n_i, 3) arrays, one per pocket, sorted in descending order of point count (largest pocket first).

to_pdb(let='X')

Converts the points in this box into a PDB representation.

PARAMETER DESCRIPTION

let

An optional string, the chain ID to use. "X" by default.

DEFAULT: 'X'

RETURNS DESCRIPTION

A PDB-formatted string.

TaskRemovePointsOutsideHull

Bases: RayTaskGeneral

A class to remove points outside a convex hull using multiple processors.

process_item(item)

Removes points outside the convex hull.

PARAMETER DESCRIPTION

item

A tuple containing: - hull: The convex hull object. - some_points: A numpy array of points to be tested.

TYPE: tuple[Any, NDArray[float64]]

RETURNS DESCRIPTION
NDArray[float64]

A numpy array of points that are inside the convex hull.