diff --git a/setup.py b/setup.py index d5565543daf6b05e1af42724b3e154f1c4f40303..4a4ec1307d740b191a2286431da819ab788e5380 100644 --- a/setup.py +++ b/setup.py @@ -39,7 +39,8 @@ setup( "console_scripts": [ "vtools-filter = vtools.cli:filter_cli", "vtools-stats = vtools.cli:stats_cli", - "vtools-gcoverage = vtools.cli:gcoverage_cli" + "vtools-gcoverage = vtools.cli:gcoverage_cli", + "vtools-evaluate = vtools.cli:evaluate_cli" ] }, classifiers=[ diff --git a/vtools/cli.py b/vtools/cli.py index ac28c598e8a0e983f00698bd02d8bb38530426a1..1f3dd496731f0d4809fdab930d527018ff0f7638 100644 --- a/vtools/cli.py +++ b/vtools/cli.py @@ -6,12 +6,36 @@ vtools.cli :copyright: (c) Leiden University Medical Center :license: MIT """ - +import json import click +from cyvcf2 import VCF, Writer + +from .evaluate import site_concordancy +from .filter import FilterParams, FilterClass, Filterer +from .stats import Stats +from .gcoverage import RefRecord, region_coverages -from .filter import * -from .stats import * -from .gcoverage import * + +@click.command() +@click.option("-c", "--call-vcf", type=click.Path(exists=True), + help="Path to VCF with calls to be evaluated", + required=True) +@click.option("-p", "--positive-vcf", type=click.Path(exists=True), + help="Path to VCF with known calls", + required=True) +@click.option("-cs", "--call-samples", type=click.STRING, multiple=True, + help="Sample(s) in call-vcf to consider. " + "May be called multiple times", + required=True) +@click.option("-ps", "--positive-samples", type=click.STRING, multiple=True, + help="Sample(s) in positive-vcf to consider. " + "May be called multiple times", + required=True) +def evaluate_cli(call_vcf, positive_vcf, call_samples, positive_samples): + c_vcf = VCF(call_vcf, gts012=True) + p_vcf = VCF(positive_vcf, gts012=True) + evaluated = site_concordancy(c_vcf, p_vcf, call_samples, positive_samples) + print(json.dumps(evaluated)) @click.command() @@ -80,7 +104,7 @@ def stats_cli(input): default=True, help="Collect metrics per exon or per transcript") def gcoverage_cli(input_gvcf, refflat_file, per_exon): - reader = cyvcf2.VCF(input_gvcf) + reader = VCF(input_gvcf) header = None with open(refflat_file) as handle: for line in handle: