From b68c11c9d31d677884331e32ef67800003812af4 Mon Sep 17 00:00:00 2001
From: kdc715 <kedic@LIT-PF3VB193.localdomain>
Date: Mon, 16 Dec 2024 15:18:54 +0100
Subject: [PATCH] fix log files; change email waiting time to 12:00:00

---
 Snakefile                      |  4 +--
 snakemodules/analysis.smk      | 22 --------------
 snakemodules/contigmap.smk     | 42 ++++++++++++++-------------
 snakemodules/crop_remapped.smk | 25 ++++++++++------
 snakemodules/crop_unmapped.smk | 30 +++++++++++++-------
 snakemodules/genotype.smk      | 15 +++++++---
 snakemodules/kraken.smk        | 52 +++++++++++++++++++++-------------
 snakemodules/merge.smk         |  4 ++-
 snakemodules/minia.smk         | 20 +++++++------
 snakemodules/position.smk      | 28 ++++++++++++------
 snakemodules/velvet.smk        | 28 ++++++++++--------
 11 files changed, 154 insertions(+), 116 deletions(-)

diff --git a/Snakefile b/Snakefile
index e66f1c6..bb1b5c6 100644
--- a/Snakefile
+++ b/Snakefile
@@ -14,6 +14,7 @@ configfile: os.path.join(workflow.basedir,"config","cluster_config.yaml")
 INPUT_DIR = config["INPUT_DIR"]
 REFERENCE = config["REFERENCE"]
 ALTREF = config["ALTREF"]
+kraken_db_path = config["kraken_db_path"]
 OUTPUT_PATH = config["OUTPUT_PATH"]
 WORKFLOW_PATH = config["WORKFLOW_PATH"]
 ASSEMBLER = config["ASSEMBLER"]
@@ -27,8 +28,7 @@ relative_paths = {
     POPINS2_BIN := os.path.join(WORKFLOW_PATH,config["POPINS2_BIN"]),
     SICKLE := os.path.join(WORKFLOW_PATH,config["SICKLE_BIN"]),
     GATB := os.path.join(WORKFLOW_PATH,config["MINIA_BIN"]),
-    VELVET := os.path.join(WORKFLOW_PATH, config["VELVET_BIN"]),
-    kraken_db_path := os.path.join(WORKFLOW_PATH, config["kraken_db_path"])
+    VELVET := os.path.join(WORKFLOW_PATH, config["VELVET_BIN"])
     }
 
 
diff --git a/snakemodules/analysis.smk b/snakemodules/analysis.smk
index 5941dff..7034e85 100644
--- a/snakemodules/analysis.smk
+++ b/snakemodules/analysis.smk
@@ -30,8 +30,6 @@ if config["SICKLE"]=="no":
             RESULTS_DIR + "/read_numbers.png"
         conda:
             "envs/notebooks.yml"
-        log:
-            "logs/analysis/unmapped_analysis.log"
         benchmark:
             "benchmarks/analysis/unmapped_analysis.txt"
         resources:
@@ -76,8 +74,6 @@ if config["SICKLE"]=="no":
                 RESULTS_DIR + "/read_numbers_no_sickle_after_clean.png"
             conda:
                 "envs/notebooks.yml"
-            log:
-                "logs/analysis/unmapped_analysis_after_clean.log"
             benchmark:
                 "benchmarks/analysis/unmapped_analysis_after_cleaning.txt"
             resources:
@@ -123,8 +119,6 @@ elif config["SICKLE"]=="yes":
                 RESULTS_DIR + "/read_numbers_before_filter.png"
             conda:
                 "envs/notebooks.yml"
-            log:
-                "logs/analysis/unmapped_analysis_before_filter.log"
             benchmark:
                 "benchmarks/analysis/unmapped_analysis_before_filter.txt"
             resources:
@@ -168,8 +162,6 @@ elif config["SICKLE"]=="yes":
                 RESULTS_DIR + "/read_numbers_after_filter.png"
             conda:
                 "envs/notebooks.yml"
-            log:
-                "logs/analysis/unmapped_analysis_after_filter.log"
             benchmark:
                 "benchmarks/analysis/unmapped_analysis_after_filter.txt"
             resources:
@@ -214,8 +206,6 @@ elif config["SICKLE"]=="yes":
                 RESULTS_DIR + "/read_numbers_before_clean_filter.png"
             conda:
                 "envs/notebooks.yml"
-            log:
-                "logs/analysis/unmapped_analysis_before_clean_filter.log"
             benchmark:
                 "benchmarks/analysis/unmapped_analysis_before_clean_filte.txt"
             resources:
@@ -259,8 +249,6 @@ elif config["SICKLE"]=="yes":
                 RESULTS_DIR + "/read_numbers_after_clean.png"
             conda:
                 "envs/notebooks.yml"
-            log:
-                "logs/analysis/unmapped_analysis_after_clean.log"
             benchmark:
                 "benchmarks/analysis/unmapped_analysis_after_cleaning.txt"
             resources:
@@ -304,8 +292,6 @@ elif config["SICKLE"]=="yes":
                 RESULTS_DIR + "/read_numbers_after_clean_filter.png"
             conda:
                 "envs/notebooks.yml"
-            log:
-                "logs/analysis/unmapped_analysis_after_clean_filter.log"
             benchmark:
                 "benchmarks/analysis/unmapped_analysis_after_clean_filter.txt"
             resources:
@@ -348,8 +334,6 @@ rule assembly_analysis_table:
         RESULTS_DIR + "/analysis_table.png"
     conda:
         "envs/notebooks.yml"
-    log:
-        "logs/analysis/assembly_analysis_table.log"
     benchmark:
         "benchmarks/analysis/assembly_analysis_table.txt"
     resources:
@@ -391,8 +375,6 @@ rule assembly_analysis:
         gc = RESULTS_DIR + "/gc_content_dist.png"
     conda:
         "envs/notebooks.yml"
-    log:
-        "logs/analysis/assembly_analysis.log"
     benchmark:
         "benchmarks/analysis/assembly_analysis.txt"
     resources:
@@ -413,8 +395,6 @@ rule calculate_coverage:
         cov = temp(WORK_DIR + "/{sample}/coverage.txt")
     conda:
         "envs/samtools21.yml"
-    log:
-        "logs/analysis/{sample}_calculate_coverage.log"
     benchmark:
         "benchmarks/analysis/{sample}_calculate_coverage.txt"
     resources:
@@ -456,8 +436,6 @@ rule coverage_analysis:
         RESULTS_DIR + "/heatmap_coverage.png"
     conda:
         "envs/notebooks.yml"
-    log:
-        "logs/analysis/coverage_analysis.log"
     benchmark:
         "benchmarks/analysis/coverage_analysis.txt"
     resources:
diff --git a/snakemodules/contigmap.smk b/snakemodules/contigmap.smk
index 7b7445c..392dc16 100644
--- a/snakemodules/contigmap.smk
+++ b/snakemodules/contigmap.smk
@@ -20,11 +20,11 @@ rule index_supercontigs:
     threads: 
         threads["single"]
     log:
-        "logs/contigmap/index_supercontigs.log"
+        err="logs/contigmap/index_supercontigs.err"
     benchmark:
         "benchmarks/contigmap/index_supercontigs.txt"
     shell:
-        "bwa index {RESULTS_DIR}/supercontigs.fa"
+        "bwa index {RESULTS_DIR}/supercontigs.fa 2> {log.err}"
 
 
 if config["remove_contamination"] == 'yes':
@@ -48,14 +48,14 @@ if config["remove_contamination"] == 'yes':
         threads: 
             threads["multi"]["bwa"]
         log:
-            "logs/contigmap/{sample}_map_supercontigs_clean.log"
+            err="logs/contigmap/map_supercontigs.err"
         benchmark:
             "benchmarks/contigmap/{sample}_map_supercontigs_clean.txt"
         shell:
             "bwa mem -a -Y -t {threads} {RESULTS_DIR}/supercontigs.fa {input.pe1} {input.pe2} "
-            "> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam;"
-            "bwa mem -a -Y -t {threads} {RESULTS_DIR}/supercontigs.fa {input.se} | awk '$1 !~ /@/' "
-            ">> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam;"
+            "> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam 2>> {log.err};"
+            "bwa mem -a -Y -t {threads} {RESULTS_DIR}/supercontigs.fa {input.se} 2>> {log.err} | "
+            "awk '$1 !~ /@/' >> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam"
 
 
 elif config["remove_contamination"] == 'no':  
@@ -78,14 +78,14 @@ elif config["remove_contamination"] == 'no':
         threads: 
             threads["multi"]["bwa"]
         log:
-            "logs/contigmap/{sample}_map_supercontigs.log"
+            err="logs/contigmap/{sample}_map_supercontigs.err"
         benchmark:
             "benchmarks/contigmap/{sample}_map_supercontigs.txt"
         shell:
             "bwa mem -a -Y -t {threads} {RESULTS_DIR}/supercontigs.fa {input.pe1} {input.pe2} "
-            "> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam;"
-            "bwa mem -a -Y -t {threads} {RESULTS_DIR}/supercontigs.fa {input.se} | awk '$1 !~ /@/' "
-            ">> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam;"
+            "> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam 2>> {log.err};"
+            "bwa mem -a -Y -t {threads} {RESULTS_DIR}/supercontigs.fa {input.se} 2>> {log.err} | "
+            "awk '$1 !~ /@/' >> {WORK_DIR}/{wildcards.sample}/contig_mapped_unsorted.sam"
         
 ################################################################################
 
@@ -102,11 +102,11 @@ rule name_sort_unsorted:
     threads: 
         threads["multi"]["samtools"]
     log:
-        "logs/contigmap/{sample}_name_sort_unsorted.log"
+        err="logs/contigmap/{sample}_name_sort_unsorted.err"
     benchmark:
         "benchmarks/contigmap/{sample}_name_sort_unsorted.txt"
     shell:
-        "samtools sort -n -@ {threads} -m {resources.mem_mb} -o {output} {input}"
+        "samtools sort -n -@ {threads} -m {resources.mem_mb}M -o {output} {input} 2> {log.err}"
 
 ################################################################################
 
@@ -124,7 +124,8 @@ if config["remove_contamination"] == 'yes':
         threads: 
             threads["single"]
         log:
-            "logs/contigmap/{sample}_contaminate_removed_remap_merge_set_mate.log"
+            out="logs/contigmap/{sample}_contaminate_removed_remap_merge_set_mate.out",
+            err="logs/contigmap/{sample}_contaminate_removed_remap_merge_set_mate.err"
         benchmark:
             "benchmarks/contigmap/{sample}_contaminate_removed_remap_merge_set_mate.txt"
         shell:
@@ -132,6 +133,7 @@ if config["remove_contamination"] == 'yes':
             "   --prefix {WORK_DIR} "
             "   --sample {wildcards.sample} "
             "   -o merged.bam "
+            "   > {log.out} 2> {log.err} "
 
 
 elif config["remove_contamination"] == 'no':
@@ -148,14 +150,16 @@ elif config["remove_contamination"] == 'no':
         threads: 
             threads["single"]
         log:
-            "logs/contigmap/{sample}_remap_merge_set_mate.log"
+            out="logs/contigmap/{sample}_remap_merge_set_mate.out",
+            err="logs/contigmap/{sample}_remap_merge_set_mate.err"
         benchmark:
             "benchmarks/contigmap/{sample}_remap_merge_set_mate.txt"
         shell:
             "{POPINS2_BIN} merge-bams non_ref.bam contig_mapped.bam"
             "   --prefix {WORK_DIR} "
             "   --sample {wildcards.sample} "
-            "   -o merged.bam "   
+            "   -o merged.bam "
+            "   > {log.out} 2> {log.err} "   
 
 ################################################################################
 
@@ -172,11 +176,11 @@ rule coordinate_sort_unsorted:
     threads: 
         threads["multi"]["samtools"]
     log:
-        "logs/contigmap/{sample}_coordinate_sort_unsorted.log"
+        err="logs/contigmap/{sample}_coordinate_sort_unsorted.err"
     benchmark:
         "benchmarks/contigmap/{sample}_coordinate_sort_unsorted.txt"
     shell:
-        "samtools sort -@ {threads} -m {resources.mem_mb} -o {output} {input}"
+        "samtools sort -@ {threads} -m {resources.mem_mb}M -o {output} {input} 2> {log.err}"
 
 
 rule index_sorted:
@@ -192,8 +196,8 @@ rule index_sorted:
     threads: 
         threads["single"]
     log:
-        "logs/contigmap/{sample}_index_sorted.log"
+        err="logs/contigmap/{sample}_index_sorted.err"
     benchmark:
         "benchmarks/contigmap/{sample}_index_sorted.txt"
     shell:
-        "samtools index {input}"
\ No newline at end of file
+        "samtools index {input} 2> {log.err}"
\ No newline at end of file
diff --git a/snakemodules/crop_remapped.smk b/snakemodules/crop_remapped.smk
index edb36c0..e8d978b 100644
--- a/snakemodules/crop_remapped.smk
+++ b/snakemodules/crop_remapped.smk
@@ -36,7 +36,8 @@ if config["SICKLE"]=="no":
         threads: 
             threads["single"]
         log:
-            "logs/crop_remapped/{sample}_crop_remapped.log"
+            out="logs/crop_remapped/{sample}_crop_remapped.out",
+            err="logs/crop_remapped/{sample}_crop_remapped.err"
         benchmark:
             "benchmarks/crop_remapped/{sample}_crop_remapped.txt"
         shell:
@@ -46,6 +47,7 @@ if config["SICKLE"]=="no":
             "   --sample {wildcards.sample}"
             "   --min-qual {params.q}"
             "   --min-read-len {params.l}"
+            "   > {log.out} 2> {log.err}"
             
     rule popins2_sort:
         input:
@@ -61,11 +63,11 @@ if config["SICKLE"]=="no":
         threads: 
             threads["multi"]["samtools"]
         log:
-            "logs/crop_remapped/{sample}_sort.log"
+            err="logs/crop_remapped/{sample}_sort.err"
         benchmark:
             "benchmarks/crop_remapped/{sample}_sort.txt"
         shell:
-            "samtools sort -n -@ {threads} -m {resources.mem_mb} -o {output} {input.mates}" 
+            "samtools sort -n -@ {threads} -m {resources.mem_mb}M -o {output} {input.mates} 2> {log.err}" 
     
 
 elif config["SICKLE"]=="yes":
@@ -88,7 +90,8 @@ elif config["SICKLE"]=="yes":
         threads: 
             threads["single"]
         log:
-            "logs/crop_remapped/{sample}_crop_remapped_sickle.log"
+            out="logs/crop_remapped/{sample}_crop_remapped_sickle.out",
+            err="logs/crop_remapped/{sample}_crop_remapped_sickle.err"
         benchmark:
             "benchmarks/crop_remapped/{sample}_crop_remapped_sickle.txt"
         shell:
@@ -96,6 +99,7 @@ elif config["SICKLE"]=="yes":
             "{POPINS2_BIN} crop-unmapped {input}"
             "   --prefix {WORK_DIR} "
             "   --sample {wildcards.sample}"
+            "   > {log.out} 2> {log.err}"
 
     rule popins2_sort:
         input:
@@ -111,11 +115,11 @@ elif config["SICKLE"]=="yes":
         threads: 
             threads["multi"]["samtools"]
         log:
-            "logs/crop_remapped/{sample}_sort_sickle.log"
+            err="logs/crop_remapped/{sample}_sort_sickle.err"
         benchmark:
             "benchmarks/crop_remapped/{sample}_sort_sickle.txt"
         shell:
-            "samtools sort -n -@ {threads} -m {resources.mem_mb} -o {output} {input.mates}" 
+            "samtools sort -n -@ {threads} -m {resources.mem_mb}M -o {output} {input.mates} 2> {log.err}" 
 
     rule popins2_sickle:
         input:
@@ -138,15 +142,18 @@ elif config["SICKLE"]=="yes":
         threads: 
             threads["single"]
         log:
