| # This source code is licensed under the license found in the | |
| # LICENSE file in the root directory of this source tree. | |
| # -------------------------------------------------------- | |
| # utilities for HiC matrix evaluation. | |
| # -------------------------------------------------------- | |
| import numpy as np | |
| import logging | |
| def get_oe_matrix(matrix, bound = 100000000, oe=True): | |
| max_offset = min(matrix.shape[0], bound) | |
| expected = [np.mean(np.diagonal(matrix, offset)) for offset in range(max_offset)] | |
| if oe: | |
| e_matrix = np.zeros_like(matrix, dtype=np.float32) | |
| oe_matrix = np.zeros_like(matrix, dtype=np.float32) | |
| for i in range(matrix.shape[0]): | |
| for j in range(max(i-bound+1, 0), min(i+bound, matrix.shape[1])): | |
| e_matrix[i][j] = expected[abs(i-j)] | |
| oe_matrix[i][j] = matrix[i][j]/expected[abs(i-j)] if expected[abs(i-j)] != 0 else 0 | |
| return oe_matrix, e_matrix | |
| else: | |
| return expected | |
| def print_info(s:str): | |
| print(s) | |
| logging.info(s) | |