Skip to content

Commit 9726a95

Browse files
author
davidstew
committed
Handle cases with no actionable mutations (resolves #214)
resolves #214 ProTECT now fails gracefully if Transgene receives an empty file, Transgene finds no actionable mutations, or merge_mhc_peptide_calls produces no peptides. This is done by propagating a None value.
1 parent 0631068 commit 9726a95

File tree

4 files changed

+42
-13
lines changed

4 files changed

+42
-13
lines changed

src/protect/binding_prediction/common.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ def spawn_antigen_predictors(job, transgened_files, phlat_files, univ_options, m
5858
+- 'normal': fsID
5959
:rtype: tuple(dict, dict)
6060
"""
61+
if transgened_files is None:
62+
job.fileStore.logToMaster('spawn_antigen_predictors received no peptides from Transgene for %s. Skipping.'
63+
% univ_options['patient'])
64+
return None
6165
work_dir = os.getcwd()
6266
mhci_options, mhcii_options = mhc_options
6367
pept_files = {
@@ -498,6 +502,10 @@ def merge_mhc_peptide_calls(job, antigen_predictions, transgened_files, univ_opt
498502
:rtype: dict
499503
"""
500504
job.fileStore.logToMaster('Merging MHC calls')
505+
if antigen_predictions is None and transgened_files is None:
506+
job.fileStore.logToMaster('merge_mhc_peptide_calls received no peptides from Transgene (and no pMHC binding '
507+
'predictions) for %s. Skipping.' % univ_options['patient'])
508+
return None
501509
work_dir = os.getcwd()
502510
pept_files = {
503511
'10_mer.faa': transgened_files['transgened_tumor_10_mer_peptides.faa'],
@@ -568,7 +576,9 @@ def merge_mhc_peptide_calls(job, antigen_predictions, transgened_files, univ_opt
568576
print_mhc_peptide(pred, peptides, pepmap, mhcii_resfile,
569577
netmhc=mhcii_preds[key]['predictor'] == 'netMHCIIpan')
570578
if not(mhci_called or mhcii_called):
571-
raise RuntimeError('No peptides available for ranking')
579+
job.fileStore.logToMaster('No peptides available for ranking after running merge_mhc_peptide_calls on %s.'
580+
% univ_options['patient'])
581+
return None
572582
output_files = defaultdict()
573583
for mhc_file in [mhci_resfile.name, mhcii_resfile.name]:
574584
output_files[os.path.split(mhc_file)[1]] = job.fileStore.writeGlobalFile(mhc_file)

src/protect/mutation_translation.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ def run_transgene(job, snpeffed_file, rna_bam, univ_options, transgene_options,
9090
'--pep_lens', '9,10,15',
9191
'--cores', str(transgene_options['n']),
9292
'--genome', input_files['genome.fa'],
93-
'--annotation', input_files['annotation.gtf']]
93+
'--annotation', input_files['annotation.gtf'],
94+
'--log_file', '/data/transgene.log']
9495

9596
if snpeffed_file is not None:
9697
parameters.extend(['--snpeff', input_files['snpeffed_muts.vcf']])
@@ -111,13 +112,19 @@ def run_transgene(job, snpeffed_file, rna_bam, univ_options, transgene_options,
111112
parameters += ['--transcripts', fusion_files['transcripts.fa'],
112113
'--fusions', fusion_files['fusion_calls']]
113114

114-
docker_call(tool='transgene',
115-
tool_parameters=parameters,
116-
work_dir=work_dir,
117-
dockerhub=univ_options['dockerhub'],
118-
tool_version=transgene_options['version'])
115+
try:
116+
docker_call(tool='transgene',
117+
tool_parameters=parameters,
118+
work_dir=work_dir,
119+
dockerhub=univ_options['dockerhub'],
120+
tool_version=transgene_options['version'])
121+
finally:
122+
logfile = os.path.join(os.getcwd(), 'transgene.log')
123+
export_results(job, job.fileStore.writeGlobalFile(logfile), logfile, univ_options,
124+
subfolder='mutations/transgened')
119125

120126
output_files = defaultdict()
127+
peptides_not_found = False
121128
for peplen in ['9', '10', '15']:
122129
for tissue_type in ['tumor', 'normal']:
123130
pepfile = '_'.join(['transgened', tissue_type, peplen, 'mer_peptides.faa'])
@@ -128,9 +135,13 @@ def run_transgene(job, snpeffed_file, rna_bam, univ_options, transgene_options,
128135
if tissue_type == 'tumor':
129136
os.rename(os.path.join(work_dir, old_pepfile + '.map'),
130137
os.path.join(work_dir, pepfile + '.map'))
131-
138+
if not os.path.exists(pepfile):
139+
peptides_not_found = True
140+
break
132141
output_files[pepfile] = job.fileStore.writeGlobalFile(os.path.join(work_dir, pepfile))
133142
export_results(job, output_files[pepfile], pepfile, univ_options, subfolder='peptides')
143+
if peptides_not_found:
144+
break
134145
mapfile = '_'.join(['transgened_tumor', peplen, 'mer_peptides.faa.map'])
135146
output_files[mapfile] = job.fileStore.writeGlobalFile(os.path.join(work_dir, mapfile))
136147
export_results(job, output_files[mapfile], mapfile, univ_options, subfolder='peptides')
@@ -144,6 +155,10 @@ def run_transgene(job, snpeffed_file, rna_bam, univ_options, transgene_options,
144155
os.rename('transgened_transgened.bedpe', 'fusions.bedpe')
145156
export_results(job, job.fileStore.writeGlobalFile('fusions.bedpe'), 'fusions.bedpe',
146157
univ_options, subfolder='mutations/transgened')
147-
148-
job.fileStore.logToMaster('Ran transgene on %s successfully' % univ_options['patient'])
149-
return output_files
158+
if peptides_not_found:
159+
job.fileStore.logToMaster('Transgene failed to find any peptides for %s.'
160+
% univ_options['patient'])
161+
return None
162+
else:
163+
job.fileStore.logToMaster('Ran transgene on %s successfully' % univ_options['patient'])
164+
return output_files

src/protect/rankboost.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ def wrap_rankboost(job, rsem_files, merged_mhc_calls, transgene_out, univ_option
3636
+- 'mhci_rankboost_detailed_results.txt': fsID
3737
:rtype: dict
3838
"""
39+
if merged_mhc_calls is None:
40+
job.fileStore.logToMaster('Rankboost was provided no peptides from sample %s for ranking. Skipping.'
41+
% univ_options['patient'])
42+
return None
3943
rankboost = job.addChildJobFn(boost_ranks, rsem_files['rsem.isoforms.results'],
4044
merged_mhc_calls, transgene_out, univ_options, rankboost_options)
4145

src/protect/test/ci/test_protect.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ def _test_ran_successfully(self, expected_dirs):
142142
['mutations.vcf']),
143143
'transgened_f': ('/mnt/ephemeral/done/TEST/mutations/transgened',
144144
[],
145-
['fusions.bedpe', 'mutations.vcf']),
145+
['fusions.bedpe', 'mutations.vcf', 'transgene.log']),
146146
'transgened_v': ('/mnt/ephemeral/done/TEST/mutations/transgened',
147147
[],
148-
['mutations.vcf']),
148+
['mutations.vcf', 'transgene.log']),
149149
},
150150
'peptides': ('/mnt/ephemeral/done/TEST/peptides',
151151
[],

0 commit comments

Comments
 (0)