Source code for lib5c.tools.convergency
from lib5c.tools.parents import primerfile_parser, lim_parser
[docs]def add_convergency_tool(parser):
convergency_parser = parser.add_parser(
'convergency',
prog='lib5c plot convergency',
help='compute transcription factor convergency',
parents=[primerfile_parser, lim_parser]
)
convergency_parser.add_argument(
'-i', '--image',
type=str,
help='''Specify an output file to write output as image.''')
convergency_parser.add_argument(
'-s', '--strand_column',
type=int,
default=5,
help='''The 0-based index of the column in the motiffile which contains
the strand information (+/-). Default is 5.''')
convergency_parser.add_argument(
'-m', '--margin',
type=int,
default=0,
help='''The margin for error (in bin units) with which to judge the
intersections. Default is 0.''')
convergency_parser.add_argument(
'-l', '--loop_classes',
type=str,
default='constitutive',
help='''The loop classes to consider, passed as a shell-quoted,
comma-separated list. Default is 'constitutive'.''')
convergency_parser.add_argument(
'motiffile',
type=str,
help='''Bedfile describing motifs.''')
convergency_parser.add_argument(
'peakfile',
type=str,
help='''Bedfile describing occupied peaks.''')
convergency_parser.add_argument(
'countsfile',
type=str,
help='''Countsfiles of loop classes.''')
convergency_parser.set_defaults(func=convergency_tool)
[docs]def convergency_tool(parser, args):
from lib5c.tools.helpers import resolve_primerfile
from lib5c.parsers.primers import load_primermap
from lib5c.parsers.counts import load_counts
from lib5c.parsers.bed import load_features
from lib5c.algorithms.convergency import compute_convergency
from lib5c.plotters.convergency import plot_convergency
# resolve plot_kwargs
xlim = list(map(float, args.xlim.strip('()').split(','))) \
if args.xlim is not None else None
ylim = list(map(float, args.ylim.strip('()').split(','))) \
if args.ylim is not None else None
# resolve primerfile
primerfile = resolve_primerfile(args.countsfile, args.primerfile)
# resolve loop classes
loop_classes = list(
map(str.strip, args.loop_classes.strip('()').split(',')))
# parse things
peaks = load_features(args.peakfile)
motifs = load_features(args.motiffile, id_index=args.strand_column)
primermap = load_primermap(primerfile)
loops = load_counts(args.countsfile, primermap)
# compute convergency
convergency_results = compute_convergency(
loops, primermap, peaks, motifs, loop_classes=loop_classes,
margin=args.margin)
# print to console
for k in sorted(convergency_results.keys()):
print('%s: %s (%s)' % (k, convergency_results[k]['foldchange'],
convergency_results[k]['pvalue']))
# plot bargraph
if args.image is not None:
plot_convergency(convergency_results, xlim=xlim, ylim=ylim,
outfile=args.image)