Source code for lib5c.tools.colorscale

import argparse

from lib5c.tools.parents import primerfile_parser


[docs]def add_colorscale_tool(parser): colorscale_parser = parser.add_parser( 'colorscale', prog='lib5c colorscale', help='compute regional colorscales for comparing replicates', parents=[primerfile_parser] ) colorscale_parser.add_argument( 'type', type=str, choices=['obs', 'obs_over_exp'], help='''Specify whether you want to compute an observed colorscale or an observed over expected colorscale.''') colorscale_parser.add_argument( 'outfile', type=str, help='''Filename to save the computed colorscales to.''') colorscale_parser.add_argument( '-m', '--max_percentile', type=float, default=98, help='''When computing an observed colorscale, the percentile to use when computing the maximum end of the colorscale. Default is 98.''') colorscale_parser.add_argument( '-b', '--log_base', type=str, default='None', help='''Pass this flag to log the input data using the given base before computing. The default is None, which applies no logging.''') colorscale_parser.add_argument( '-e', '--pseudocount', type=float, default=1.0, help='''Pass this flag to specify a psuedocount to use before logging the data. The default is 1.0.''') colorscale_parser.add_argument( 'countsfiles', type=str, nargs=argparse.REMAINDER, help='''Countsfiles to compute colorscales for.''') colorscale_parser.set_defaults(func=colorscale_tool)
[docs]def colorscale_tool(parser, args): import glob from lib5c.tools.helpers import resolve_primerfile from lib5c.parsers.primers import load_primermap from lib5c.parsers.counts import load_counts from lib5c.util.scales import compute_regional_obs_scale,\ compute_regional_obs_over_exp_scale from lib5c.util.counts import parallel_log_counts from lib5c.writers.config import write_config # resolve primerfile primerfile = resolve_primerfile(args.countsfiles, args.primerfile) # expand infiles expanded_infiles = [] for infile in args.countsfiles: expanded_infiles.extend(glob.glob(infile.strip('\'"'))) # load counts primermap = load_primermap(primerfile) counts_superdict = {expanded_infile: load_counts(expanded_infile, primermap) for expanded_infile in expanded_infiles} # support logging if args.log_base != 'None': counts_superdict = { expanded_infile: parallel_log_counts( counts_superdict[expanded_infile], pseudocount=args.pseudocount, base=args.log_base) for expanded_infile in counts_superdict} if args.type == 'obs': colorscales = { region: compute_regional_obs_scale( counts_superdict, region, top_percentile=args.max_percentile) for region in primermap.keys() } else: colorscales = { region: compute_regional_obs_over_exp_scale(counts_superdict, region) for region in primermap.keys() } # write config write_config(args.outfile, 'colorscales', colorscales)