Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/nerpa_pipeline/NRPSPredictor_utils/json_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def __init__(self, domain_prediction):
for stachelhaus_match in prediction_data['stachelhaus_matches']],
default=0)
self.uncertain = stachelhaus_match_count < 7 # not so sure about this
else: # older version of antismash
elif 'NRPSPredictor2' in domain_prediction: # older version of antismash
prediction_data = domain_prediction['NRPSPredictor2']

self.angstrom_code = prediction_data['angstrom_code']
Expand All @@ -78,6 +78,8 @@ def __init__(self, domain_prediction):
self.small_cluster_pred = prediction_data['small_cluster_pred']
self.single_amino_pred = prediction_data['single_amino_pred']
self.uncertain = prediction_data['uncertain']
else:
raise RuntimeError('Neither "nrpys" nor "NRPSPredictor2" in domain prediction.')

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BGC0001329 and BGC0002100 cause this exception


def __str__(self):
return '\t'.join([self.angstrom_code,
Expand Down
9 changes: 6 additions & 3 deletions src/nerpa_pipeline/NRPSPredictor_utils/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,12 @@ def main(args):
is_root_outdir = True if (args.output_dir is not None and len(args.inputs) > 1) else False
processed_output_dirs = []
for input_path in args.inputs:
processed_output_dirs.append(json_handler.handle_single_input(
Path(input_path), args.output_dir, is_root_outdir, args.naming_style,
known_codes, scoring_mode=args.mode, verbose=args.verbose))
try:
processed_output_dirs.append(json_handler.handle_single_input(
Path(input_path), args.output_dir, is_root_outdir, args.naming_style,
known_codes, scoring_mode=args.mode, verbose=args.verbose))
except RuntimeError as e:
info(f'ERROR: Unable to parse the input at "{input_path}": {e}')
return processed_output_dirs


Expand Down
87 changes: 48 additions & 39 deletions src/nerpa_pipeline/predictions_preprocessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,45 +77,54 @@ def create_predictions_by_antiSMASH_out(antiSMASH_outs, outdir, log):
predictions_info_file = os.path.join(outdir, "predictions.info")
predictions_info_list = []
for dirname in antiSMASH_outs:
if dirname[-1] == '\n':
dirname = dirname[:-1]

orf_pos = handle_helper.get_orf_position(dirname)
orf_ori = handle_helper.get_orf_orientation(dirname)
orf_domains = handle_helper.get_orf_domain_list(dirname)

print("====PARTS BEFORE: ")
parts = handle_helper.get_parts(dirname)
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

#print("====SPLIT BY DIST:")
parts = splitter.split_by_dist(parts, orf_pos)
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

#print("====SPLIT BY SINGLE ORF WITH Starter-TE")
parts = splitter.split_by_one_orf_Starter_TE(parts, orf_ori, orf_domains)
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

#print("====REMOVE SINGLE DOMAINs ORFS")
parts = splitter.split_by_single_domain_orf(parts, orf_ori, orf_domains)
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

print("====SPLIT AND REORDER")
parts = splitter.split_and_reorder(parts, orf_ori, orf_pos, orf_domains)
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)


nrpspred_dir = os.path.join(dirname, "nrpspks_predictions_txt")
if os.path.isdir(nrpspred_dir):
for filename in os.listdir(nrpspred_dir):
if filename.endswith('nrpspredictor2_codes.txt'):
base_antiSMASHout_name = os.path.basename(dirname)
base_pred_name = os.path.basename(filename)
#predictions_info_list.append(os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
#shutil.copyfile(os.path.join(nrpspred_dir, filename), os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
gen_predictions(parts, os.path.join(nrpspred_dir, filename),
os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name)[:-4],
0, predictions_info_list, dirname)
try:
if dirname[-1] == '\n':
dirname = dirname[:-1]

orf_pos = handle_helper.get_orf_position(dirname)
orf_ori = handle_helper.get_orf_orientation(dirname)
orf_domains = handle_helper.get_orf_domain_list(dirname)

print("====PARTS BEFORE: ")
parts = handle_helper.get_parts(dirname)
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

#print("====SPLIT BY DIST:")
parts = splitter.split_by_dist(parts, orf_pos)
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

#print("====SPLIT BY SINGLE ORF WITH Starter-TE")
parts = splitter.split_by_one_orf_Starter_TE(parts, orf_ori, orf_domains)
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

#print("====REMOVE SINGLE DOMAINs ORFS")
parts = splitter.split_by_single_domain_orf(parts, orf_ori, orf_domains)
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

print("====SPLIT AND REORDER")
parts = splitter.split_and_reorder(parts, orf_ori, orf_pos, orf_domains)
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)

if len(parts) > 100:
raise RuntimeError(f'Too many parts: {len(parts)}')

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BGC0000459: 347 parts
BGC0001033: 34460 parts



nrpspred_dir = os.path.join(dirname, "nrpspks_predictions_txt")
if os.path.isdir(nrpspred_dir):
for filename in os.listdir(nrpspred_dir):
if filename.endswith('nrpspredictor2_codes.txt'):
base_antiSMASHout_name = os.path.basename(dirname)
base_pred_name = os.path.basename(filename)
#predictions_info_list.append(os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
#shutil.copyfile(os.path.join(nrpspred_dir, filename), os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
gen_predictions(parts, os.path.join(nrpspred_dir, filename),
os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name)[:-4],
0, predictions_info_list, dirname)
except KeyboardInterrupt as e:
raise e
except Exception as e:

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BGC0002095 causes

Traceback (most recent call last):
  File "/home/azat/tools/nerpa-1-1/bin/nerpa.py", line 355, in <module>
    run(args, log)
  File "/home/azat/tools/nerpa-1-1/bin/nerpa.py", line 305, in run
    path_predictions = predictions_preprocessor.create_predictions_by_antiSMASH_out(get_antismash_v3_compatible_input_paths(
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/azat/tools/nerpa-1-1/share/nerpa/nerpa_pipeline/predictions_preprocessor.py", line 89, in create_predictions_by_antiSMASH_out
    handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
  File "/home/azat/tools/nerpa-1-1/share/nerpa/nerpa_pipeline/handle_helper.py", line 139, in debug_print_parts
    print(cur_orf + "[" + str(orf_pos[cur_orf][0]) + "-" +
                              ~~~~~~~^^^^^^^^^
KeyError: 'ctg1_extra_gene'

print(f'Error: {type(e).__name__}: {e}')
print(f'Skipping {dirname}')

f = open(predictions_info_file, 'w')
for line in predictions_info_list:
Expand Down