Source code for hic3defdr.util.apa

import numpy as np

from hic3defdr.util.clusters import cluster_to_slices


[docs]def make_apa_stack(matrix, clusters, width, min_dist=None): """ Creates a stack of square matrix slices centered on each cluster in a list. Parameters ---------- matrix : scipy.spmatrix The matrix to take slices of. clusters : list of clusters The clusters around which to take the slices. Each cluster should be a list of [x, y] pairs representing the points in that cluster. width : int The width of the slice to take in bin units. Should be odd. min_dist : int, optional Clusters with interaction distances shorter than this (in bin units) will be given an slice of all nan's. Pass None to use a sane default. Returns ------- np.ndarray This array will have three dimensions. The first axis represents the clusters, the next two represent the square slice for each cluster. The array may contain nan's. """ matrix = matrix.tocsr() if min_dist is None: min_dist = width + 1 stack = np.zeros((len(clusters), width, width)) size = max(matrix.shape) r = int(width / 2) for idx, cluster in enumerate(clusters): com = np.mean([np.array(p) for p in cluster], axis=0) if np.abs(np.diff(com)) < min_dist or com[0] < r or com[1] < r or \ size - com[0] < r or size - com[1] < r: stack[idx, :, :] = np.nan else: stack[idx, :, :] = \ matrix[cluster_to_slices(cluster, width)].toarray() return stack