-            "logs/crop_remapped/{sample}_sickle.log"
+            out="logs/crop_remapped/{sample}_sickle.out",
+            err="logs/crop_remapped/{sample}_sickle.err"
         benchmark:
             "benchmarks/crop_remapped/{sample}_sickle.txt"
         shell:
             "{SICKLE}"
             "   pe -q {params.q} -l {params.l} -x -n -t sanger"
             "   -f {input.pair_1} -r {input.pair_2}"
-            "   -o {output.pair_1} -p {output.pair_2} -s {output.single};"
+            "   -o {output.pair_1} -p {output.pair_2} -s {output.single}"
+            "   > {log.out} 2> {log.err}; "
             "{SICKLE}"
             "   se -q {params.q} -l {params.l} -x -n -t sanger"
-            "   -f {input.single} -o {output.temp_single};"
+            "   -f {input.single} -o {output.temp_single}"
+            "   >> {log.out} 2>> {log.err}; "
             "cat {output.temp_single} >> {output.single}"
\ No newline at end of file
diff --git a/snakemodules/crop_unmapped.smk b/snakemodules/crop_unmapped.smk
index a28c622..19ce9c1 100644
--- a/snakemodules/crop_unmapped.smk
+++ b/snakemodules/crop_unmapped.smk
@@ -35,16 +35,18 @@ if config["SICKLE"]=="no":
         threads: 
             threads["single"]
         log:
-            "logs/crop_unmapped/{sample}_crop_unmapped.log"
+            out="logs/crop_unmapped/{sample}_crop_unmapped.out",
+            err="logs/crop_unmapped/{sample}_crop_unmapped.err"
         benchmark:
             "benchmarks/crop_unmapped/{sample}_crop_unmapped.txt"
         shell:
-            "mkdir -p {WORK_DIR}/{wildcards.sample}; "
+            "mkdir -p {OUTPUT_PATH}/{WORK_DIR}/{wildcards.sample}; "
             "{POPINS2_BIN} crop-unmapped {input}"
             "   --prefix {WORK_DIR} "
             "   --sample {wildcards.sample}"
             "   --min-qual {params.q}"
             "   --min-read-len {params.l}"
+            "   > {log.out} 2> {log.err}"
             
     rule popins2_sort:
         input:
@@ -60,11 +62,11 @@ if config["SICKLE"]=="no":
         threads: 
             threads["multi"]["samtools"]
         log:
-            "logs/crop_unmapped/{sample}_sort.log"
+            err="logs/crop_unmapped/{sample}_sort.err"
         benchmark:
             "benchmarks/crop_unmapped/{sample}_sort.txt"
         shell:
-            "samtools sort -n -@ {threads} -m {resources.mem_mb} -o {output} {input.mates}" 
+            "samtools sort -n -@ {threads} -m {resources.mem_mb}M -o {output} {input.mates} 2> {log.err}" 
 
 
 elif config["SICKLE"]=="yes":
@@ -87,7 +89,8 @@ elif config["SICKLE"]=="yes":
         threads: 
             threads["single"]
         log:
-            "logs/crop_unmapped/{sample}_crop_unmapped_sickle.log"
+            out="logs/crop_unmapped/{sample}_crop_unmapped_sickle.out",
+            err="logs/crop_unmapped/{sample}_crop_unmapped_sickle.err"
         benchmark:
             "benchmarks/crop_unmapped/{sample}_crop_unmapped_sickle.txt"
         shell:
@@ -95,6 +98,7 @@ elif config["SICKLE"]=="yes":
             "{POPINS2_BIN} crop-unmapped {input}"
             "   --prefix {WORK_DIR} "
             "   --sample {wildcards.sample}"
+            "   > {log.out} 2> {log.err}"
             
     rule popins2_sort:
         input:
@@ -110,11 +114,11 @@ elif config["SICKLE"]=="yes":
         conda:
             "envs/samtools.yml"
         log:
-            "logs/crop_unmapped/{sample}_sort_sickle.log"
+            err="logs/crop_unmapped/{sample}_sort_sickle.err"
         benchmark:
             "benchmarks/crop_unmapped/{sample}_sort_sickle.txt"
         shell:
-            "samtools sort -n -@ {threads} -m {resources.mem_mb} -o {output} {input.mates}"     
+            "samtools sort -n -@ {threads} -m {resources.mem_mb}M -o {output} {input.mates} 2> {log.err}"     
      
     rule popins2_sickle:
         input:
@@ -136,15 +140,19 @@ elif config["SICKLE"]=="yes":
         threads: 
             threads["single"]
         log:
-            "logs/crop_unmapped/{sample}_sickle.log"
+            out="logs/crop_unmapped/{sample}_sickle.out",
+            err="logs/crop_unmapped/{sample}_sickle.err"
         benchmark:
             "benchmarks/crop_unmapped/{sample}_sickle.txt"
         shell:
             "{SICKLE}"
             "   pe -q {params.q} -l {params.l} -x -n -t sanger"
             "   -f {input.pair_1} -r {input.pair_2}"
-            "   -o {output.pair_1} -p {output.pair_2} -s {output.single};"
+            "   -o {output.pair_1} -p {output.pair_2} -s {output.single}"
+            "   > {log.out} 2> {log.err}; "
             "{SICKLE}"
             "   se -q {params.q} -l {params.l} -x -n -t sanger"
