Source code for lib5c.writers.wustl

"""
Module for writing WashU Epigenome Browser-style interaction data files.
"""

from lib5c.util.system import check_outdir


[docs]def write_wustl(counts, outfile, pixelmap): """ Writes a WashU Epigenome Browser-style interaction data file. Parameters ---------- counts : dict of 2d arrays The counts to be written. The keys are the region names. The values are the arrays of counts values for that region. These arrays should be square and symmetric. outfile : str String reference to the file to write counts to. pixelmap : dict of lists of dicts The keys of the outer dict are region names. The values are lists, where the ``i`` th entry represents the ``i`` th bin in that region. Bins are represented as dicts with the following structure:: { 'chrom': str, 'start': int, 'end' : int, 'name' : str } See ``lib5c.parsers.get_pixelmap()``. """ check_outdir(outfile) with open(outfile, 'wb') as handle: interaction_id = 1 for region in counts: for i in range(len(counts[region])): left_bin = pixelmap[region][i] for j in range(len(counts[region])): direction = '+' if i == j: continue elif i > j: direction = '-' right_bin = pixelmap[region][j] handle.write('%s\t%i\t%i\t%s:%i-%i,%s\t%i\t%s\n' % (left_bin['chrom'], left_bin['start'], left_bin['end'], right_bin['chrom'], right_bin['start'], right_bin['end'], counts[region][i, j], interaction_id, direction)) interaction_id += 1
# test client
[docs]def main(): from lib5c.parsers.counts import load_counts from lib5c.parsers.primers import load_primermap pixelmap = load_primermap('test/bins.bed') counts = load_counts('test/test.counts') write_wustl(counts, 'test/wustl.txt', pixelmap)
if __name__ == "__main__": main()