.. _`bio/snpsift/gwascat`: SNPSIFT GWAS CATALOG ==================== .. image:: https://img.shields.io/github/issues-pr/snakemake/snakemake-wrappers/bio/snpsift/gwascat?label=version%20update%20pull%20requests :target: https://github.com/snakemake/snakemake-wrappers/pulls?q=is%3Apr+is%3Aopen+label%3Abio/snpsift/gwascat Annotate using GWAS catalog with `SnpSift `_ Example ------- This wrapper can be used in the following way: .. code-block:: python rule test_snpsift_gwascat: input: call = "in.vcf", gwascat = "gwascatalog.txt" output: call = "annotated/out.vcf" # optional specification of memory usage of the JVM that snakemake will respect with global # resource restrictions (https://snakemake.readthedocs.io/en/latest/snakefiles/rules.html#resources) # and which can be used to request RAM during cluster job submission as `{resources.mem_mb}`: # https://snakemake.readthedocs.io/en/latest/executing/cluster.html#job-properties resources: mem_mb=1024 wrapper: "v3.0.1/bio/snpsift/gwascat" Note that input, output and log file paths can be chosen freely. When running with .. code-block:: bash snakemake --use-conda the software dependencies will be automatically deployed into an isolated environment before execution. Software dependencies --------------------- * ``snpsift=5.2`` * ``bcftools=1.18`` * ``snakemake-wrapper-utils=0.6.2`` Input/Output ------------ **Input:** * Calls that are to be annotated (vcf, bcf, vcf.gz) * A GWAS Catalog TSV-formatted file **Output:** * Annotated calls (vcf, bcf, vcf.gz) Authors ------- * Thibault Dayris Code ---- .. code-block:: python """Snakemake wrapper for SnpSift gwasCat""" __author__ = "Thibault Dayris" __copyright__ = "Copyright 2020, Dayris Thibault" __email__ = "thibault.dayris@gustaveroussy.fr" __license__ = "MIT" from snakemake.shell import shell from snakemake_wrapper_utils.java import get_java_opts java_opts = get_java_opts(snakemake) log = snakemake.log_fmt_shell(stdout=False, stderr=True) extra = snakemake.params.get("extra", "") min_threads = 1 # Uncompression shall be done based on user input incall = snakemake.input["call"] if incall.endswith("bcf"): min_threads += 1 incall = "< <(bcftools view {})".format(incall) elif incall.endswith("gz"): min_threads += 1 incall = "< <(gunzip -c {})".format(incall) # Compression shall be done based on user-defined output outcall = snakemake.output["call"] if outcall.endswith("bcf"): min_threads += 1 outcall = "| bcftools view {}".format(outcall) elif outcall.endswith("gz"): min_threads += 1 outcall = "| gzip -c > {}".format(outcall) else: outcall = "> {}".format(outcall) # Each additional (un)compression step requires more threads if snakemake.threads < min_threads: raise ValueError( "At least {} threads required, {} provided".format( min_threads, snakemake.threads ) ) shell( "SnpSift gwasCat " # Tool and its subcommand " {java_opts} {extra} " # Extra parameters " -db {snakemake.input.gwascat} " # Path to gwasCat file " {incall} " # Path to input vcf file " {outcall} " # Path to output vcf file " {log} " # Logging behaviour ) .. |nl| raw:: html