Source code for lib5c.writers.hic

"""
Module for writing contact matrices to text files formatted in the style of Rao
et al.'s GEO submission.
"""

from lib5c.util.parallelization import parallelize_regions
from lib5c.util.system import check_outdir


[docs]@parallelize_regions def write_rao_matrix(matrix, resolution, outfile): """ Function for writing matrices to text files formatted in the style of Rao et al.'s GEO submission. See https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE63525 for more details. Parameters ---------- matrix : np.ndarray The matrix to write to file. resolution : int The resolution of the matrix, in base pairs. outfile : str String reference to the file to write to. Notes ----- To write matrices for all chromosomes in one call, try: write_rao_matrix(counts_dict, 40000, {chrom: 'outdir/%s.matrix' % chrom for chrom in counts_dict}) Examples -------- >>> import numpy as np >>> from lib5c.writers.hic import write_rao_matrix >>> from lib5c.parsers.hic import load_range_from_contact_matrix >>> matrix = np.arange(16).reshape((4, 4)) >>> matrix += matrix.T >>> write_rao_matrix(matrix, 10000, 'test/rao_matrix_written.matrix') >>> grange = {'chrom': 'chr1', 'start': 0, 'end': 40000} >>> parsed_matrix, _ = load_range_from_contact_matrix( ... 'test/rao_matrix_written.matrix', grange) >>> np.all(matrix == parsed_matrix) True """ check_outdir(outfile) with open(outfile, 'w') as handle: for i in range(len(matrix)): for j in range(i + 1): if matrix[i, j] > 0: handle.write('%i\t%i\t%s\n' % (i * resolution, j * resolution, matrix[i, j]))