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