From 056bcc7494d113cc47a323fdf40ca41b6a31e782 Mon Sep 17 00:00:00 2001 From: fgvieira <1151762+fgvieira@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:18:52 +0200 Subject: [PATCH] Add ngsngs wrapper --- bio/ngsngs/environment.yaml | 6 ++++ bio/ngsngs/meta.yaml | 11 +++++++ bio/ngsngs/test/Snakefile | 60 ++++++++++++++++++++++++++++++++++++ bio/ngsngs/test/genome.fasta | 2 ++ bio/ngsngs/wrapper.py | 21 +++++++++++++ test.py | 32 +++++++++++++++++++ 6 files changed, 132 insertions(+) create mode 100644 bio/ngsngs/environment.yaml create mode 100644 bio/ngsngs/meta.yaml create mode 100644 bio/ngsngs/test/Snakefile create mode 100644 bio/ngsngs/test/genome.fasta create mode 100644 bio/ngsngs/wrapper.py diff --git a/bio/ngsngs/environment.yaml b/bio/ngsngs/environment.yaml new file mode 100644 index 00000000000..00511f60640 --- /dev/null +++ b/bio/ngsngs/environment.yaml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda + - nodefaults +dependencies: + - ngsngs =0.9.2 diff --git a/bio/ngsngs/meta.yaml b/bio/ngsngs/meta.yaml new file mode 100644 index 00000000000..02850f8b512 --- /dev/null +++ b/bio/ngsngs/meta.yaml @@ -0,0 +1,11 @@ +name: NGSNGS +description: Next-Generation Simulator for Next-Generation Sequencing data +url: https://github.com/RAHenriksen/NGSNGS +authors: + - Filipe G. Vieira +input: + - +output: + - +params: + - tool: tool to use, either "ngsngs" (default), "LenConvert", "MisConvert", "MetaMisConvert", "RandRef", "RandVar", "QualConvert", "VCFtoBED", or "RemoveCodon" diff --git a/bio/ngsngs/test/Snakefile b/bio/ngsngs/test/Snakefile new file mode 100644 index 00000000000..8954086561e --- /dev/null +++ b/bio/ngsngs/test/Snakefile @@ -0,0 +1,60 @@ +rule ngsngs_fq_se: + input: + "{genome}.fasta", + output: + fq="results/{genome}.SE.fq.gz", + log: + "logs/{genome}.SE.fq.log", + params: + extra="--sequencing SE --lengthdist Norm,50,20 --reads 2", + wrapper: + "master/bio/ngsngs" + + +use rule ngsngs_fq_se as ngsngs_fq_pe with: + output: + fq1="results/{genome}_R1.fq.gz", + fq2="results/{genome}_R2.fq.gz", + log: + "logs/{genome}.PE.fq.log", + params: + extra="--sequencing PE --lengthdist Norm,50,20 --reads 2", + + +use rule ngsngs_fq_se as ngsngs_bam_se with: + output: + bam="results/{genome}.SE.bam", + log: + "logs/{genome}.SE.bam.log", + + +use rule ngsngs_bam_se as ngsngs_bam_pe with: + output: + bam="results/{genome}.PE.bam", + log: + "logs/{genome}.PE.bam.log", + params: + extra="--sequencing PE --lengthdist Norm,50,20 --reads 2", + + +use rule ngsngs_fq_se as ngsngs_randvar with: + output: + fas="results/{genome}.randvar.fas", + pos="results/{genome}.randvar.pos", + log: + "logs/{genome}.randvar.log", + params: + tool="RandVar", + extra="--modulus 2", + + +rule ngsngs_randref: + output: + fas="results/{genome}.randref.fas", + log: + "logs/{genome}.randref.log", + params: + tool="RandRef", + extra="--length 1000 --chrNo 2 --NoNt --NoStopCodon", + wrapper: + "master/bio/ngsngs" diff --git a/bio/ngsngs/test/genome.fasta b/bio/ngsngs/test/genome.fasta new file mode 100644 index 00000000000..308e288c979 --- /dev/null +++ b/bio/ngsngs/test/genome.fasta @@ -0,0 +1,2 @@ +>Sheila +GCTAGCTCAGAAAAAAAAAA \ No newline at end of file diff --git a/bio/ngsngs/wrapper.py b/bio/ngsngs/wrapper.py new file mode 100644 index 00000000000..79b3628092d --- /dev/null +++ b/bio/ngsngs/wrapper.py @@ -0,0 +1,21 @@ +__author__ = "Filipe G. Vieira" +__copyright__ = "Copyright 2023, Filipe G. Vieira" +__license__ = "MIT" + +from snakemake.shell import shell + +log = snakemake.log_fmt_shell(stdout=True, stderr=True) +extra = snakemake.params.get("extra", "") + +tool = snakemake.params.get("tool", "ngsngs") +assert tool in ["ngsngs", "LenConvert", "MisConvert", "MetaMisConvert", "RandRef", "RandVar", "QualConvert", "VCFtoBED", "RemoveCodon"], "invalid tool specified" + +threads = f"--threads {snakemake.threads}" if tool == "ngsngs" else "" + +input = f"--input {snakemake.input[0]}" if len(snakemake.input) else "" + +output = ",".join([str(value) for key, value in snakemake.output.items() if key != "pos"]) +output_extra = " ".join([f"--{key} {value}" for key, value in snakemake.output.items() if key == "pos"]) + + +shell("{tool} {threads} {input} {extra} --output {output} {output_extra} {log}") diff --git a/test.py b/test.py index 054b9bd8cc0..5c16d2b1ae1 100644 --- a/test.py +++ b/test.py @@ -139,6 +139,38 @@ def run(wrapper, cmd, check_log=None): os.chdir(origdir) +@skip_if_not_modified +def test_ngsngs(): + run( + "bio/ngsngs", + [ + "snakemake", + "--cores", + "2", + "--use-conda", + "-F", + "results/genome.SE.fq.gz", + "results/genome_R1.fq.gz", + "results/genome_R2.fq.gz", + "results/genome.SE.bam", + "results/genome.PE.bam", + ], + ) + + run( + "bio/ngsngs", + [ + "snakemake", + "--cores", + "1", + "--use-conda", + "-F", + "results/genome.randvar.pos", + "results/genome.randref.fas" + ], + ) + + @skip_if_not_modified def test_galah(): run(