From 355fc1feca9852de072700ab74a0df0e39265433 Mon Sep 17 00:00:00 2001
From: Iris Mestres <iris.mestrespascual@unibas.ch>
Date: Mon, 20 Feb 2023 12:26:56 +0100
Subject: [PATCH] Add rule to sort isomiRs annotation file

---
 workflow/rules/quantify.smk | 192 ++++++++++++++++++++++++------------
 1 file changed, 129 insertions(+), 63 deletions(-)

diff --git a/workflow/rules/quantify.smk b/workflow/rules/quantify.smk
index 90fd572..292ffa2 100644
--- a/workflow/rules/quantify.smk
+++ b/workflow/rules/quantify.smk
@@ -8,7 +8,6 @@
 # USAGE (from the file's directory):
 #
 # snakemake \
-#    --snakefile="quanitfy.smk" \
 #    --cores 4 \
 #    --use-singularity \
 #    --singularity-args "--bind $PWD/../" \ 
@@ -16,9 +15,6 @@
 #    --rerun-incomplete \
 #    --verbose
 #
-# IMPORTANT when executing this file alone:
-## * You must modify the config.yaml.
-## * Uncomment the configfile line.
 ################################################################################
 
 import os
@@ -133,6 +129,72 @@ rule sort_alignments:
         ) &> {log}"
 
 
+###############################################################################
+### Sort isomiRs
+###############################################################################
+
+
+rule sort_isomirs:
+    input:
+        isomirs=config["isomirs_anno"],
+    output:
+        isomir=os.path.join(
+            config["output_dir"], "sorted_isomirs.bed"
+        ),
+    params:
+        cluster_log=os.path.join(
+            config["cluster_log"], "sortisomirs.log"
+        ),
+    log:
+        os.path.join(config["local_log"], "sortisomirs.log"),
+    resources:
+        mem=4,
+        threads=8,
+    singularity:
+        "docker://zavolab/ubuntu:18.04"
+    shell:
+        "(sort \
+        -k1,1 \
+        -k2,2n \
+        {input.isomirs} \
+        > {output.isomir} \
+        ) &> {log}"
+
+###############################################################################
+### pre miRNAs intersection
+###############################################################################
+
+
+rule intersect_pre_mirna:
+    input:
+        alignment=os.path.join(
+            config["output_dir"], "{sample}", "sorted.alignments.bed12"
+        ),
+        mirna=config["pre_mirnas_anno"],
+    output:
+        intersect=os.path.join(
+            config["output_dir"], "{sample}", "intersect_pre_mirna.bed"
+        ),
+    params:
+        cluster_log=os.path.join(
+            config["cluster_log"], "intersection_pre_mirna_{sample}.log"
+        ),
+    log:
+        os.path.join(config["local_log"], "intersection_pre_mirna_{sample}.log"),
+    singularity:
+        "docker://zavolab/bedtools:2.27.0"
+    shell:
+        "(bedtools intersect \
+        -wao \
+        -s \
+        -F 1 \
+        -sorted \
+        -b {input.alignment} \
+        -a {input.mirna} \
+        > {output.intersect} \
+        ) &> {log}"
+
+
 ###############################################################################
 ### miRNAs intersection
 ###############################################################################
@@ -161,6 +223,7 @@ rule intersect_mirna:
         -wao \
         -s \
         -F 1 \
+        -f 1 \
         -sorted \
         -b {input.alignment} \
         -a {input.mirna} \
@@ -173,34 +236,37 @@ rule intersect_mirna:
 ###############################################################################
 
 