-            "   -f {input.single} -o {output.temp_single};"
-            "cat {output.temp_single} >> {output.single}"
\ No newline at end of file
+            "   -f {input.single} -o {output.temp_single}"
+            "   >> {log.out} 2>> {log.err}; "
+            "cat {output.temp_single} >> {output.single}"
+            
\ No newline at end of file
diff --git a/snakemodules/genotype.smk b/snakemodules/genotype.smk
index fcda0f6..ccf7108 100644
--- a/snakemodules/genotype.smk
+++ b/snakemodules/genotype.smk
@@ -12,13 +12,15 @@ rule sort_vcf:
     threads: 
         threads["single"]
     log:
-        "logs/genotype/sort_vcf.log"
+        out="logs/genotype/sort_vcf.out",
+        err="logs/genotype/sort_vcf.err"
     benchmark:
         "benchmarks/genotype/sort_vcf.txt"
     shell:
         "bcftools sort {input.ins} "
         "   --output-file {output}"
         "   --output-type v"
+        "   > {log.out} 2> {log.err}"
 
 
 rule popins2_genotype:
@@ -32,7 +34,8 @@ rule popins2_genotype:
     threads: 
         threads["single"]
     log:
-        "logs/genotype/{sample}_genotype.log"
+        out="logs/genotype/{sample}_genotype.out",
+        err="logs/genotype/{sample}_genotype.err"
     benchmark:
         "benchmarks/genotype/{sample}_genotype.txt"
     shell:
@@ -42,6 +45,7 @@ rule popins2_genotype:
         "   --contigs {rules.popins2_merge_contigs.output.supercontigs} "
         "   --reference {REFERENCE} "
         "   {wildcards.sample} "
+        "   > {log.out} 2> {log.err}"
 
 
 rule merge_vcfs:
@@ -57,11 +61,14 @@ rule merge_vcfs:
     threads: 
         threads["single"]
     log:
-        "logs/genotype/merge_vcfs.log"
+        out="logs/genotype/merge_vcfs.out",
+        err="logs/genotype/merge_vcfs.err"
+
     benchmark:
         "benchmarks/genotype/merge_vcfs.txt"
     shell:
         "bcftools merge {input}"
         "  --output {output} "
         "  --output-type z"
-        "  --no-index "
\ No newline at end of file
+        "  --no-index "
+        "  > {log.out} 2> {log.err}"
\ No newline at end of file
diff --git a/snakemodules/kraken.smk b/snakemodules/kraken.smk
index 186f8b1..677dfac 100644
--- a/snakemodules/kraken.smk
+++ b/snakemodules/kraken.smk
@@ -27,7 +27,8 @@ rule kraken_map:
     threads: 
         threads["multi"]["kraken"]
     log:
-        "logs/kraken/{sample}_kraken_map.log"
+        out="logs/kraken/{sample}_kraken_map.out",
+        err="logs/kraken/{sample}_kraken_map.err"
     benchmark:
         "benchmarks/kraken/{sample}_kraken_map.txt"
     shell:
@@ -40,7 +41,8 @@ rule kraken_map:
         --output {output.single_output} \
         --classified-out {output.c_single} \
         --unclassified-out {output.u_single} \
-        {input.fq};
+        {input.fq} \
+        > {log.out} 2> {log.err};
         kraken2 --memory-mapping \
         --db {kraken_db_path} \
         --threads {threads} \
@@ -48,7 +50,8 @@ rule kraken_map:
         --output {output.paired_output} \
         --classified-out {WORK_DIR}/{wildcards.sample}/contaminate_info/cseqs#.fq \
         --unclassified-out {WORK_DIR}/{wildcards.sample}/contaminate_info/useqs#.fq \
-        --paired {input.p1} {input.p2}
+        --paired {input.p1} {input.p2} \
+        >> {log.out} 2>> {log.err}
         """
 
 rule obtain_classified_human_reads:
@@ -71,7 +74,8 @@ rule obtain_classified_human_reads:
     threads: 
         threads["single"]
     log:
-        "logs/kraken/{sample}_obtain_classified_human_reads.log"
+        out="logs/kraken/{sample}_obtain_classified_human_reads.out",
+        err="logs/kraken/{sample}_obtain_classified_human_reads.err"
     benchmark:
         "benchmarks/kraken/{sample}_obtain_classified_human_reads.txt"
     shell:
@@ -82,7 +86,8 @@ rule obtain_classified_human_reads:
             --single_fq {input.single_fq} \
             --paired_fq1 {input.paired_fq1} \
             --paired_fq2 {input.paired_fq2} \
-            --output_prefix {WORK_DIR}/{wildcards.sample}/contaminate_info
+            --output_prefix {WORK_DIR}/{wildcards.sample}/contaminate_info \
+            > {log.out} 2> {log.err}
         """
 
 rule index_ref:
@@ -102,11 +107,11 @@ rule index_ref:
     threads: 
         threads["single"]
     log:
-        "logs/kraken/index_ref.log"
+        err="logs/kraken/index_ref.err"
     benchmark:
         "benchmarks/kraken/index_ref.txt"
     shell:
-        "bwa index {input.ref}"
+        "bwa index {input.ref} 2> {log.err}"
 
 rule bwa_remap_classified_human:
     input:
@@ -125,13 +130,15 @@ rule bwa_remap_classified_human:
     threads: 
         threads["multi"]["bwa"]
     log:
