Skip to content

Commit 4c7736d

Browse files
Merge pull request #1 from gurevichlab/nerpa-1.1-adhoc-fixes
Ad hoc fixes to make nerpa 1.1 run on mibig inputs
2 parents 75b9cc6 + 099c0db commit 4c7736d

3 files changed

Lines changed: 61 additions & 43 deletions

File tree

src/nerpa_pipeline/NRPSPredictor_utils/json_handler.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def __init__(self, domain_prediction):
6868
for stachelhaus_match in prediction_data['stachelhaus_matches']],
6969
default=0)
7070
self.uncertain = stachelhaus_match_count < 7 # not so sure about this
71-
else: # older version of antismash
71+
elif 'NRPSPredictor2' in domain_prediction: # older version of antismash
7272
prediction_data = domain_prediction['NRPSPredictor2']
7373

7474
self.angstrom_code = prediction_data['angstrom_code']
@@ -78,6 +78,8 @@ def __init__(self, domain_prediction):
7878
self.small_cluster_pred = prediction_data['small_cluster_pred']
7979
self.single_amino_pred = prediction_data['single_amino_pred']
8080
self.uncertain = prediction_data['uncertain']
81+
else:
82+
raise RuntimeError('Neither "nrpys" nor "NRPSPredictor2" in domain prediction.')
8183

8284
def __str__(self):
8385
return '\t'.join([self.angstrom_code,

src/nerpa_pipeline/NRPSPredictor_utils/main.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,16 @@ def main(args):
9999
is_root_outdir = True if (args.output_dir is not None and len(args.inputs) > 1) else False
100100
processed_output_dirs = []
101101
for input_path in args.inputs:
102-
processed_output_dirs.append(json_handler.handle_single_input(
103-
Path(input_path), args.output_dir, is_root_outdir, args.naming_style,
104-
known_codes, scoring_mode=args.mode, verbose=args.verbose))
102+
try:
103+
processed_output_dirs.append(json_handler.handle_single_input(
104+
Path(input_path), args.output_dir, is_root_outdir, args.naming_style,
105+
known_codes, scoring_mode=args.mode, verbose=args.verbose))
106+
except KeyboardInterrupt as e:
107+
raise e
108+
except RuntimeError as e:
109+
info(f'ERROR: Unable to parse the input at "{input_path}": {e}')
110+
except Exception as e:
111+
info(f'ERROR: Unmanaged Exception while parsing the input at "{input_path}": {e}')
105112
return processed_output_dirs
106113

107114

src/nerpa_pipeline/predictions_preprocessor.py

Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -77,45 +77,54 @@ def create_predictions_by_antiSMASH_out(antiSMASH_outs, outdir, log):
7777
predictions_info_file = os.path.join(outdir, "predictions.info")
7878
predictions_info_list = []
7979
for dirname in antiSMASH_outs:
80-
if dirname[-1] == '\n':
81-
dirname = dirname[:-1]
82-
83-
orf_pos = handle_helper.get_orf_position(dirname)
84-
orf_ori = handle_helper.get_orf_orientation(dirname)
85-
orf_domains = handle_helper.get_orf_domain_list(dirname)
86-
87-
print("====PARTS BEFORE: ")
88-
parts = handle_helper.get_parts(dirname)
89-
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
90-
91-
#print("====SPLIT BY DIST:")
92-
parts = splitter.split_by_dist(parts, orf_pos)
93-
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
94-
95-
#print("====SPLIT BY SINGLE ORF WITH Starter-TE")
96-
parts = splitter.split_by_one_orf_Starter_TE(parts, orf_ori, orf_domains)
97-
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
98-
99-
#print("====REMOVE SINGLE DOMAINs ORFS")
100-
parts = splitter.split_by_single_domain_orf(parts, orf_ori, orf_domains)
101-
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
102-
103-
print("====SPLIT AND REORDER")
104-
parts = splitter.split_and_reorder(parts, orf_ori, orf_pos, orf_domains)
105-
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
106-
107-
108-
nrpspred_dir = os.path.join(dirname, "nrpspks_predictions_txt")
109-
if os.path.isdir(nrpspred_dir):
110-
for filename in os.listdir(nrpspred_dir):
111-
if filename.endswith('nrpspredictor2_codes.txt'):
112-
base_antiSMASHout_name = os.path.basename(dirname)
113-
base_pred_name = os.path.basename(filename)
114-
#predictions_info_list.append(os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
115-
#shutil.copyfile(os.path.join(nrpspred_dir, filename), os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
116-
gen_predictions(parts, os.path.join(nrpspred_dir, filename),
117-
os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name)[:-4],
118-
0, predictions_info_list, dirname)
80+
try:
81+
if dirname[-1] == '\n':
82+
dirname = dirname[:-1]
83+
84+
orf_pos = handle_helper.get_orf_position(dirname)
85+
orf_ori = handle_helper.get_orf_orientation(dirname)
86+
orf_domains = handle_helper.get_orf_domain_list(dirname)
87+
88+
print("====PARTS BEFORE: ")
89+
parts = handle_helper.get_parts(dirname)
90+
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
91+
92+
#print("====SPLIT BY DIST:")
93+
parts = splitter.split_by_dist(parts, orf_pos)
94+
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
95+
96+
#print("====SPLIT BY SINGLE ORF WITH Starter-TE")
97+
parts = splitter.split_by_one_orf_Starter_TE(parts, orf_ori, orf_domains)
98+
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
99+
100+
#print("====REMOVE SINGLE DOMAINs ORFS")
101+
parts = splitter.split_by_single_domain_orf(parts, orf_ori, orf_domains)
102+
#handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
103+
104+
print("====SPLIT AND REORDER")
105+
parts = splitter.split_and_reorder(parts, orf_ori, orf_pos, orf_domains)
106+
handle_helper.debug_print_parts(dirname, parts, orf_domains, orf_ori, orf_pos)
107+
108+
if len(parts) > 100:
109+
raise RuntimeError(f'Too many parts: {len(parts)}')
110+
111+
112+
nrpspred_dir = os.path.join(dirname, "nrpspks_predictions_txt")
113+
if os.path.isdir(nrpspred_dir):
114+
for filename in os.listdir(nrpspred_dir):
115+
if filename.endswith('nrpspredictor2_codes.txt'):
116+
base_antiSMASHout_name = os.path.basename(dirname)
117+
base_pred_name = os.path.basename(filename)
118+
#predictions_info_list.append(os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
119+
#shutil.copyfile(os.path.join(nrpspred_dir, filename), os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name))
120+
gen_predictions(parts, os.path.join(nrpspred_dir, filename),
121+
os.path.join(dir_for_predictions, base_antiSMASHout_name + "_" + base_pred_name)[:-4],
122+
0, predictions_info_list, dirname)
123+
except KeyboardInterrupt as e:
124+
raise e
125+
except Exception as e:
126+
print(f'Error: {type(e).__name__}: {e}')
127+
print(f'Skipping {dirname}')
119128

120129
f = open(predictions_info_file, 'w')
121130
for line in predictions_info_list:

0 commit comments

Comments
 (0)