From e77f630e361b16be297d44f8c3b891533d094a00 Mon Sep 17 00:00:00 2001
From: Laurent Modolo <laurent.modolo@ens-lyon.fr>
Date: Mon, 4 Jun 2018 14:15:01 +0200
Subject: [PATCH] SAMtools: add nf and test scripts

---
 src/nf_modules/SAMtools/samtools.config      |  34 ++++++
 src/nf_modules/SAMtools/samtools.nf          | 117 +++++++++++++++++++
 src/nf_modules/SAMtools/tests/filter_bams.nf |  32 +++++
 src/nf_modules/SAMtools/tests/index_bams.nf  |  21 ++++
 src/nf_modules/SAMtools/tests/sort_bams.nf   |  25 ++++
 src/nf_modules/SAMtools/tests/split_bams.nf  |  26 +++++
 src/nf_modules/SAMtools/tests/tests.sh       |  20 ++++
 7 files changed, 275 insertions(+)
 create mode 100644 src/nf_modules/SAMtools/samtools.config
 create mode 100644 src/nf_modules/SAMtools/samtools.nf
 create mode 100644 src/nf_modules/SAMtools/tests/filter_bams.nf
 create mode 100644 src/nf_modules/SAMtools/tests/index_bams.nf
 create mode 100644 src/nf_modules/SAMtools/tests/sort_bams.nf
 create mode 100644 src/nf_modules/SAMtools/tests/split_bams.nf
 create mode 100644 src/nf_modules/SAMtools/tests/tests.sh