-        "logs/kraken/{sample}_bwa_remap_classified_human.log"
+        err="logs/kraken/{sample}_bwa_remap_classified_human.err"
     benchmark:
         "benchmarks/kraken/{sample}_bwa_remap_classified_human.txt"
     shell:
         """
-        bwa mem -t {threads} -M -R "@RG\\tID:{wildcards.sample}\\tPL:ILLUMINA\\tSM:{wildcards.sample}" {input.ref} {input.single} > {output.remapped_sam};
-        bwa mem -t {threads} -M {input.ref} {input.fq1} {input.fq2} | awk '$1 !~ /@/' >> {output.remapped_sam}
+        bwa mem -t {threads} -M -R "@RG\\tID:{wildcards.sample}\\tPL:ILLUMINA\\tSM:{wildcards.sample}" \
+        {input.ref} {input.single} > {output.remapped_sam} 2>> {log.err};
+        bwa mem -t {threads} -M {input.ref} {input.fq1} {input.fq2} 2>> {log.err} | \
+        awk '$1 !~ /@/' >> {output.remapped_sam}
         """
 
 rule samtools_remap_classified_human:
@@ -148,13 +155,13 @@ rule samtools_remap_classified_human:
     threads: 
         threads["multi"]["samtools"]
     log:
-        "logs/kraken/{sample}_samtools_remap_classified_human.log"
+        err="logs/kraken/{sample}_samtools_remap_classified_human.err"
     benchmark:
         "benchmarks/kraken/{sample}_samtools_remap_classified_human.txt"
     shell:
         """
-        samtools view -Sb {input.sam} > {output.remapped_unsorted};
-        samtools sort -@ {threads} -m {resources.mem_mb} -o {output.remapped_bam} {output.remapped_unsorted}
+        samtools view -Sb {input.sam} > {output.remapped_unsorted} 2> {log.err};
+        samtools sort -@ {threads} -m {resources.mem_mb}M -o {output.remapped_bam} {output.remapped_unsorted} 2>> {log.err}
         """
        
 rule index_reads:
@@ -170,12 +177,12 @@ rule index_reads:
     threads: 
         threads["single"]
     log:
-        "logs/kraken/{sample}_index_reads.log"
+        err="logs/kraken/{sample}_index_reads.err"
     benchmark:
         "benchmarks/kraken/{sample}_index_reads.txt"
     shell:
         """
-        samtools index {input.bam}
+        samtools index {input.bam} 2> {log.err}
         """
 
 rule crop_remapped:
@@ -193,7 +200,8 @@ rule crop_remapped:
     threads: 
         threads["single"]
     log:
-        "logs/kraken/{sample}_crop_remapped.log"
+        out="logs/kraken/{sample}_crop_remapped.out",
+        err="logs/kraken/{sample}_crop_remapped.err"
     benchmark:
         "benchmarks/kraken/{sample}_crop_remapped.txt"    
     shell:
@@ -204,6 +212,7 @@ rule crop_remapped:
         "   -se remapped_single.fastq"
         "   --prefix {WORK_DIR}"
         "   --noSampleInfo"
+        "   > {log.out} 2> {log.err}"
 
 
 rule remapping_samsort_mates:
@@ -219,11 +228,11 @@ rule remapping_samsort_mates:
     threads: 
         threads["multi"]["samtools"]
     log:
-        "logs/kraken/{sample}_remapping_samsort_mates.log"
+        err="logs/kraken/{sample}_remapping_samsort_mates.err"
     benchmark:
         "benchmarks/kraken/{sample}_remapping_samsort_mates.txt"    
     shell:
-        "samtools sort -n -@ {threads} -m {resources.mem_mb} -o {output} {input}"
+        "samtools sort -n -@ {threads} -m {resources.mem_mb}M -o {output} {input} 2> {log.err}"
 
 
 rule merge_set_mate:
@@ -238,7 +247,8 @@ rule merge_set_mate:
     threads: 
         threads["single"]
     log:
-        "logs/kraken/{sample}_merge_set_mate.log"
+        out="logs/kraken/{sample}_merge_set_mate.out",
+        err="logs/kraken/{sample}_merge_set_mate.err"
     benchmark:
         "benchmarks/kraken/{sample}_merge_set_mate.txt" 
     shell:
@@ -246,6 +256,7 @@ rule merge_set_mate:
         "   --prefix {WORK_DIR} "
         "   --sample {wildcards.sample} "
         "   -o remapped_non_ref.bam"
+        "   > {log.out} 2> {log.err}"
 
 
 rule contaminate_removed:
@@ -273,6 +284,7 @@ rule contaminate_removed:
         """
         cat {input.single} {input.u_single} > {output.single_clean};
         cat {input.p1} {input.u_p1} > {output.p1_clean};
-        cat {input.p2} {input.u_p2} > {output.p2_clean}
+        cat {input.p2} {input.u_p2} > {output.p2_clean};
+        echo "Contaminates removed for {wildcards.sample}" >> {log}
         """
 
diff --git a/snakemodules/merge.smk b/snakemodules/merge.smk
index c8a42d6..222b4ee 100644
--- a/snakemodules/merge.smk
+++ b/snakemodules/merge.smk
@@ -25,7 +25,8 @@ rule popins2_merge_contigs:
     params:
         k = config["k_merge"]
     log:
-        "logs/merge/merge_contigs.log"
+        out="logs/merge/merge_contigs.out",
+        err="logs/merge/merge_contigs.err"
     benchmark:
         "benchmarks/merge/merge_contigs.txt"
     shell:
@@ -36,3 +37,4 @@ rule popins2_merge_contigs:
         "   -r {WORK_DIR}"
         "   -p {RESULTS_DIR}/supercontigs"
         "   -di"
