12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import argparse
- import logging
- import os
- import sys
- from .. import io
- from .. import bash
- from .. import run_support
- LOG = logging.getLogger()
- def script_run_report_pre_assembly(i_raw_reads_db_fn, i_preads_fofn_fn, genome_length, length_cutoff, o_json_fn):
- params = dict()
- params.update(locals())
- script = """\
- python3 -m falcon_kit.mains.report_pre_assembly --genome-length {genome_length} --length-cutoff {length_cutoff} --db {i_raw_reads_db_fn} --preads-fofn {i_preads_fofn_fn} --out {o_json_fn}
- """
- return script.format(**params)
- def run(config_fn, length_cutoff_fn, raw_reads_db_fn, preads_fofn_fn, pre_assembly_report_fn):
- config = io.deserialize(config_fn)
- genome_length = int(config['genome_size'])
- length_cutoff_user = int(config['length_cutoff'])
- # Update length_cutoff if auto-calc (when length_cutoff is negative).
- # length_cutoff_fn was created long ago, so no filesystem issues.
- length_cutoff = run_support.get_length_cutoff(
- length_cutoff_user, length_cutoff_fn)
- # Hmmm. Actually, I think we now write the user length_cutoff into the length_cutoff file,
- # if not -1. TODO(CD): Check on that, and simplify here if so.
- script = script_run_report_pre_assembly(
- raw_reads_db_fn, preads_fofn_fn, genome_length, length_cutoff, pre_assembly_report_fn)
- script_fn = 'run-report-pre-assembly.sh'
- job_done_fn = 'job.done'
- bash.write_script(script, script_fn, job_done_fn)
- io.syscall('bash -vex {}'.format(script_fn))
- class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
- pass
- def parse_args(argv):
- description = 'Prepare to run the pre-assembly report generator, and run it.'
- epilog = 'length_cutoff might be cleaned up someday. For now, yeah, it is confusing.'
- parser = argparse.ArgumentParser(
- description=description,
- epilog=epilog,
- formatter_class=HelpF,
- )
- parser.add_argument(
- '--config-fn',
- help='Input. JSON configuration. We use "length_cutoff" (if positive) and "genome_size".',
- )
- parser.add_argument(
- '--length-cutoff-fn',
- help='Input. File of a single number: the length-cutoff for raw reads.',
- )
- parser.add_argument(
- '--raw-reads-db-fn',
- help='Input. Dazzler DB of raw reads.',
- )
- parser.add_argument(
- '--preads-fofn-fn',
- help='Input. FOFN of preads las files.',
- )
- parser.add_argument(
- '--pre-assembly-report-fn',
- help='Output. In JSON format.',
- )
- args = parser.parse_args(argv[1:])
- return args
- def main(argv=sys.argv):
- args = parse_args(argv)
- logging.basicConfig(level=logging.INFO)
- run(**vars(args))
- if __name__ == '__main__': # pragma: no cover
- main()
|