diff --git a/src/nf_modules/SAMtools/samtools.config b/src/nf_modules/SAMtools/samtools.config
new file mode 100644
index 0000000..0a4bdde
--- /dev/null
+++ b/src/nf_modules/SAMtools/samtools.config
@@ -0,0 +1,34 @@
+profiles {
+  docker {
+    process {
+      $sort_bam {
+        container = "SAMtools:1.7"
+      }
+      $index_bam {
+        container = "SAMtools:1.7"
+      }
+      $split_bam {
+        container = "SAMtools:1.7"
+      }
+      $filter_bam {
+        container = "SAMtools:1.7"
+      }
+    }
+  }
+  sge {
+    process{
+      $trimming {
+        beforeScript = "module purge; module load SAMtools/1.7"
+      }
+      $index_bam {
+        beforeScript = "module purge; module load SAMtools/1.7"
+      }
+      $split_bam {
+        beforeScript = "module purge; module load SAMtools/1.7"
+      }
+      $filter_bam {
+        beforeScript = "module purge; module load SAMtools/1.7"
+      }
+    }
+  }
+}
diff --git a/src/nf_modules/SAMtools/samtools.nf b/src/nf_modules/SAMtools/samtools.nf
new file mode 100644
index 0000000..f178bb0
--- /dev/null
+++ b/src/nf_modules/SAMtools/samtools.nf
@@ -0,0 +1,117 @@
+/*
+* SAMtools :
+* Imputs : bam files
+* Output : bam files
+*/
+
+/*                      bams sorting                                     */
+params.bam = "$baseDir/data/bam/*.bam"
+
+log.info "bams files : ${params.bam}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+
+process sort_bam {
+  tag "$bam.baseName"
+  cpus 4
+
+  input:
+    file bam from bam_files
+
+  output:
+    file "*_sorted.bam" into sorted_bam_files
+
+  script:
+"""
+samtools sort -@ ${task.cpus} -O BAM -o ${bam.baseName}_sorted.bam ${bam}
+"""
+}
+
+/*                      bams indexing                                     */
+
+params.bam = "$baseDir/data/bam/*.bam"
+
+log.info "bams files : ${params.bam}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+
+process index_bam {
+  tag "$bam.baseName"
+  input:
+    file bam from bam_files
+  output:
+    file "*bam*" into indexed_bam_file
+  script:
+"""
+samtools index ${bam}
+"""
+}
+
+
+/*                      bams spliting                                     */
+params.bam = "$baseDir/data/bam/*.bam"
+
+log.info "bams files : ${params.bam}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+
+process split_bam {
+  tag "$bam.baseName"
+  cpus 2
+
+  input:
+    file bam from bam_files
+
+  output:
+    file "*_forward.bam*" into forward_bam_files
+    file "*_reverse.bam*" into reverse_bam_files
+  script:
+"""
+samtools view -hb -F 0x10 ${bam} > ${bam}_forward.bam &
+samtools view -hb -f 0x10 ${bam} > ${bam}_reverse.bam
+"""
+}
+
+
+/*                      bams filtering                                     */
+params.bam = "$baseDir/data/bam/*.bam"
+params.bed = "$baseDir/data/bam/*.bed"
+
+log.info "bams files : ${params.bam}"
+log.info "bed file : ${params.bed}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+Channel
+  .fromPath( params.bed )
+  .ifEmpty { error "Cannot find any bed file matching: ${params.bed}" }
+  .set { bed_files }
+
+process filter_bam {
+  tag "$bam.baseName"
+  cpus 4
+
+  input:
+    file bam from bam_files
+    file bed from bed_files
+
+  output:
+    file "*_filtered.bam*" into filtered_bam_files
+  script:
+"""
+samtools view -@ ${task.cpus} -hb ${bam} -L ${bed} > ${bam.baseName}_filtered.bam
+"""
+}
+
+
diff --git a/src/nf_modules/SAMtools/tests/filter_bams.nf b/src/nf_modules/SAMtools/tests/filter_bams.nf
new file mode 100644
index 0000000..4902136
--- /dev/null
+++ b/src/nf_modules/SAMtools/tests/filter_bams.nf
@@ -0,0 +1,32 @@
+params.bam = "$baseDir/data/bam/*.bam"
+params.bed = "$baseDir/data/bam/*.bed"
+
+log.info "bams files : ${params.bam}"
+log.info "bed file : ${params.bed}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+Channel
+  .fromPath( params.bed )
+  .ifEmpty { error "Cannot find any bed file matching: ${params.bed}" }
+  .set { bed_files }
+
+process filter_bam {
+  tag "$bam.baseName"
+  cpus 4
+
+  input:
+    file bam from bam_files
+    file bed from bed_files
+
+  output:
+    file "*_filtered.bam*" into filtered_bam_files
+  script:
+"""
+samtools view -@ ${task.cpus} -hb ${bam} -L ${bed} > ${bam.baseName}_filtered.bam
+"""
+}
+
+
diff --git a/src/nf_modules/SAMtools/tests/index_bams.nf b/src/nf_modules/SAMtools/tests/index_bams.nf
new file mode 100644
index 0000000..bea5441
--- /dev/null
+++ b/src/nf_modules/SAMtools/tests/index_bams.nf
@@ -0,0 +1,21 @@
+params.bam = "$baseDir/data/bam/*.bam"
+
+log.info "bams files : ${params.bam}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+
+process index_bam {
+  tag "$bam.baseName"
+  input:
+    file bam from bam_files
+  output:
+    file "*bam*" into indexed_bam_file
+  script:
+"""
+samtools index ${bam}
+"""
+}
+
diff --git a/src/nf_modules/SAMtools/tests/sort_bams.nf b/src/nf_modules/SAMtools/tests/sort_bams.nf
new file mode 100644
index 0000000..79a7590
--- /dev/null
+++ b/src/nf_modules/SAMtools/tests/sort_bams.nf
@@ -0,0 +1,25 @@
+params.bam = "$baseDir/data/bam/*.bam"
+
+log.info "bams files : ${params.bam}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+
+process sort_bam {
+  tag "$bams.baseName"
+  cpus 4
+
+  input:
+    file bam from bam_files
+
+  output:
+    file "*_sorted.bam" into sorted_bam_files
+
+  script:
+"""
+samtools sort -@ ${task.cpus} -O BAM -o ${bam.baseName}_sorted.bam ${bam}
+"""
+}
+
diff --git a/src/nf_modules/SAMtools/tests/split_bams.nf b/src/nf_modules/SAMtools/tests/split_bams.nf
new file mode 100644
index 0000000..edc2086
--- /dev/null
+++ b/src/nf_modules/SAMtools/tests/split_bams.nf
@@ -0,0 +1,26 @@
+params.bam = "$baseDir/data/bam/*.bam"
+
+log.info "bams files : ${params.bam}"
+
+Channel
+  .fromPath( params.bam )
+  .ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
+  .set { bam_files }
+
+process split_bam {
+  tag "$bam.baseName"
+  cpus 2
+
+  input:
+    file bam from bam_files
+
+  output:
+    file "*_forward.bam*" into forward_bam_files
+    file "*_reverse.bam*" into reverse_bam_files
+  script:
+"""
+samtools view -hb -F 0x10 ${bam} > ${bam}_forward.bam &
+samtools view -hb -f 0x10 ${bam} > ${bam}_reverse.bam
+"""
+}
+
diff --git a/src/nf_modules/SAMtools/tests/tests.sh b/src/nf_modules/SAMtools/tests/tests.sh
new file mode 100644
index 0000000..e3e8099
--- /dev/null
+++ b/src/nf_modules/SAMtools/tests/tests.sh
@@ -0,0 +1,20 @@
+nextflow src/nf_modules/SAMtools/tests/sort_bams.nf \
+  -c src/nf_modules/SAMtools/samtools.config \
+  -profile docker \
+  --bam "data/tiny_dataset/map/tiny_v2.bam"
+
+nextflow src/nf_modules/SAMtools/tests/index_bams.nf \
+  -c src/nf_modules/SAMtools/samtools.config \
+  -profile docker \
+  --bam "data/tiny_dataset/map/tiny_v2.sort.bam"
+
+nextflow src/nf_modules/SAMtools/tests/split_bams.nf \
+  -c src/nf_modules/SAMtools/samtools.config \
+  -profile docker \
+  --bam "data/tiny_dataset/map/tiny_v2.bam"
+
+nextflow src/nf_modules/SAMtools/tests/filter_bams.nf \
+  -c src/nf_modules/SAMtools/samtools.config \
+  -profile docker \
+  --bam "data/tiny_dataset/map/tiny_v2.bam" \
+  --bed "data/tiny_dataset/OLD/2genes.bed"
-- 
GitLab