示例#1
0
def _get_mod_stats_queue(
    mod_stats_q,
    mod_conn,
    out_dir,
    mod_names,
    ref_names_and_lens,
    out_suffix,
    write_mod_lp,
    mod_output_fmts,
):
    def get_mod_site():
        # function for profiling purposes
        return mod_stats_q.get(block=True, timeout=0.01)

    agg_mod_bn = mh.get_megalodon_fn(out_dir, mh.MOD_NAME)
    if out_suffix is not None:
        agg_mod_bn += "." + out_suffix
    agg_mod_fps = []
    if mh.MOD_BEDMETHYL_NAME in mod_output_fmts:
        agg_mod_fps.append(mods.ModBedMethylWriter(agg_mod_bn, mod_names, "w"))
    if mh.MOD_VCF_NAME in mod_output_fmts:
        agg_mod_fps.append(
            mods.ModVcfWriter(
                agg_mod_bn,
                mod_names,
                "w",
                ref_names_and_lens=ref_names_and_lens,
                write_mod_lp=write_mod_lp,
            ))
    if mh.MOD_WIG_NAME in mod_output_fmts:
        agg_mod_fps.append(mods.ModWigWriter(agg_mod_bn, mod_names, "w"))

    while True:
        try:
            mod_sites_batch = get_mod_site()
            for mod_site in mod_sites_batch:
                for agg_mod_fp in agg_mod_fps:
                    agg_mod_fp.write_mod_site(mod_site)
        except queue.Empty:
            if mod_conn.poll():
                break
            continue

    while not mod_stats_q.empty():
        mod_sites_batch = mod_stats_q.get(block=False)
        for mod_site in mod_sites_batch:
            for agg_mod_fp in agg_mod_fps:
                agg_mod_fp.write_mod_site(mod_site)
    for agg_mod_fp in agg_mod_fps:
        agg_mod_fp.close()
示例#2
0
def _get_mod_stats_queue(mod_stats_q, mod_conn, out_dir, mod_names,
                         ref_names_and_lens, out_suffix, write_mod_lp,
                         mod_output_fmts):
    def get_mod_site():
        # function for profiling purposes
        return mod_stats_q.get(block=False)

    def do_sleep():
        # function for profiling purposes
        sleep(0.001)
        return

    agg_mod_bn = mh.get_megalodon_fn(out_dir, mh.MOD_NAME)
    if out_suffix is not None:
        agg_mod_bn += '.' + out_suffix
    agg_mod_fps = []
    if mh.MOD_BEDMETHYL_NAME in mod_output_fmts:
        agg_mod_fps.append(mods.ModBedMethylWriter(agg_mod_bn, mod_names, 'w'))
    if mh.MOD_VCF_NAME in mod_output_fmts:
        agg_mod_fps.append(
            mods.ModVcfWriter(agg_mod_bn,
                              mod_names,
                              'w',
                              ref_names_and_lens=ref_names_and_lens,
                              write_mod_lp=write_mod_lp))
    if mh.MOD_WIG_NAME in mod_output_fmts:
        agg_mod_fps.append(mods.ModWigWriter(agg_mod_bn, mod_names, 'w'))

    while True:
        try:
            mod_site = get_mod_site()
            for agg_mod_fp in agg_mod_fps:
                agg_mod_fp.write_mod_site(mod_site)
        except queue.Empty:
            if mod_conn.poll():
                break
            do_sleep()
            continue

    while not mod_stats_q.empty():
        mod_site = mod_stats_q.get(block=False)
        for agg_mod_fp in agg_mod_fps:
            agg_mod_fp.write_mod_site(mod_site)
    for agg_mod_fp in agg_mod_fps:
        agg_mod_fp.close()

    return