-# rule intersect_isomirs:
-#     input:
-#         alignment=os.path.join(
-#             config["output_dir"], "{sample}", "sorted.alignments.bed12"
-#         ),
-#         isomirs=config["isomirs_anno"],
-#     output:
-#         intersect=os.path.join(
-#             config["output_dir"], "{sample}", "intersect_isomirs.bed"
-#         ),
-#     params:
-#         cluster_log=os.path.join(
-#             config["cluster_log"], "intersection_isomirs_{sample}.log"
-#         ),
-#     log:
-#         os.path.join(config["local_log"], "intersection_isomirs_{sample}.log"),
-#     singularity:
-#         "docker://zavolab/bedtools:2.27.0"
-#     shell:
-#         "(bedtools intersect \
-#         -wao \
-#         -s \
-#         -F 1 \
-#         -sorted \
-#         -b {input.alignment} \
-#         -a {input.isomirs} \
-#         > {output.intersect} \
-#         ) &> {log}"
+rule intersect_isomirs:
+    input:
+        alignment=os.path.join(
+            config["output_dir"], "{sample}", "sorted.alignments.bed12"
+        ),
+        isomirs=os.path.join(
+            config["output_dir"], "sorted_isomirs.bed"
+         ),
+    output:
+        intersect=os.path.join(
+            config["output_dir"], "{sample}", "intersect_isomirs.bed"
+        ),
+    params:
+        cluster_log=os.path.join(
+            config["cluster_log"], "intersection_isomirs_{sample}.log"
+        ),
+    log:
+        os.path.join(config["local_log"], "intersection_isomirs_{sample}.log"),
+    singularity:
+        "docker://zavolab/bedtools:2.27.0"
+    shell:
+        "(bedtools intersect \
+        -wao \
+        -s \
+        -F 1 \
+        -f 1 \
+        -sorted \
+        -b {input.alignment} \
+        -a {input.isomirs} \
+        > {output.intersect} \
+        ) &> {log}"
 
 
 ###############################################################################
@@ -216,7 +282,7 @@ rule quant_mirna:
         script=os.path.join(config["scripts_dir"], "mirna_quantification.py"),
     output:
         table=os.path.join(
-            config["output_dir"], "TABLES", "miRNA_counts_{sample}"
+        config["output_dir"], "TABLES", "miRNA_counts_{sample}"
         ),
     params:
         cluster_log=os.path.join(
@@ -246,7 +312,7 @@ rule quant_mirna:
 rule quant_mirna_pri:
     input:
         intersect=os.path.join(
-            config["output_dir"], "{sample}", "intersect_mirna.bed"
+            config["output_dir"], "{sample}", "intersect_pre_mirna.bed"
         ),
         script=os.path.join(config["scripts_dir"], "mirna_quantification.py"),
     output:
@@ -286,34 +352,34 @@ rule quant_mirna_pri:
 ###############################################################################
 
 
-# rule quant_isomirs:
-#     input:
-#         intersect=os.path.join(
-#             config["output_dir"], "{sample}", "intersect_isomirs.bed"
-#         ),
-#         script=os.path.join(config["scripts_dir"], "mirna_quantification.py"),
-#     output:
-#         table=os.path.join(
-#             config["output_dir"], "TABLES", "isomirs_counts_{sample}"
-#         ),
-#     params:
-#         cluster_log=os.path.join(
-#             config["cluster_log"], "quant_isomirs_{sample}.log"
-#         ),
-#         prefix=os.path.join(
-#             config["output_dir"], "TABLES", "isomirs_counts_{sample}"
-#         ),
-#     log:
-#         os.path.join(config["local_log"], "quant_isomirs_{sample}.log"),
-#     singularity:
-#         "docker://zavolab/python:3.6.5"
-#     shell:
-#         "(python \
-#         {input.script} \
-#         -i {input.intersect} \
-#         --uniq=miRNA \
-#         -p={params.prefix} \
-#         ) &> {log}"
+rule quant_isomirs:
+     input:
+         intersect=os.path.join(
+             config["output_dir"], "{sample}", "intersect_isomirs.bed"
+         ),
+         script=os.path.join(config["scripts_dir"], "mirna_quantification.py"),
+     output:
+         table=os.path.join(
+             config["output_dir"], "TABLES", "isomirs_counts_{sample}"
+         ),
+     params:
+         cluster_log=os.path.join(
+             config["cluster_log"], "quant_isomirs_{sample}.log"
+         ),
+         prefix=os.path.join(
+             config["output_dir"], "TABLES", "isomirs_counts_{sample}"
+         ),
+     log:
+         os.path.join(config["local_log"], "quant_isomirs_{sample}.log"),
+     singularity:
+         "docker://zavolab/python:3.6.5"
+     shell:
+         "(python \
+         {input.script} \
+         -i {input.intersect} \
+         --uniq=miRNA \
+         -p={params.prefix} \
+         ) &> {log}"
 
 
 ###############################################################################
@@ -350,4 +416,4 @@ rule merge_tables:
         --output_file {output.table} \
         --prefix {params.prefix} \
         --verbose \
-        ) &> {log}"
\ No newline at end of file
+        ) &> {log}"
-- 
GitLab