+        "   > {log.out} 2> {log.err}"
diff --git a/snakemodules/minia.smk b/snakemodules/minia.smk
index 56c39f7..6350be3 100644
--- a/snakemodules/minia.smk
+++ b/snakemodules/minia.smk
@@ -16,13 +16,14 @@ if config["SICKLE"]=="yes":
             threads: 
                 threads["multi"]["minia"]
             log:
-                "logs/{assemblr}/{sample}_sickle_clean.log"
+                out="logs/{assemblr}/{sample}_sickle_clean.out",
+                err="logs/{assemblr}/{sample}_sickle_clean.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}_sickle_clean.txt"
             shell:
                 "mkdir -p {WORK_DIR}/{wildcards.sample}/assembly/;"  
                 "{GATB} --nb-cores {threads} -1 {input.pair_1} -2 {input.pair_2} -s {input.single}"
-                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding;"
+                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding > {log.out} 2> {log.err};"
                 "cp {WORK_DIR}/{wildcards.sample}/assembly/assembly_final.contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"     
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
 
@@ -43,13 +44,14 @@ if config["SICKLE"]=="yes":
             threads: 
                 threads["multi"]["minia"]
             log:
-                "logs/{assemblr}/{sample}_sickle.log"
+                out="logs/{assemblr}/{sample}_sickle.out",
+                err="logs/{assemblr}/{sample}_sickle.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}_sickle.txt"
             shell:
                 "mkdir -p {WORK_DIR}/{wildcards.sample}/assembly/;"  
                 "{GATB} --nb-cores {threads} -1 {input.pair_1} -2 {input.pair_2} -s {input.single}"
-                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding;"
+                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding > {log.out} 2> {log.err};"
                 "cp {WORK_DIR}/{wildcards.sample}/assembly/assembly_final.contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"     
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
 
@@ -70,13 +72,14 @@ elif config["SICKLE"]=="no":
             threads: 
                 threads["multi"]["minia"]
             log:
-                "logs/{assemblr}/{sample}_clean.log"
+                out="logs/{assemblr}/{sample}_clean.out",
+                err="logs/{assemblr}/{sample}_clean.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}_clean.txt"
             shell:
                 "mkdir -p {WORK_DIR}/{wildcards.sample}/assembly/;"  
                 "{GATB} --nb-cores {threads} -1 {input.pair_1} -2 {input.pair_2} -s {input.single}"
-                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding;"
+                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding > {log.out} 2> {log.err};"
                 "cp {WORK_DIR}/{wildcards.sample}/assembly/assembly_final.contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"     
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
 
@@ -97,12 +100,13 @@ elif config["SICKLE"]=="no":
             threads: 
                 threads["multi"]["minia"]
             log:
-                "logs/{assemblr}/{sample}.log"
+                out="logs/{assemblr}/{sample}.out",
+                err="logs/{assemblr}/{sample}.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}.txt"
             shell:
                 "mkdir -p {WORK_DIR}/{wildcards.sample}/assembly/;"  
                 "{GATB} --nb-cores {threads} -1 {input.pair_1} -2 {input.pair_2} -s {input.single}"
-                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding;"
+                " -o {WORK_DIR}/{wildcards.sample}/assembly/assembly --no-scaffolding > {log.out} 2> {log.err};"
                 "cp {WORK_DIR}/{wildcards.sample}/assembly/assembly_final.contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"     
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
diff --git a/snakemodules/position.smk b/snakemodules/position.smk
index 25d8722..e593ca5 100644
--- a/snakemodules/position.smk
+++ b/snakemodules/position.smk
@@ -15,7 +15,8 @@ if config["remove_contamination"] == 'yes':
         threads: 
             threads["single"]
         log:
-            "logs/position/{sample}_remap_find_locations.log"
+            out="logs/position/{sample}_remap_find_locations.out",
+            err="logs/position/{sample}_remap_find_locations.err"
         benchmark:
             "benchmarks/position/{sample}_remap_find_locations.txt"
         shell:
@@ -23,6 +24,7 @@ if config["remove_contamination"] == 'yes':
             "   -n remapped_non_ref.bam "
             "   --prefix {WORK_DIR} "
             "   --reference {REFERENCE} "
+            "   > {log.out} 2> {log.err}"
 
 
 elif config["remove_contamination"] == 'no':
@@ -39,13 +41,15 @@ elif config["remove_contamination"] == 'no':
         threads: 
             threads["single"]
         log:
-            "logs/position/{sample}_find_locations.log"
+            out="logs/position/{sample}_find_locations.out",
+            err="logs/position/{sample}_find_locations.err"
         benchmark:
             "benchmarks/position/{sample}_find_locations.txt"
         shell:
             "{POPINS2_BIN} find-locations {wildcards.sample}"
             "   --prefix {WORK_DIR} "
-            "   --reference {REFERENCE} "   
+            "   --reference {REFERENCE} "
+            "   > {log.out} 2> {log.err}"   
 
 ################################################################################
 
@@ -61,13 +65,15 @@ rule popins2_merge_locations:
     threads: 
         threads["single"]
     log:
-        "logs/position/merge_locations.log"
+        out="logs/position/merge_locations.out",
+        err="logs/position/merge_locations.err"
     benchmark:
         "benchmarks/position/merge_locations.txt"
     shell:
         "{POPINS2_BIN} merge-locations "
         "   --prefix {WORK_DIR} "
         "   --locations {RESULTS_DIR}/locations.txt "
+        "   > {log.out} 2> {log.err}"
 
 
 rule popins2_place_refalign:
@@ -87,7 +93,8 @@ rule popins2_place_refalign:
     threads: 
         threads["single"]
     log:
-        "logs/position/place_refalign.log"
+        out="logs/position/place_refalign.out",
+        err="logs/position/place_refalign.err"
     benchmark:
         "benchmarks/position/place_refalign.txt"
     shell:
@@ -99,6 +106,7 @@ rule popins2_place_refalign:
         "   --contigs {rules.popins2_merge_contigs.output.supercontigs} "
         "   --reference {REFERENCE} "
         "   --readLength {params.readlen} "
+        "   > {log.out} 2> {log.err}"
 
 
 rule popins2_place_splitalign:
@@ -114,7 +122,8 @@ rule popins2_place_splitalign:
     threads: 
         threads["single"]
     log:
-        "logs/position/{sample}_place_splitalign.log"
+        out="logs/position/{sample}_place_splitalign.out",
+        err="logs/position/{sample}_place_splitalign.err"
     benchmark:
         "benchmarks/position/{sample}_place_splitalign.txt"
     shell:
@@ -124,6 +133,7 @@ rule popins2_place_splitalign:
         "   --reference {REFERENCE} "
         "   --readLength {params.readlen} "
         "   {wildcards.sample} "
+        "   > {log.out} 2> {log.err}"
 
 
 rule popins2_place_finish:
@@ -137,11 +147,13 @@ rule popins2_place_finish:
     threads: 
         threads["single"]
     log:
-        "logs/position/place_finish.log"
+        out="logs/position/place_finish.out",
+        err="logs/position/place_finish.err"
     benchmark:
         "benchmarks/position/place_finish.txt"
     shell:
         "{POPINS2_BIN} place-finish "
         "   --prefix {WORK_DIR} "
         "   --insertions {rules.popins2_place_refalign.output.vcf}"
-        "   --reference {REFERENCE} "
\ No newline at end of file
+        "   --reference {REFERENCE} "
+        "   > {log.out} 2> {log.err}"
\ No newline at end of file
diff --git a/snakemodules/velvet.smk b/snakemodules/velvet.smk
index 725ec8a..c6e641c 100644
--- a/snakemodules/velvet.smk
+++ b/snakemodules/velvet.smk
@@ -17,13 +17,14 @@ if config["SICKLE"]=="yes":
             threads: 
                 threads["single"]
             log:
-                "logs/{assemblr}/{sample}_sickle_clean.log"
+                out="logs/{assemblr}/{sample}_sickle_clean.out",
+                err="logs/{assemblr}/{sample}_sickle_clean.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}_sickle_clean.txt"
             shell:
                 "mkdir {WORK_DIR}/{wildcards.sample}/assembly/;"
-                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2};"
-                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no;"    
+                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2} > {log.out} 2> {log.err};"
+                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no >> {log.out} 2>> {log.err};"    
                 "mv {WORK_DIR}/{wildcards.sample}/assembly/contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
 
@@ -46,13 +47,14 @@ if config["SICKLE"]=="yes":
             threads: 
                 threads["single"]
             log:
-                "logs/{assemblr}/{sample}_sickle.log"
+                out="logs/{assemblr}/{sample}_sickle.out",
+                err="logs/{assemblr}/{sample}_sickle.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}_sickle.txt"
             shell:
                 "mkdir {WORK_DIR}/{wildcards.sample}/assembly/;"
-                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2};"
-                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no;"    
+                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2} > {log.out} 2> {log.err};"
+                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no >> {log.out} 2>> {log.err};"    
                 "mv {WORK_DIR}/{wildcards.sample}/assembly/contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
 
@@ -75,13 +77,14 @@ elif config["SICKLE"]=="no":
             threads: 
                 threads["single"]
             log:
-                "logs/{assemblr}/{sample}_clean.log"
+                out="logs/{assemblr}/{sample}_clean.out",
+                err="logs/{assemblr}/{sample}_clean.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}_clean.txt"
             shell:
                 "mkdir {WORK_DIR}/{wildcards.sample}/assembly/;"
-                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2};"
-                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no;"    
+                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2} > {log.out} 2> {log.err};"
+                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no >> {log.out} 2>> {log.err};"    
                 "mv {WORK_DIR}/{wildcards.sample}/assembly/contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
 
@@ -104,12 +107,13 @@ elif config["SICKLE"]=="no":
             threads: 
                 threads["single"]
             log:
-                "logs/{assemblr}/{sample}.log"
+                out="logs/{assemblr}/{sample}.out",
+                err="logs/{assemblr}/{sample}.err"
             benchmark:
                 "benchmarks/{assemblr}/{sample}.txt"
             shell:
                 "mkdir {WORK_DIR}/{wildcards.sample}/assembly/;"
-                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2};"
-                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no;"    
+                "{VELVET}/velveth {WORK_DIR}/{wildcards.sample}/assembly/ {params.kmerlength} -short -fastq {input.single} -shortPaired -fastq -separate {input.pair_1} {input.pair_2} > {log.out} 2> {log.err};"
+                "{VELVET}/velvetg {WORK_DIR}/{wildcards.sample}/assembly/ -exp_cov auto -cov_cutoff 2 -max_coverage 100 -scaffolding no >> {log.out} 2>> {log.err};"    
                 "mv {WORK_DIR}/{wildcards.sample}/assembly/contigs.fa {WORK_DIR}/{wildcards.sample}/{wildcards.assemblr}.contigs.fa;"
                 "rm -r {WORK_DIR}/{wildcards.sample}/assembly/"
\ No newline at end of file
-- 
GitLab