From e463fb5eb00ecec0cb8050ac5a35dc371fe1f185 Mon Sep 17 00:00:00 2001 From: gbouras13 Date: Tue, 21 Jul 2026 08:30:19 +0930 Subject: [PATCH 1/3] fix #163 0.14.1 contam --- containers/HPC/Dockerfile | 6 ++--- containers/minimal/Dockerfile | 50 ----------------------------------- hybracter/hybracter.VERSION | 2 +- 3 files changed, 4 insertions(+), 54 deletions(-) delete mode 100644 containers/minimal/Dockerfile diff --git a/containers/HPC/Dockerfile b/containers/HPC/Dockerfile index 4a3ea5d..6b39e95 100644 --- a/containers/HPC/Dockerfile +++ b/containers/HPC/Dockerfile @@ -69,6 +69,6 @@ RUN HYBRACTER_PKG=$(python3 -c "import hybracter, os; print(os.path.dirname(hybr touch ${HYBRACTER_PKG}/databases/medaka.flag RUN python3 -c "import hybracter, os; print(os.listdir(os.path.join(os.path.dirname(hybracter.__file__), 'databases')))" RUN hybracter install --medaka -RUN hybracter test-hybrid --use-conda -t 8 -o hybracter_out_hybrid -RUN hybracter test-long --use-conda -t 8 -o hybracter_out_long -RUN rm -rf hybracter_out_long hybracter_out_hybrid +RUN hybracter test-hybrid --use-conda -t 8 -o hybracter_out_hybrid --contaminants lambda +RUN hybracter test-long --use-conda -t 8 -o hybracter_out_long --contaminants lambda +RUN rm -rf hybracter_out_long hybracter_out_hybrid hybracter_out_contam diff --git a/containers/minimal/Dockerfile b/containers/minimal/Dockerfile deleted file mode 100644 index a0812bb..0000000 --- a/containers/minimal/Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -###################################################### -# Minimal contains the bare minimum to run hybracter # -# and requires to run hybracter install before use # -###################################################### -FROM ubuntu:25.04 AS minimal - -ENV TERM=xterm-256color -# Ignore any user site-packages (~/.local) bind-mounted from the host. Apptainer/ -# Singularity mount $HOME by default, and Python puts ~/.local ahead of the -# container's site-packages - a stale host sqlalchemy (<2.0) there shadowed the -# container's copy and broke snakemake with -# "cannot import name 'DOUBLE' from 'sqlalchemy.types'" (issue #160). -ENV PYTHONNOUSERSITE=1 - -# Install miniforge and hybracter -ARG MINIFORGE_VERSION=25.3.0-1 -ARG MINIFORGE_PATH=/opt/miniforge -ENV PATH=${MINIFORGE_PATH}/bin:${PATH} -RUN set -eux; \ - apt-get update \ - && apt-get -y install --no-install-recommends \ - wget=1.24.5-2ubuntu1 \ - ca-certificates=20241223 \ - # Installing miniforge - # partly based on https://github.com/conda-forge/miniforge-images/blob/8c784163a44af85c5918ac4bede66d3de2074d82/ubuntu/Dockerfilee - && wget -q -O /tmp/miniforge.sh https://github.com/conda-forge/miniforge/releases/download/${MINIFORGE_VERSION}/Miniforge3-${MINIFORGE_VERSION}-Linux-x86_64.sh \ - && bash /tmp/miniforge.sh -b -p ${MINIFORGE_PATH}/ \ - # Installing hybracter - && mamba install -y \ - bioconda::hybracter==0.11.2 \ - # Cleanup - && rm -rf /tmp/miniforge.sh \ - && find ${MINIFORGE_PATH} -follow -type f -name '*.a' -delete \ - && find ${MINIFORGE_PATH} -follow -type f -name '*.pyc' -delete \ - && mamba clean -afy \ - && apt-get -y --purge autoremove \ - wget \ - ca-certificates \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -################################################ -# Full is built on top of minimal and contains # -# all databases and dependencies # -################################################ -FROM minimal AS full -RUN hybracter install --medaka \ - && hybracter test-hybrid --use-conda --conda-create-envs-only \ - && hybracter test-long --use-conda --conda-create-envs-only \ - && rm -rf hybracter_out diff --git a/hybracter/hybracter.VERSION b/hybracter/hybracter.VERSION index a803cc2..930e300 100644 --- a/hybracter/hybracter.VERSION +++ b/hybracter/hybracter.VERSION @@ -1 +1 @@ -0.14.0 +0.14.1 From fd59e916697b474623646e289e37336046c0e76c Mon Sep 17 00:00:00 2001 From: gbouras13 Date: Fri, 24 Jul 2026 09:57:44 +0930 Subject: [PATCH 2/3] Fix #165 delete SAM files to save space --- hybracter/workflow/rules/assess/assess_complete.smk | 10 +++++----- .../rules/assess/assess_complete_no_medaka.smk | 6 +++--- hybracter/workflow/rules/assess/assess_incomplete.smk | 4 ++++ .../rules/assess/assess_incomplete_no_medaka.smk | 3 +++ .../workflow/rules/polishing/short_read_polish.smk | 1 + .../rules/polishing/short_read_polish_incomplete.smk | 1 + .../short_read_polish_incomplete_no_medaka.smk | 1 + .../rules/polishing/short_read_polish_no_medaka.smk | 1 + 8 files changed, 19 insertions(+), 8 deletions(-) diff --git a/hybracter/workflow/rules/assess/assess_complete.smk b/hybracter/workflow/rules/assess/assess_complete.smk index 9ed84b9..0271972 100644 --- a/hybracter/workflow/rules/assess/assess_complete.smk +++ b/hybracter/workflow/rules/assess/assess_complete.smk @@ -44,7 +44,7 @@ rule assess_chrom_pre_polish: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ @@ -79,7 +79,7 @@ rule assess_medaka_rd_1: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ @@ -112,7 +112,7 @@ rule assess_medaka_rd_2: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ @@ -145,7 +145,7 @@ rule assess_polypolish: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ @@ -178,5 +178,5 @@ rule assess_pypolca: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ diff --git a/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk b/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk index 82f35fb..a387390 100644 --- a/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk +++ b/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk @@ -44,7 +44,7 @@ rule assess_chrom_pre_polish: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ @@ -79,7 +79,7 @@ rule assess_polypolish: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ @@ -112,5 +112,5 @@ rule assess_pypolca: bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {log} + rm {output.sam1} {log} """ diff --git a/hybracter/workflow/rules/assess/assess_incomplete.smk b/hybracter/workflow/rules/assess/assess_incomplete.smk index cb4dcbc..af3f6ca 100644 --- a/hybracter/workflow/rules/assess/assess_incomplete.smk +++ b/hybracter/workflow/rules/assess/assess_incomplete.smk @@ -35,6 +35,7 @@ rule assess_incomp_pre_polish: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ @@ -72,6 +73,7 @@ rule assess_medaka_incomplete: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ @@ -114,6 +116,7 @@ rule assess_polypolish_incomplete: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ @@ -154,4 +157,5 @@ rule assess_polca_incomplete: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ diff --git a/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk b/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk index 3140b08..acafcac 100644 --- a/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk +++ b/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk @@ -35,6 +35,7 @@ rule assess_incomp_pre_polish: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ @@ -77,6 +78,7 @@ rule assess_polypolish_incomplete: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ @@ -117,4 +119,5 @@ rule assess_polca_incomplete: bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} ALE {output.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} + rm {output.sam1} """ diff --git a/hybracter/workflow/rules/polishing/short_read_polish.smk b/hybracter/workflow/rules/polishing/short_read_polish.smk index 32b72b7..22abffa 100644 --- a/hybracter/workflow/rules/polishing/short_read_polish.smk +++ b/hybracter/workflow/rules/polishing/short_read_polish.smk @@ -74,6 +74,7 @@ rule polypolish: polypolish polish --careful {input.fasta} {input.sam1} {input.sam2} > {output.fasta} 2> {log} fi polypolish --version > {output.version} + rm {input.sam1} {input.sam2} """ diff --git a/hybracter/workflow/rules/polishing/short_read_polish_incomplete.smk b/hybracter/workflow/rules/polishing/short_read_polish_incomplete.smk index 9e3fe60..abd54db 100644 --- a/hybracter/workflow/rules/polishing/short_read_polish_incomplete.smk +++ b/hybracter/workflow/rules/polishing/short_read_polish_incomplete.smk @@ -82,4 +82,5 @@ rule polypolish_incomplete: fi polypolish --version > {output.version} cp {output.fasta} {output.copy_fasta} + rm {input.sam1} {input.sam2} """ diff --git a/hybracter/workflow/rules/polishing/short_read_polish_incomplete_no_medaka.smk b/hybracter/workflow/rules/polishing/short_read_polish_incomplete_no_medaka.smk index e44ea21..1ba17de 100644 --- a/hybracter/workflow/rules/polishing/short_read_polish_incomplete_no_medaka.smk +++ b/hybracter/workflow/rules/polishing/short_read_polish_incomplete_no_medaka.smk @@ -82,4 +82,5 @@ rule polypolish_incomplete: fi polypolish --version > {output.version} cp {output.fasta} {output.copy_fasta} + rm {input.sam1} {input.sam2} """ diff --git a/hybracter/workflow/rules/polishing/short_read_polish_no_medaka.smk b/hybracter/workflow/rules/polishing/short_read_polish_no_medaka.smk index 858f6ca..45b526d 100644 --- a/hybracter/workflow/rules/polishing/short_read_polish_no_medaka.smk +++ b/hybracter/workflow/rules/polishing/short_read_polish_no_medaka.smk @@ -94,6 +94,7 @@ rule polypolish: polypolish polish --careful {input.fasta} {input.sam1} {input.sam2} > {output.fasta} 2> {log} fi polypolish --version > {output.version} + rm {input.sam1} {input.sam2} """ From 0eb995d46538cc7cd7663a1bfebed349b15ab78d Mon Sep 17 00:00:00 2001 From: gbouras13 Date: Fri, 24 Jul 2026 13:29:14 +0930 Subject: [PATCH 3/3] fix #165 fix new sam param directory --- .../workflow/rules/assess/assess_complete.smk | 47 ++++++++++--------- .../assess/assess_complete_no_medaka.smk | 29 +++++++----- .../rules/assess/assess_incomplete.smk | 38 ++++++++------- .../assess/assess_incomplete_no_medaka.smk | 29 ++++++------ .../workflow/rules/preflight/directories.smk | 1 + 5 files changed, 78 insertions(+), 66 deletions(-) diff --git a/hybracter/workflow/rules/assess/assess_complete.smk b/hybracter/workflow/rules/assess/assess_complete.smk index 0271972..327b7fa 100644 --- a/hybracter/workflow/rules/assess/assess_complete.smk +++ b/hybracter/workflow/rules/assess/assess_complete.smk @@ -1,7 +1,7 @@ """ scores need to be sequential so that it can easily be aggregated based on a polca flag or not - otherwise I need another rule -assess all the genome (including plasmids). +assess all the genome (including plasmids). This is to avoid the Medaka polishing style errors when you use the whole read set to polish only certain contigs @@ -27,7 +27,8 @@ rule assess_chrom_pre_polish: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "chrom_pre_polish.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_chrom_pre_polish_1.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_chrom_pre_polish_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -41,10 +42,10 @@ rule assess_chrom_pre_polish: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ @@ -62,7 +63,8 @@ rule assess_medaka_rd_1: output: score=os.path.join(dir.out.ale_scores_complete, "{sample}", "medaka_rd_1.score"), ale=temp(os.path.join(dir.out.ale_out_files, "{sample}", "medaka_rd_1.ale")), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_medaka_rd_1.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_medaka_rd_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -76,10 +78,10 @@ rule assess_medaka_rd_1: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ @@ -96,7 +98,8 @@ rule assess_medaka_rd_2: output: score=os.path.join(dir.out.ale_scores_complete, "{sample}", "medaka_rd_2.score"), ale=temp(os.path.join(dir.out.ale_out_files, "{sample}", "medaka_rd_2.ale")), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_medaka_rd_2.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_medaka_rd_2.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -109,10 +112,10 @@ rule assess_medaka_rd_2: os.path.join(dir.out.stderr, "ale", "{sample}_medaka_rd_2.log"), shell: """ - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ @@ -128,7 +131,8 @@ rule assess_polypolish: output: score=os.path.join(dir.out.ale_scores_complete, "{sample}", "polypolish.score"), ale=temp(os.path.join(dir.out.ale_out_files, "{sample}", "polypolish.ale")), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_polypolish.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_polypolish.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -142,10 +146,10 @@ rule assess_polypolish: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ @@ -161,7 +165,8 @@ rule assess_pypolca: output: score=os.path.join(dir.out.ale_scores_complete, "{sample}", "pypolca.score"), ale=temp(os.path.join(dir.out.ale_out_files, "{sample}", "pypolca.ale")), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_pypolca.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_pypolca.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -175,8 +180,8 @@ rule assess_pypolca: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ diff --git a/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk b/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk index a387390..e9f0e19 100644 --- a/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk +++ b/hybracter/workflow/rules/assess/assess_complete_no_medaka.smk @@ -1,7 +1,7 @@ """ scores need to be sequential so that it can easily be aggregated based on a polca flag or not - otherwise I need another rule -assess all the genome (including plasmids). +assess all the genome (including plasmids). This is to avoid the Medaka polishing style errors when you use the whole read set to polish only certain contigs @@ -27,7 +27,8 @@ rule assess_chrom_pre_polish: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "chrom_pre_polish.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_chrom_pre_polish_1.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_chrom_pre_polish_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -41,10 +42,10 @@ rule assess_chrom_pre_polish: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ @@ -62,7 +63,8 @@ rule assess_polypolish: output: score=os.path.join(dir.out.ale_scores_complete, "{sample}", "polypolish.score"), ale=temp(os.path.join(dir.out.ale_out_files, "{sample}", "polypolish.ale")), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_polypolish.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_polypolish.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -76,10 +78,10 @@ rule assess_polypolish: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ @@ -95,7 +97,8 @@ rule assess_pypolca: output: score=os.path.join(dir.out.ale_scores_complete, "{sample}", "pypolca.score"), ale=temp(os.path.join(dir.out.ale_out_files, "{sample}", "pypolca.ale")), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_pypolca.sam")), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_pypolca.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -109,8 +112,8 @@ rule assess_pypolca: shell: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} {input.r2} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} {log} + rm {params.sam1} {log} """ diff --git a/hybracter/workflow/rules/assess/assess_incomplete.smk b/hybracter/workflow/rules/assess/assess_incomplete.smk index af3f6ca..5e35d61 100644 --- a/hybracter/workflow/rules/assess/assess_incomplete.smk +++ b/hybracter/workflow/rules/assess/assess_incomplete.smk @@ -14,10 +14,11 @@ rule assess_incomp_pre_polish: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "incomp_pre_polish.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_incomp_pre_polish_1.sam")), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "incomp_pre_polish.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_incomp_pre_polish_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -32,10 +33,10 @@ rule assess_incomp_pre_polish: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ @@ -54,10 +55,11 @@ rule assess_medaka_incomplete: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "medaka_incomplete.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_medaka_incomplete_1.sam")), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "medaka_incomplete.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_medaka_incomplete_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -70,10 +72,10 @@ rule assess_medaka_incomplete: os.path.join(dir.out.stderr, "ale", "{sample}_incomp_medaka.log"), shell: """ - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ @@ -93,12 +95,11 @@ rule assess_polypolish_incomplete: dir.out.ale_out_files, "{sample}", "polypolish_incomplete.ale" ) ), - sam1=temp( - os.path.join(dir.out.ale_sams, "{sample}_polypolish_incomplete_1.sam") - ), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "polypolish_incomplete.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_polypolish_incomplete_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -113,10 +114,10 @@ rule assess_polypolish_incomplete: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ @@ -136,10 +137,11 @@ rule assess_polca_incomplete: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "pypolca_incomplete.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_pypolca_incomplete_1.sam")), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "pypolca_incomplete.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_pypolca_incomplete_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -154,8 +156,8 @@ rule assess_polca_incomplete: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ diff --git a/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk b/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk index acafcac..281f65a 100644 --- a/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk +++ b/hybracter/workflow/rules/assess/assess_incomplete_no_medaka.smk @@ -14,10 +14,11 @@ rule assess_incomp_pre_polish: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "incomp_pre_polish.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_incomp_pre_polish_1.sam")), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "incomp_pre_polish.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_incomp_pre_polish_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -32,10 +33,10 @@ rule assess_incomp_pre_polish: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ @@ -55,12 +56,11 @@ rule assess_polypolish_incomplete: dir.out.ale_out_files, "{sample}", "polypolish_incomplete.ale" ) ), - sam1=temp( - os.path.join(dir.out.ale_sams, "{sample}_polypolish_incomplete_1.sam") - ), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "polypolish_incomplete.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_polypolish_incomplete_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -75,10 +75,10 @@ rule assess_polypolish_incomplete: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ @@ -98,10 +98,11 @@ rule assess_polca_incomplete: ale=temp( os.path.join(dir.out.ale_out_files, "{sample}", "pypolca_incomplete.ale") ), - sam1=temp(os.path.join(dir.out.ale_sams, "{sample}_pypolca_incomplete_1.sam")), score=os.path.join( dir.out.ale_scores_incomplete, "{sample}", "pypolca_incomplete.score" ), + params: + sam1=os.path.join(dir.out.ale_sams, "{sample}_pypolca_incomplete_1.sam"), conda: os.path.join(dir.env, "ale.yaml") resources: @@ -116,8 +117,8 @@ rule assess_polca_incomplete: """ bwa index {input.fasta} - bwa mem -t {threads} -a {input.fasta} {input.r1} > {output.sam1} 2> {log} - ALE {output.sam1} {input.fasta} {output.ale} 2> {log} + bwa mem -t {threads} -a {input.fasta} {input.r1} > {params.sam1} 2> {log} + ALE {params.sam1} {input.fasta} {output.ale} 2> {log} grep "# ALE_score: " {output.ale} | sed 's/# ALE_score: //' > {output.score} - rm {output.sam1} + rm {params.sam1} """ diff --git a/hybracter/workflow/rules/preflight/directories.smk b/hybracter/workflow/rules/preflight/directories.smk index cf7531d..ead1bdb 100644 --- a/hybracter/workflow/rules/preflight/directories.smk +++ b/hybracter/workflow/rules/preflight/directories.smk @@ -123,6 +123,7 @@ dir.out.ale_scores_incomplete = os.path.join( dir.out.processing, "ale_scores_incomplete" ) dir.out.ale_sams = os.path.join(dir.out.processing, "ale_sams") +os.makedirs(dir.out.ale_sams, exist_ok=True) dir.out.ale_out_files = os.path.join(dir.out.processing, "ale_out_files") dir.out.ale_summary = os.path.join(dir.out.results, "ale_score_summaries")