From 021311d951f954fc70bea19d48eb0cfb96445716 Mon Sep 17 00:00:00 2001
From: kdc715 <kedic@LIT-PF3VB193.localdomain>
Date: Tue, 21 Jan 2025 14:47:00 +0100
Subject: [PATCH] fix memory allocation for samtool multithreading rules

---
 snakemodules/contigmap.smk     | 6 ++++--
 snakemodules/crop_remapped.smk | 6 ++++--
 snakemodules/crop_unmapped.smk | 6 ++++--
 snakemodules/kraken.smk        | 6 ++++--
 4 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/snakemodules/contigmap.smk b/snakemodules/contigmap.smk
index dc3d8e5..9b88b06 100644
--- a/snakemodules/contigmap.smk
+++ b/snakemodules/contigmap.smk
@@ -96,7 +96,8 @@ rule name_sort_unsorted:
     conda:
         os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
     resources:
-        mem_mb = resources["samtools"]["mem"],
+        # mem_mb = resources["samtools"]["mem"],
+        mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
         runtime = resources["samtools"]["time"]
     threads: 
         threads["multi"]["samtools"]
@@ -170,7 +171,8 @@ rule coordinate_sort_unsorted:
     conda:
         os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
     resources:
-        mem_mb = resources["samtools_25G"]["mem"],
+        # mem_mb = resources["samtools_25G"]["mem"],
+        mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
         runtime = resources["samtools_25G"]["time"]
     threads: 
         threads["multi"]["samtools"]
diff --git a/snakemodules/crop_remapped.smk b/snakemodules/crop_remapped.smk
index f05db9c..2a6864b 100644
--- a/snakemodules/crop_remapped.smk
+++ b/snakemodules/crop_remapped.smk
@@ -60,7 +60,8 @@ if config["SICKLE"]=="no":
         conda:
             os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
         resources:
-            mem_mb = resources["samtools"]["mem"],
+            # mem_mb = resources["samtools"]["mem"],
+            mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
             runtime = resources["samtools"]["time"]
         threads: 
             threads["multi"]["samtools"]
@@ -112,7 +113,8 @@ elif config["SICKLE"]=="yes":
         conda:
             os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
         resources:
-            mem_mb = resources["samtools"]["mem"],
+            # mem_mb = resources["samtools"]["mem"],
+            mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
             runtime = resources["samtools"]["time"]
         threads: 
             threads["multi"]["samtools"]
diff --git a/snakemodules/crop_unmapped.smk b/snakemodules/crop_unmapped.smk
index 94e79c8..9b04065 100644
--- a/snakemodules/crop_unmapped.smk
+++ b/snakemodules/crop_unmapped.smk
@@ -58,7 +58,8 @@ if config["SICKLE"]=="no":
         conda:
             os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
         resources:
-            mem_mb = resources["samtools"]["mem"],
+            # mem_mb = resources["samtools"]["mem"],
+            mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
             runtime = resources["samtools"]["time"]
         threads: 
             threads["multi"]["samtools"]
@@ -108,7 +109,8 @@ elif config["SICKLE"]=="yes":
         output:
             WORK_DIR + "/{sample}/non_ref.bam"
         resources:
-            mem_mb = resources["samtools"]["mem"],
+            # mem_mb = resources["samtools"]["mem"],
+            mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
             runtime = resources["samtools"]["time"]
         threads: 
             threads["multi"]["samtools"]
diff --git a/snakemodules/kraken.smk b/snakemodules/kraken.smk
index f7814e4..220eb5e 100644
--- a/snakemodules/kraken.smk
+++ b/snakemodules/kraken.smk
@@ -150,7 +150,8 @@ rule samtools_remap_classified_human:
     conda:
         os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
     resources:
-        mem_mb = resources["samtools"]["mem"],
+        # mem_mb = resources["samtools"]["mem"],
+        mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
         runtime = resources["samtools"]["time"]
     threads: 
         threads["multi"]["samtools"]
@@ -223,7 +224,8 @@ rule remapping_samsort_mates:
     conda:
         os.path.join(WORKFLOW_PATH,"snakemodules/envs/samtools.yml")
     resources:
-        mem_mb = resources["samtools"]["mem"],
+        # mem_mb = resources["samtools"]["mem"],
+        mem_mb = lambda wildcards, input, threads, attempt: resources["samtools"]["mem"] * threads,
         runtime = resources["samtools"]["time"]
     threads: 
         threads["multi"]["samtools"]
-- 
GitLab