Skip to content

Commit

Permalink
ex-273 (jebene/dkriti) added guard against having both untranslated and
Browse files Browse the repository at this point in the history
translated input VCFs
  • Loading branch information
dkriti committed May 27, 2015
1 parent 3e62c67 commit 36c2f3e
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
21 changes: 21 additions & 0 deletions jacquard/merge.py
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,26 @@ def _validate_consistent_samples(file_readers):
msg = "Some samples appear to be missing VCF(s)"
logger.warning(msg)

def _validate_consistent_input(vcf_readers, include_all):
if not include_all:
untranslated_readers = []
translated = False
untranslated = False

for vcf_reader in vcf_readers:
if '##jacquard.translate.caller' in vcf_reader.metaheaders:
translated = True
else:
untranslated = True
untranslated_readers.append(vcf_reader)

if translated and untranslated:
msg = ("Some input VCFs [{}] were not translated by Jacquard. Review "
"input and/or use --included_all flag")\
.format(untranslated_readers)
raise utils.UsageError(msg)


def _merge_records(vcf_readers,
coordinates,
filter_strategy,
Expand Down Expand Up @@ -771,6 +791,7 @@ def execute(args, execution_context):
#signatures of these methods more similar or even combine some methods to
#reduce excess iterations over the coordinates/vcf_readers
merge_vcf_readers = _create_vcf_readers(file_readers)
_validate_consistent_input(merge_vcf_readers, args.include_all)
merge_vcf_readers = _sort_readers(merge_vcf_readers, output_path)
format_tags = _get_format_tags(merge_vcf_readers)
_disambiguate_format_tags(merge_vcf_readers, format_tags)
Expand Down
47 changes: 47 additions & 0 deletions test/merge_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,53 @@ def test_validate_consistent_samples_allMissingCallers(self):
"Some samples appear to be missing VCF(s)"]
self.assertEquals(expected_log_warnings, actual_log_warnings)

def test_validate_consistent_input_allTranslatedOkay(self):
metaheaders1 = ["##metaheader1", "##metaheader2", "##jacquard.translate.caller"]
vcf_reader1 = MockVcfReader(metaheaders=metaheaders1)

metaheaders2 = ["##metaheader3", "##jacquard.translate.caller", "##metaheader4"]
vcf_reader2 = MockVcfReader(metaheaders=metaheaders2)

merge._validate_consistent_input([vcf_reader1, vcf_reader2], False)
actual_log_errors = test.utils.mock_logger.messages["ERROR"]
self.assertEquals([], actual_log_errors)

def test_validate_consistent_input_allUntranslatedOkay(self):
metaheaders1 = ["##metaheader1", "##metaheader2"]
vcf_reader1 = MockVcfReader(metaheaders=metaheaders1)

metaheaders2 = ["##metaheader3", "##metaheader4"]
vcf_reader2 = MockVcfReader(metaheaders=metaheaders2)

merge._validate_consistent_input([vcf_reader1, vcf_reader2], False)
actual_log_errors = test.utils.mock_logger.messages["ERROR"]
self.assertEquals([], actual_log_errors)

def test_validate_consistent_input_errorIfMixed(self):
metaheaders1 = ["##metaheader1", "##metaheader2", "##jacquard.translate.caller"]
vcf_reader1 = MockVcfReader(metaheaders=metaheaders1)

metaheaders2 = ["##metaheader3", "##metaheader4"]
vcf_reader2 = MockVcfReader(metaheaders=metaheaders2)

self.assertRaisesRegexp(utils.UsageError,
r"Some input VCFs \[.*\] were not translated by Jacquard. Review input and/or use --included_all flag",
merge._validate_consistent_input,
[vcf_reader1, vcf_reader2],
False)

def test_validate_consistent_input_okayIfIncludeAll(self):
metaheaders1 = ["##metaheader1", "##metaheader2", "##jacquard.translate.caller"]
vcf_reader1 = MockVcfReader(metaheaders=metaheaders1)

metaheaders2 = ["##metaheader3", "##metaheader4"]
vcf_reader2 = MockVcfReader(metaheaders=metaheaders2)

merge._validate_consistent_input([vcf_reader1, vcf_reader2], True)
actual_log_errors = test.utils.mock_logger.messages["ERROR"]
self.assertEquals([], actual_log_errors)


def test_predict_output(self):
with TempDirectory() as input_dir, TempDirectory() as output_dir:
input_dir.write("A.normalized.jacquardTags.HCsomatic.vcf", b"##source=strelka\n#colHeader")
Expand Down

0 comments on commit 36c2f3e

Please sign in to comment.