Source code for lib5c.tools.divide
from lib5c.tools.parents import parallelization_parser, primerfile_parser
[docs]def add_divide_tool(parser):
divide_parser = parser.add_parser(
'divide',
prog='lib5c divide',
help='divide countsfiles',
parents=[primerfile_parser, parallelization_parser]
)
divide_parser.add_argument(
'dividend',
type=str,
help='''Countsfile to divide, or a glob-expandable string to divide
multiple countsfiles in parallel.''')
divide_parser.add_argument(
'divisor',
type=str,
help='''Countsfile to divide by, or a pattern containing %%s which will
be replaced by the replicate name if multiple countsfiles are specified
in dividend.''')
divide_parser.add_argument(
'quotient',
type=str,
help='''Countsfile to write output to, or a pattern containing %%s which
will be replaced by the replicate name if multiple countsfiles are
specified in dividend.''')
divide_parser.set_defaults(func=divide_tool)
[docs]def divide_tool(parser, args):
from lib5c.tools.helpers import resolve_primerfile, resolve_parallel
from lib5c.parsers.primers import load_primermap
from lib5c.parsers.counts import load_counts
from lib5c.util.counts import parallel_divide_counts
from lib5c.writers.counts import write_counts
# resolve primerfile and parallel
primerfile = resolve_primerfile(args.dividend, args.primerfile)
resolve_parallel(parser, args, subcommand='divide', key_arg='dividend')
# load counts
print('loading counts')
primermap = load_primermap(primerfile)
dividend = load_counts(args.dividend, primermap)
divisor = load_counts(args.divisor, primermap)
# divide
print('dividing counts')
quotient = parallel_divide_counts(dividend, divisor)
# write output
print('writing counts')
write_counts(quotient, args.quotient, primermap)