Source code for lib5c.tools.bin

from lib5c.tools.parents import simple_in_out_parser, filter_parser, \
    parallelization_parser


[docs]def add_bin_tool(parser): bin_parser = parser.add_parser( 'bin', prog='lib5c bin', help='bin fragment-level counts', parents=[simple_in_out_parser, filter_parser, parallelization_parser] ) bin_parser.add_argument( '-p', '--primerfile', type=str, help='''Primer file to use. If this flag is not present, the first .bed file whose filename contains the substring 'primer' next to the .counts file specified in countsfile will be used.''') bin_parser.add_argument( '-b', '--binfile', type=str, help='''Bin file to use. If this flag is not present, the first .bed file whose filename contains the substring 'bin' next to the .counts file specified in infiles will be used.''') bin_parser.set_defaults(func=bin_tool)
[docs]def bin_tool(parser, args): import glob import os from lib5c.parsers.primers import load_primermap from lib5c.parsers.counts import load_counts from lib5c.writers.counts import write_counts from lib5c.util.primers import guess_bin_step from lib5c.tools.helpers import resolve_parallel from lib5c.algorithms.filtering.filter_functions import make_filter_function from lib5c.algorithms.filtering.fragment_bin_filtering import \ fragment_bin_filter from lib5c.algorithms.filtering.unsmoothable_columns import \ wipe_unsmoothable_columns resolve_parallel(parser, args, subcommand='bin') # resolve primerfile if args.primerfile is None: resolved_primerfile = glob.glob( os.path.join(os.path.split(args.infile)[0], '*primer*.bed'))[0] else: resolved_primerfile = args.primerfile # resolve binfile if args.binfile is None: resolved_binfile = glob.glob( os.path.join(os.path.split(args.infile)[0], '*bin*.bed'))[0] else: resolved_binfile = args.binfile # get primermap and pixelmap pixelmap = load_primermap(resolved_binfile) primermap = load_primermap(resolved_primerfile) # resolve sigma and norm_order resolved_sigma = args.sigma if args.sigma is not None else args.window_width resolved_norm_order = args.norm_order is not None if args.norm_order else 1 # construct filter function filter_function = make_filter_function( function=args.function, threshold=args.threshold, norm_order=resolved_norm_order, bin_width=guess_bin_step(pixelmap[list(pixelmap.keys())[0]]), sigma=resolved_sigma, inverse=args.inverse, gaussian=args.gaussian ) # load counts counts = load_counts(args.infile, primermap) # smooth counts filtered_counts = fragment_bin_filter( counts, filter_function, pixelmap, primermap, args.window_width / 2, midpoint=args.midpoint) # honor -W/--wipe_unsmoothable_columns if args.wipe_unsmoothable_columns: filtered_counts = wipe_unsmoothable_columns( filtered_counts, primermap, pixelmap, args.window_width, midpoint=args.midpoint) # write counts write_counts(filtered_counts, args.outfile, pixelmap)