Skip to content

Commit

Permalink
Bug fixes and cleanup from last commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
marcus1487 committed Oct 3, 2019
1 parent 00507d5 commit 118d832
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 15 deletions.
4 changes: 2 additions & 2 deletions megalodon/aggregate.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ def aggregate_stats(
agg_vars = variants.AggVars(
vars_db_fn, load_in_mem_indices=False)
num_vars = agg_vars.num_uniq()
ref_names_and_lens = agg_vars.get_all_chrm_and_lens()
ref_names_and_lens = agg_vars.vars_db.get_all_chrm_and_lens()
agg_vars.close()
logger.info('Spawning variant aggregation processes.')
# create process to collect var stats from workers
Expand Down Expand Up @@ -286,7 +286,7 @@ def aggregate_stats(
mods_db_fn = mh.get_megalodon_fn(out_dir, mh.PR_MOD_NAME)
agg_mods = mods.AggMods(mods_db_fn, load_in_mem_indices=False)
num_mods = agg_mods.num_uniq()
ref_names_and_lens = agg_mods.get_all_chrm_and_lens()
ref_names_and_lens = agg_mods.mods_db.get_all_chrm_and_lens()
agg_mods.close()
logger.info('Spawning modified base aggregation processes.')
# create process to collect mods stats from workers
Expand Down
10 changes: 7 additions & 3 deletions megalodon/megalodon.py
Original file line number Diff line number Diff line change
Expand Up @@ -1017,16 +1017,20 @@ def _main():
args.processes, args.verbose_read_progress, args.suppress_progress,
mods_info, args.database_safety, pr_ref_filts)

if aligner is not None: aligner.close()
if aligner is not None:
ref_fn = aligner.ref_fn
map_out_fmt = aligner.out_fmt
del aligner

if mh.MAP_NAME in args.outputs:
logger.info('Spawning process to sort mappings')
map_p = post_process_mapping(
args.output_directory, aligner.out_fmt, aligner.ref_fn)
args.output_directory, map_out_fmt, ref_fn)

if mh.WHATSHAP_MAP_NAME in args.outputs:
logger.info('Spawning process to sort whatshap mappings')
whatshap_sort_fn, whatshap_p = post_process_whatshap(
args.output_directory, aligner.out_fmt, aligner.ref_fn)
args.output_directory, map_out_fmt, ref_fn)

if mh.VAR_NAME in args.outputs or mh.MOD_NAME in args.outputs:
post_process_aggregate(
Expand Down
9 changes: 7 additions & 2 deletions megalodon/mods.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,13 @@ def get_chrm(self, chrm_id):
return chrm

def get_all_chrm_and_lens(self):
return tuple(map(tuple, zip(*self.cur.execute(
'SELECT chrm, chrm_len FROM chrm').fetchall())))
try:
return tuple(map(tuple, zip(*self.cur.execute(
'SELECT chrm, chrm_len FROM chrm').fetchall())))
except sqlite3.OperationalError:
raise mh.MegaError(
'Old megalodon database scheme detected. Please re-run ' +
'megalodon processing or downgrade megalodon installation.')

def get_mod_base_data(self, mod_id):
try:
Expand Down
9 changes: 7 additions & 2 deletions megalodon/variants.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,8 +340,13 @@ def get_chrm(self, chrm_id):
return chrm

def get_all_chrm_and_lens(self):
return tuple(map(tuple, zip(*self.cur.execute(
'SELECT chrm, chrm_len FROM chrm').fetchall())))
try:
return tuple(map(tuple, zip(*self.cur.execute(
'SELECT chrm, chrm_len FROM chrm').fetchall())))
except sqlite3.OperationalError:
raise mh.MegaError(
'Old megalodon database scheme detected. Please re-run ' +
'megalodon processing or downgrade megalodon installation.')

def get_alt_seq(self, alt_id):
try:
Expand Down
10 changes: 4 additions & 6 deletions scripts/run_aggregation.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def main():
args = get_parser().parse_args()
log_suffix = ('aggregation' if args.output_suffix is None else
'aggregation.' + args.output_suffix)
logging.init_logger(args.output_directory, out_suffix=log_suffix)
logging.init_logger(args.megalodon_directory, out_suffix=log_suffix)
logger = logging.get_logger()

mod_agg_info = mods.AGG_INFO(
Expand All @@ -97,24 +97,22 @@ def main():
logger.info('Loading model.')
mod_names = backends.ModelInfo(mh.get_model_fn(
args.taiyaki_model_filename)).mod_long_names
if args.reference is not None: logger.info('Loading reference.')
valid_read_ids = None
if args.read_ids_filename is not None:
with open(args.read_ids_filename) as read_ids_fp:
valid_read_ids = set(line.strip() for line in read_ids_fp)
aggregate.aggregate_stats(
args.outputs, args.output_directory, args.processes,
args.outputs, args.megalodon_directory, args.processes,
args.write_vcf_log_probs, args.heterozygous_factors,
variants.HAPLIOD_MODE if args.haploid else variants.DIPLOID_MODE,
mod_names, mod_agg_info, args.write_mod_log_probs,
args.mod_output_formats, args.suppress_progress,
valid_read_ids, args.output_suffix)

# note reference is required in order to annotate contigs for VCF writing
if mh.VAR_NAME in args.outputs and args.reference is not None:
if mh.VAR_NAME in args.outputs:
logger.info('Sorting output variant file')
variant_fn = mh.add_fn_suffix(
mh.get_megalodon_fn(args.output_directory, mh.VAR_NAME),
mh.get_megalodon_fn(args.megalodon_directory, mh.VAR_NAME),
args.output_suffix)
sort_variant_fn = mh.add_fn_suffix(variant_fn, 'sorted')
variants.sort_variants(variant_fn, sort_variant_fn)
Expand Down

0 comments on commit 118d832

Please sign in to comment.