diff --git a/Dockerfile b/Dockerfile
index 280cc51..b1fb939 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -50,6 +50,7 @@ ENV PATH="$VIRTUAL_ENV/bin:$PATH"
COPY annotate/ annotate/
COPY README.md setup.py requirements.txt requirements_dev.txt run_tests.sh ./
+RUN pip install setuptools==57.5.0
RUN pip install --no-cache-dir -r requirements_dev.txt
COPY tests/ tests/
#COPY .coveragerc .
diff --git a/README.md b/README.md
index 1632308..7bc1dea 100644
--- a/README.md
+++ b/README.md
@@ -22,31 +22,34 @@ This project hosts scripts to annotate VCF files using user defined driver genes
## Design
-Uses [bcftools], [tabix] and [bgzip] in user's path , these are part of [htslib] or can be installed separately
+Uses [bcftools], [tabix] and [bgzip] in user's path, which are part of
+[htslib] and [bcftools], and can be installed separately.
## Tools
`annotateVcf` has multiple command line options, listed with `annotateVcf --help`.
### annotateVcf
-Takes vcf file as input along with driver gene information, and optional unmatched normal panel vcf and outputs VCF with added DRV INFO field.
+
+Takes vcf file as input along with driver gene information, and optional
+unmatched normal panel vcf and outputs VCF with added DRV INFO field.
Various exceptions can occur for malformed input files.
### inputFormat
- * ```input_vcf.gz``` snv or indel vcf file annotated using [VAGrENT]
- * ```normal_panel.vcf.gz``` normal panel to tag germline variants
- * ```lof_genes.txt ``` list of known loss of function [LoF] genes along with previous gene symbols ( to make sure all gene synonyms were matched with input vcf)
- * ```cpg_variants.tsv.gz``` list of variants in cancer predisposition genes to tag germline predisposition variants
- * ```filters.json``` filters to be applied during driver annotations ( see default file ```filters.josn``` in config folder)
- * ```driver_mutations.tsv.gz``` tab separated driver mutations along with consequence type
- * ```info.header``` vcf header INFO line showing driver and cancer predisposition annotations...
+ * `input_vcf.gz` snv or indel vcf file annotated using [VAGrENT]
+ * `normal_panel.vcf.gz` normal panel to tag germline variants
+ * `lof_genes.txt ` list of known loss of function [LoF] genes along with previous gene symbols (to make sure all gene synonyms were matched with input vcf)
+ * `cpg_variants.tsv.gz` list of variants in cancer predisposition genes to tag germline predisposition variants
+ * `filters.json` filters to be applied during driver annotations ( see default file `filters.josn` in config folder)
+ * `driver_mutations.tsv.gz` tab separated driver mutations along with consequence type
+ * `info.header` vcf header INFO line showing driver and cancer predisposition annotations...
### outputFormat
- * ```_drv.vcf.gz ``` output vcf file with DRV info field and consequence type if known, LoF in case annotated using LoF gene list,
-CPV info field is added if variants in cancer predisposition genes are provided.
+ * `_drv.vcf.gz` output vcf file with DRV info field and type of driver
+ instance (germline and/or somatic) overlapping with variant location.
## INSTALL
Installing via `pip install`. Simply execute with the path to the compiled 'whl' found on the [release page][annotateVcf-releases]:
@@ -55,25 +58,26 @@ Installing via `pip install`. Simply execute with the path to the compiled 'whl'
pip install annotateVcf.X.X.X-py3-none-any.whl
```
-Release `.whl` files are generated as part of the release process and can be found on the [release page][annotateVcf-releases]
+Release `.whl` files are generated as part of the release process and can be
+found on the [release page][annotateVcf-releases]
## Development environment
-This project uses git pre-commit hooks. As these will execute on your system it
-is entirely up to you if you activate them.
+This project uses git pre-commit hooks. As these will execute on your system
+it is entirely up to you if you activate them.
-If you want tests, coverage reports and lint-ing to automatically execute before
-a commit you can activate them by running:
+If you want tests, coverage reports and lint-ing to automatically execute
+before a commit you can activate them by running:
```
git config core.hooksPath git-hooks
```
-Only a test failure will block a commit, lint-ing is not enforced (but please consider
-following the guidance).
+Only a test failure will block a commit, lint-ing is not enforced (but please
+consider following the guidance).
-You can run the same checks manually without a commit by executing the following
-in the base of the clone:
+You can run the same checks manually without a commit by executing the
+following in the base of the clone:
```bash
./run_tests.sh
@@ -102,6 +106,7 @@ source env/bin/activate # if not already in env
pip install pytest
pip install radon
pip install pytest-cov
+pip install pyvcf3
```
__Also see__ [Package Dependancies](#package-dependancies)
@@ -132,8 +137,9 @@ pip install --find-links=~/wheels annotateVcf
[htslib]: https://github.com/samtools/htslib
[bcftools]: https://github.com/samtools/bcftools
+ [pyvcf3]: https://github.com/dridk/PyVCF3
[tabix]: https://github.com/samtools/tabix
- [VAGrENT]: https://github.com/cancerit/VAGrENT
+ [VAGrENT]: https://github.com/cancerit/VAGrENT
[travis-master-badge]: https://travis-ci.org/cancerit/annotateVCF.svg?branch=master
[travis-develop-badge]: https://travis-ci.org/cancerit/annotateVCF.svg?branch=develop
[travis-repo]: https://travis-ci.org/cancerit/annotateVCF
diff --git a/annotate/commandline.py b/annotate/commandline.py
index 76b800f..62c22b4 100644
--- a/annotate/commandline.py
+++ b/annotate/commandline.py
@@ -49,8 +49,6 @@
def main():
- usage = "\n %prog [options] -vcf input.vcf [-filter -np -gt -g -m -lof -hl -o ]"
-
optParser = argparse.ArgumentParser(prog='annotateVcf',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
optional = optParser._action_groups.pop()
@@ -90,14 +88,12 @@ def main():
optional.add_argument("-q", "--quiet", action="store_false", dest="verbose", required=False, default=True)
optParser._action_groups.append(optional)
- if len(sys.argv) == 0:
- optParser.print_help()
- sys.exit(1)
opts = optParser.parse_args()
if not opts.vcf_file:
- sys.exit('\nERROR Arguments required\n\tPlease run: annotateVcf --help\n')
- print("Annotating VCF file")
+ optParser.print_help()
+ sys.exit('\nMissing ivcf/--vcf_file argument\n')
+ print("Annotating VCF file")
# vars function returns __dict__ of Namespace instance
my_formatter = formatter.IO_Formatter(**vars(opts))
outdir_path = my_formatter.format(['outdir'])
diff --git a/annotate/config/filters.json b/annotate/config/filters.json
index 2668ccb..df73bca 100644
--- a/annotate/config/filters.json
+++ b/annotate/config/filters.json
@@ -9,9 +9,11 @@
"INFO": "INFO/VC=\"stop_lost,start_lost,ess_splice,frameshift,nonsense\"",
"INFO_FLAG_GERMLINE": "NPGL"
},
-
+ "driver_type": {
+ "DRV": "somatic",
+ "CPV": "germline"
+ },
"exclude": {
"None": null
}
-}
-
+}
\ No newline at end of file
diff --git a/annotate/config/info.header b/annotate/config/info.header
index 6cf0f2b..263fb98 100644
--- a/annotate/config/info.header
+++ b/annotate/config/info.header
@@ -1,2 +1,2 @@
-##INFO=
-##INFO=
+##INFO=
+##INFO=
\ No newline at end of file
diff --git a/annotate/io_formatter.py b/annotate/io_formatter.py
index 8cadb40..55bda4f 100644
--- a/annotate/io_formatter.py
+++ b/annotate/io_formatter.py
@@ -84,6 +84,8 @@ def _get_formatter(self, input_type):
return self._check_input
elif input_type == 'vcf_filters':
return self._get_filters
+ elif input_type == 'drv_type':
+ return self._get_driver_type
else:
raise ValueError(input_type)
@@ -94,7 +96,7 @@ def _check_input(self):
"""
input_status = check_inputs({'vcf_file': self.vcf_file, 'normal_panel': self.np_vcf,
'mutations': self.muts_file, 'lof_genes': self.genes_file,
- 'cancer_predisposition': self.cpv_file})
+ 'cancer_predisposition': self.cpv_file})
if input_status['vcf_file'] is None:
sys.exit("Please provide input vcf file")
return input_status
@@ -106,10 +108,17 @@ def _get_filters(self):
"""
load parameters from json config file
"""
- inc_filters = ['FORMAT', 'FILTER', 'INFO', 'INFO_FLAG_GERMLINE']
- formatted_filters = parse_filters(self.json_file, 'include', inc_filters)
+ formatted_filters = parse_filters(self.json_file, 'include')
return formatted_filters
+ def _get_driver_type(self):
+ """
+ get driver types from user provided json file
+ :return: driver type dictionary
+ """
+ driver_type = parse_filters(self.json_file, 'driver_type')
+ return driver_type
+
def _get_outdir_path(self):
"""
formatter function: add default output directory
@@ -119,8 +128,6 @@ def _get_outdir_path(self):
os.makedirs(outputPath, exist_ok=True)
return outputPath
- # generic functions ....
-
def check_inputs(file_dict):
"""
@@ -150,7 +157,7 @@ def get_file_metadata(full_file_name):
return file_metadata
-def parse_filters(json_file, filter_type, filters):
+def parse_filters(json_file, filter_type):
"""
load filtering parameters from json config file
"""
@@ -160,7 +167,7 @@ def parse_filters(json_file, filter_type, filters):
sys.exit('Json configuration file must be provided')
with open(json_file, 'r') as cfgfile:
filter_cfg = json.load(cfgfile)
- for filter in filters:
+ for filter in filter_cfg[filter_type]:
filter_param_dict[filter] = filter_cfg[filter_type][filter]
except json.JSONDecodeError as jde:
sys.exit('json error:{}'.format(jde.args[0]))
diff --git a/annotate/vcf_annotator.py b/annotate/vcf_annotator.py
index fac5ec7..8c33422 100644
--- a/annotate/vcf_annotator.py
+++ b/annotate/vcf_annotator.py
@@ -35,11 +35,15 @@
import re
import io
import copy
+import vcf
+
+from vcf import utils
+from collections import defaultdict
from subprocess import Popen, PIPE, STDOUT, TimeoutExpired
import pkg_resources
'''
- This code runs bcftools to annotates driver gene and variant sites
+ This code runs bcftools and pyvcf to annotates user provided driver gene and variant sites
'''
@@ -61,6 +65,7 @@ def __init__(self, f, basedir):
self._set_input_vcf(self.input_data)
self.drv_header = f.header_line
self.merge_vcf_dict = {}
+ self.annotated_vcf_list = []
self.keepTmp = f.keepTmp
# run analysis
self._runAnalysis(f)
@@ -78,6 +83,9 @@ def _runAnalysis(self, f):
self.format_filters = vcf_filter_params['FORMAT']
self.filter_filters = vcf_filter_params['FILTER']
self.flag_germline = vcf_filter_params['INFO_FLAG_GERMLINE']
+ drv_type = f.format(['drv_type'])
+ self.drv_type_dict = drv_type.get('drv_type', None)
+
run_status = False
a_type = ['normal_panel', 'mutations', 'lof_genes', 'cancer_predisposition']
@@ -161,9 +169,9 @@ def annot_drv_muts(self, muts_file):
f" -a {muts_file} -h {self.drv_header} " \
f"-c CHROM,FROM,TO,INFO/DRV {self.vcf_path} " \
f" | bcftools annotate -i 'INFO/DRV!=\".\" && INFO/DRV[*]==INFO/VC' " \
- f" | bgzip -c >{muts_outfile} && tabix -f -p vcf {muts_outfile}"
+ f" | bcftools sort | bgzip -c >{muts_outfile} && tabix -f -p vcf {muts_outfile}"
_run_command(cmd)
- self.merge_vcf_dict['a'] = muts_outfile
+ self.annotated_vcf_list.append(muts_outfile)
def annotate_lof_genes(self, genes_file):
"""
@@ -194,7 +202,9 @@ def annotate_lof_genes(self, genes_file):
# write matching LoF genes....
if gene.upper() in lof_gene_list:
lof_fh.write(line)
- self.merge_vcf_dict['b'] = compress_vcf(lof_outfile)
+ # compress and store vcf
+ lof_outfile_gz = compress_vcf(lof_outfile, sort_it=True)
+ self.annotated_vcf_list.append(lof_outfile_gz)
def annotate_cpv(self, cpv_file):
"""
@@ -210,12 +220,78 @@ def annotate_cpv(self, cpv_file):
f" -a {cpv_file} -h {self.drv_header} " \
f"-c CHROM,FROM,TO,INFO/CPV {self.vcf_path} " \
f" | bcftools annotate -i 'INFO/CPV!=\".\" && INFO/CPV[*]==INFO/VC' " \
- f" | bgzip -c >{cpv_outfile} && tabix -f -p vcf {cpv_outfile}"
+ f" | bcftools sort | bgzip -c >{cpv_outfile} && tabix -f -p vcf {cpv_outfile}"
_run_command(cmd)
- self.merge_vcf_dict['c'] = cpv_outfile
+ self.annotated_vcf_list.append(cpv_outfile)
+
+ def _get_vcf_readers(self):
+ """
+ create vcf file readers for each annotated vcf file
+ :return: list of vcf file readers
+ """
+ vcf_readers = []
+ for my_vcf in self.annotated_vcf_list:
+ vcf_readers.append(vcf.Reader(filename=my_vcf))
+ return vcf_readers
+
+ def walk_and_write_vcf(self, vcf_readers, vcf_writer):
+ """
+ walk through each line of vcf files, matching records will be walked together
+ get_key paramter val will determine the matching of sorted VCF lines
+ vcf record e.g., 'chr17_7675139_C_[A]': {'somatic': ,
+ 'germline': }
+ :return collection as above
+ """
+ for record in walk_together_iterator(vcf_readers):
+ # print(f"{tuple(map(str,record))}")
+ drv_type = set()
+ vcf_line = ""
+ # filtered_record = list(filter(None, record))
+ # iterate through vcf record from each file...
+ for vcf_line in record:
+ # get driver type from info line ...
+ drv_type_info = self.get_driver_type(vcf_line)
+ drv_type.add(drv_type_info)
+ vcf_line = self.set_driver_type(vcf_line, drv_type)
+ vcf_writer.write_record(vcf_line)
+ vcf_writer.close()
+
+ def get_driver_type(self, vcf_line):
+ """
+ get driver type for given vcf line
+ :return:
+ """
+ for drv_type in self.drv_type_dict.keys():
+ if vcf_line.INFO.get(drv_type, None):
+ return drv_type
+
+ def set_driver_type(self, vcf_line, drv_type_info):
+ """
+ set driver type for vcf line to False
+ :return:
+ """
+ for drv_type in self.drv_type_dict.keys():
+ if drv_type in drv_type_info:
+ vcf_line.INFO[drv_type] = True
+ else:
+ vcf_line.INFO[drv_type] = False
+ return vcf_line
def concat_results(self):
+ """
+ process and concatenate the annotated vcf files...
+ :return:
+ """
+ annotated_vcfs = self.annotated_vcf_list
concat_drv_out = self.outfile_name.format('_drv.vcf.gz')
+ # combine annotated vcf files...
+ vcf_readers = self._get_vcf_readers()
+ tmp_header = f"{self.outdir}/tmp_header_file"
+ (vcf_writer, combined_vcf) = _get_vcf_writer(annotated_vcfs[0], tmp_header)
+ self.walk_and_write_vcf(vcf_readers, vcf_writer)
+ combined_vcf_gz = compress_vcf(combined_vcf, sort_it=True)
+
+ self.merge_vcf_dict['a'] = combined_vcf_gz
self.merge_vcf_dict['f'] = self.input_data['vcf_file']['path']
vcf_files = ([self.merge_vcf_dict[myvcf] for myvcf in sorted(self.merge_vcf_dict.keys())])
@@ -256,13 +332,15 @@ def get_drv_gene_list(drv_genes):
return lof_gene_list
-def compress_vcf(vcf):
+def compress_vcf(vcf, sort_it=None):
"""
:param vcf:
:return:
"""
outfile = vcf + '.gz'
- cmd = f"bgzip -c <{vcf} >{outfile} && tabix -f -p vcf {outfile}"
+ cmd = f"bgzip -c {vcf} >{outfile} && tabix -f -p vcf {outfile}"
+ if sort_it:
+ cmd = f"bcftools sort {vcf}| bgzip -c >{outfile} && tabix -f -p vcf {outfile}"
_run_command(cmd)
return outfile
@@ -278,6 +356,58 @@ def create_dummy_genome(input_vcf, genome_loc):
_run_command(cmd)
+def ace_tuple(string):
+ # Split on runs of digits, keeping the digit strings
+ digit_split = re.split(r'(\d+)', string)
+ return tuple(
+ # Convert odd indexed elements from strings to integers
+ int(ele) if i % 2 else ele for i, ele in enumerate(digit_split)
+ )
+
+
+def vcf_key(r):
+ return ace_tuple(r.CHROM), r.POS, r.REF, r.ALT
+
+
+def walk_together_iterator(arg_Readers):
+ """
+ re-written by James to replace utils.walk_together from pyvcf
+ iterator to return matching vcf lines based on the vcf_key
+ Input: vcf readrs
+ """
+
+ vcf_Readers = [*arg_Readers]
+ nexts = [None for _ in vcf_Readers]
+ rkeys = [*nexts]
+
+ while True:
+ # Fetch records into nexts[]
+ for i, reader in enumerate(vcf_Readers):
+ if reader is None:
+ continue
+ rec = nexts[i]
+ if rec is None:
+ try:
+ nxt = next(reader)
+ nexts[i] = nxt
+ rkeys[i] = vcf_key(nxt)
+ except StopIteration:
+ vcf_Readers[i] = None
+ # Exit loop when there are no records left
+ if not any(rec is not None for rec in nexts):
+ break
+ # Get the smallest key in the list
+ min_key = min(k for k in rkeys if k is not None)
+ # Return the records which match smallest key
+ matching = []
+ for i, key in enumerate(rkeys):
+ if key == min_key:
+ matching.append(nexts[i])
+ nexts[i] = None
+ rkeys[i] = None
+ yield matching
+
+
def unheader_vcf(header_vcf, unheader_vcf):
"""
This is used for testing purpose only...
@@ -290,6 +420,19 @@ def unheader_vcf(header_vcf, unheader_vcf):
return unheader_vcf
+def _get_vcf_writer(my_vcf_file, tmp_header):
+ """
+ :param my_vcf_file:
+ :param my_vcf_header_file:
+ :return: my_vcf_header file
+ """
+ cmd = f"bcftools view -h {my_vcf_file} >{tmp_header}.vcf"
+ _run_command(cmd)
+ vcf_reader = vcf.Reader(filename=f"{tmp_header}.vcf")
+ vcf_writer = vcf.Writer(open(f"{tmp_header}_combined.vcf", 'w'), vcf_reader)
+ return vcf_writer, f"{tmp_header}_combined.vcf"
+
+
def _run_command(cmd):
"""
: runs external command
@@ -301,24 +444,21 @@ def _run_command(cmd):
raise ValueError("Must supply at least one argument")
try:
- # To capture standard error in the result, use stderr=subprocess.STDOUT:
- cmd_obj = Popen(cmd, stdin=None, stdout=PIPE, stderr=PIPE,
- shell=True, universal_newlines=True, bufsize=-1,
- close_fds=True, executable='/bin/bash')
+ # Need to set pipefail on shell to capture non-zero exit of intermediate commands in pipe
+ cmd_obj = Popen(['bash', '-o', 'pipefail', '-c', cmd], stdout=PIPE, stderr=PIPE, text=True)
(out, error) = cmd_obj.communicate()
exit_code = cmd_obj.returncode
- if (exit_code == 0):
- logging.debug(f"Command run successfully:\n{cmd}"
- f"OUT:{out} Error:{error} Exit:{exit_code}\n")
+ msg = f"\nSTDOUT:\n{out}\nSTDERR:\n{error}\nEXIT:{exit_code}"
+ if exit_code == 0:
+ logging.info(f"Command run successfully:\n{cmd}" + msg)
else:
- logging.info("Error: command exited with non zero exit \
- status, please check logging file for more details")
- logging.error(f"OUT:{out}:Error:{error}:Exit:{exit_code}")
+ logging.error(msg)
if exit_code != 0:
sys.exit("Exiting...")
return
except TimeoutExpired:
cmd_obj.kill()
(out, error) = cmd_obj.communicate()
- logging.error(f"Unable to run command:{cmd}: Out:{out} : Error:{error}")
- sys.exit(f"Unable to run command:{cmd}: Out:{out} : Error:{error}")
+ msg = f"Timeout running command:\n{cmd}\nSTDOUT:\n{out}\nSTDERR:\n{error}"
+ logging.error(msg)
+ sys.exit(msg)
diff --git a/requirements.txt b/requirements.txt
index e4afd41..9469fa0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,3 +12,4 @@ toml==0.10.2
tomli==1.2.2
tzdata==2021.5
tzlocal==4.1
+pyvcf==0.6.8
diff --git a/requirements_dev.txt b/requirements_dev.txt
index 3c51098..fa0b000 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -12,6 +12,7 @@ pyparsing==2.4.7
pytest==6.2.5
pytest-cov==3.0.0
pytz-deprecation-shim==0.1.0.post0
+pyvcf==0.6.8
radon==5.1.0
six==1.16.0
toml==0.10.2
diff --git a/tests/__init__.py b/tests/__init__.py
deleted file mode 100755
index e69de29..0000000
diff --git a/tests/test_celline_vcf_input.py b/tests/test_celline_vcf_input.py
index a750a5d..fcc5405 100755
--- a/tests/test_celline_vcf_input.py
+++ b/tests/test_celline_vcf_input.py
@@ -11,6 +11,7 @@
'''
class TestClass():
+
configdir = os.path.join(os.path.dirname(os.path.realpath(__file__)))
test_dir = configdir + '/test_input/'
test_out = configdir + '/test_output/'
@@ -36,11 +37,15 @@ class TestClass():
format_filter= "FORMAT/VAF[*] > 0.15"
filters_filter= "FILTER=\"PASS\""
info_flag_germline="NPGL"
+ driver_type = {
+ "DRV": "somatic",
+ "CPV": "germline"
+ }
# celline output
muts_vcf = f"{test_out}/celline_muts.vcf.gz"
lof_vcf = f"{test_out}/celline_genes_lof.vcf.gz"
drv_vcf = f"{test_out}/celline_drv.vcf.gz"
- my_formatter=formatter.IO_Formatter(**options_vcf_celline)
+ my_formatter=formatter.IO_Formatter(**options_vcf_celline)
outdir_path=my_formatter.format(['outdir'])
def test_celline_vcf_input(self):
@@ -78,7 +83,7 @@ def test_celline_info_flag_germline(self):
assert self.info_flag_germline == vcf_filter_params['INFO_FLAG_GERMLINE'],'test_INFO_FLAG_GERMLINE test OK'
def chek_celline_outdir(slef):
- self.test_dir + 'tmpout' == self.outdir_path
+ self.test_dir + 'tmpout' == self.outdir_path
def test_celline_vcf_formatter(self):
f = self.my_formatter
diff --git a/tests/test_input/filters.json b/tests/test_input/filters.json
index e6b985c..6ea0411 100644
--- a/tests/test_input/filters.json
+++ b/tests/test_input/filters.json
@@ -9,7 +9,10 @@
"INFO": "INFO/VC=\"stop_lost,start_lost,ess_splice,frameshift,nonsense\"",
"INFO_FLAG_GERMLINE": "NPGL"
},
-
+ "driver_type": {
+ "DRV": "somatic",
+ "CPV": "germline"
+ },
"exclude": {
"None": "NA"
}
diff --git a/tests/test_input_lof/filters.json b/tests/test_input_lof/filters.json
index e6b985c..6ea0411 100644
--- a/tests/test_input_lof/filters.json
+++ b/tests/test_input_lof/filters.json
@@ -9,7 +9,10 @@
"INFO": "INFO/VC=\"stop_lost,start_lost,ess_splice,frameshift,nonsense\"",
"INFO_FLAG_GERMLINE": "NPGL"
},
-
+ "driver_type": {
+ "DRV": "somatic",
+ "CPV": "germline"
+ },
"exclude": {
"None": "NA"
}
diff --git a/tests/test_input_no_vaf_vcf/filters.json b/tests/test_input_no_vaf_vcf/filters.json
index 5dd082c..dc243bc 100644
--- a/tests/test_input_no_vaf_vcf/filters.json
+++ b/tests/test_input_no_vaf_vcf/filters.json
@@ -9,7 +9,10 @@
"INFO": "INFO/VC=\"stop_lost,start_lost,ess_splice,frameshift,nonsense\"",
"INFO_FLAG_GERMLINE": "NPGL"
},
-
+ "driver_type": {
+ "DRV": "somatic",
+ "CPV": "germline"
+ },
"exclude": {
"None": "NA"
}
diff --git a/tests/test_input_no_vaf_vcf_cpg/filters.json b/tests/test_input_no_vaf_vcf_cpg/filters.json
index 5dd082c..dc243bc 100644
--- a/tests/test_input_no_vaf_vcf_cpg/filters.json
+++ b/tests/test_input_no_vaf_vcf_cpg/filters.json
@@ -9,7 +9,10 @@
"INFO": "INFO/VC=\"stop_lost,start_lost,ess_splice,frameshift,nonsense\"",
"INFO_FLAG_GERMLINE": "NPGL"
},
-
+ "driver_type": {
+ "DRV": "somatic",
+ "CPV": "germline"
+ },
"exclude": {
"None": "NA"
}
diff --git a/tests/test_output/celline_drv.vcf.gz b/tests/test_output/celline_drv.vcf.gz
index 1521a89..5854134 100644
Binary files a/tests/test_output/celline_drv.vcf.gz and b/tests/test_output/celline_drv.vcf.gz differ
diff --git a/tests/test_output/celline_drv.vcf.gz.tbi b/tests/test_output/celline_drv.vcf.gz.tbi
index 6e33dd9..f80ac2a 100644
Binary files a/tests/test_output/celline_drv.vcf.gz.tbi and b/tests/test_output/celline_drv.vcf.gz.tbi differ
diff --git a/tests/test_output/input_drv.vcf.gz b/tests/test_output/input_drv.vcf.gz
index 9dccb4b..bc07411 100644
Binary files a/tests/test_output/input_drv.vcf.gz and b/tests/test_output/input_drv.vcf.gz differ
diff --git a/tests/test_output/input_drv.vcf.gz.tbi b/tests/test_output/input_drv.vcf.gz.tbi
index c04143c..93c061f 100644
Binary files a/tests/test_output/input_drv.vcf.gz.tbi and b/tests/test_output/input_drv.vcf.gz.tbi differ
diff --git a/tests/test_output/input_genes_lof.vcf.gz b/tests/test_output/input_genes_lof.vcf.gz
index bed1231..1ca72b6 100644
Binary files a/tests/test_output/input_genes_lof.vcf.gz and b/tests/test_output/input_genes_lof.vcf.gz differ
diff --git a/tests/test_output/input_genes_lof.vcf.gz.tbi b/tests/test_output/input_genes_lof.vcf.gz.tbi
index d7bcf5b..e52b4c6 100644
Binary files a/tests/test_output/input_genes_lof.vcf.gz.tbi and b/tests/test_output/input_genes_lof.vcf.gz.tbi differ
diff --git a/tests/test_output/input_muts.vcf.gz b/tests/test_output/input_muts.vcf.gz
index ea1cc4e..b7049f1 100644
Binary files a/tests/test_output/input_muts.vcf.gz and b/tests/test_output/input_muts.vcf.gz differ
diff --git a/tests/test_output/input_muts.vcf.gz.tbi b/tests/test_output/input_muts.vcf.gz.tbi
index 1d5e00c..b3b47ea 100644
Binary files a/tests/test_output/input_muts.vcf.gz.tbi and b/tests/test_output/input_muts.vcf.gz.tbi differ
diff --git a/tests/test_output_lof/input_drv.vcf.gz b/tests/test_output_lof/input_drv.vcf.gz
index fd52a5b..7ab19f3 100644
Binary files a/tests/test_output_lof/input_drv.vcf.gz and b/tests/test_output_lof/input_drv.vcf.gz differ
diff --git a/tests/test_output_lof/input_drv.vcf.gz.tbi b/tests/test_output_lof/input_drv.vcf.gz.tbi
index eec9523..120870c 100644
Binary files a/tests/test_output_lof/input_drv.vcf.gz.tbi and b/tests/test_output_lof/input_drv.vcf.gz.tbi differ
diff --git a/tests/test_output_lof/input_genes_lof.vcf.gz b/tests/test_output_lof/input_genes_lof.vcf.gz
index a6b37d2..49aa53d 100644
Binary files a/tests/test_output_lof/input_genes_lof.vcf.gz and b/tests/test_output_lof/input_genes_lof.vcf.gz differ
diff --git a/tests/test_output_lof/input_genes_lof.vcf.gz.tbi b/tests/test_output_lof/input_genes_lof.vcf.gz.tbi
index 983ac03..643c83a 100644
Binary files a/tests/test_output_lof/input_genes_lof.vcf.gz.tbi and b/tests/test_output_lof/input_genes_lof.vcf.gz.tbi differ
diff --git a/tests/test_output_no_vaf_vcf/input_drv.vcf.gz b/tests/test_output_no_vaf_vcf/input_drv.vcf.gz
index 4d83284..701192c 100644
Binary files a/tests/test_output_no_vaf_vcf/input_drv.vcf.gz and b/tests/test_output_no_vaf_vcf/input_drv.vcf.gz differ
diff --git a/tests/test_output_no_vaf_vcf/input_drv.vcf.gz.tbi b/tests/test_output_no_vaf_vcf/input_drv.vcf.gz.tbi
index a576936..68bfc2f 100644
Binary files a/tests/test_output_no_vaf_vcf/input_drv.vcf.gz.tbi and b/tests/test_output_no_vaf_vcf/input_drv.vcf.gz.tbi differ
diff --git a/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz b/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz
index 7c0e10b..3ad70b5 100644
Binary files a/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz and b/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz differ
diff --git a/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz.tbi b/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz.tbi
index e9182b3..0095113 100644
Binary files a/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz.tbi and b/tests/test_output_no_vaf_vcf/input_genes_lof.vcf.gz.tbi differ
diff --git a/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz b/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz
index eb2410e..965acc9 100644
Binary files a/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz and b/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz differ
diff --git a/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz.tbi b/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz.tbi
index efd9492..f8f9b01 100644
Binary files a/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz.tbi and b/tests/test_output_no_vaf_vcf_cpg/input_cpv.vcf.gz.tbi differ
diff --git a/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz b/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz
index 0c6502c..4323db3 100644
Binary files a/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz and b/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz differ
diff --git a/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz.tbi b/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz.tbi
index 614236a..db60ebc 100644
Binary files a/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz.tbi and b/tests/test_output_no_vaf_vcf_cpg/input_drv.vcf.gz.tbi differ
diff --git a/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz b/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz
index 83cfea0..25e2045 100644
Binary files a/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz and b/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz differ
diff --git a/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz.tbi b/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz.tbi
index b53a42c..43b6adc 100644
Binary files a/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz.tbi and b/tests/test_output_no_vaf_vcf_cpg/input_genes_lof.vcf.gz.tbi differ