From ea1eb2ef6f917605667a24dde5e08d38cc2bb0e2 Mon Sep 17 00:00:00 2001
From: Laurent Modolo <laurent.modolo@ens-lyon.fr>
Date: Tue, 23 Aug 2022 10:04:18 +0200
Subject: [PATCH] add trinity 2.13.2

---
 src/.docker_modules/trinity/2.13.2/Dockerfile |   3 +
 .../trinity/2.13.2/docker_init.sh             |   5 +
 src/nf_modules/trinity/main.nf                | 115 ++++++++++++++++++
 3 files changed, 123 insertions(+)
 create mode 100644 src/.docker_modules/trinity/2.13.2/Dockerfile
 create mode 100755 src/.docker_modules/trinity/2.13.2/docker_init.sh
 create mode 100644 src/nf_modules/trinity/main.nf

diff --git a/src/.docker_modules/trinity/2.13.2/Dockerfile b/src/.docker_modules/trinity/2.13.2/Dockerfile
new file mode 100644
index 00000000..f8fdc554
--- /dev/null
+++ b/src/.docker_modules/trinity/2.13.2/Dockerfile
@@ -0,0 +1,3 @@
+FROM quay.io/biocontainers/trinity:2.13.2--ha140323_0
+
+ENV TRINITY_VERSION=2.13.2--ha140323_0
diff --git a/src/.docker_modules/trinity/2.13.2/docker_init.sh b/src/.docker_modules/trinity/2.13.2/docker_init.sh
new file mode 100755
index 00000000..ff9da019
--- /dev/null
+++ b/src/.docker_modules/trinity/2.13.2/docker_init.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+docker pull lbmc/trinity:2.13.2
+docker build src/.docker_modules/trinity/2.13.2 -t 'lbmc/trinity:2.13.2'
+docker push lbmc/trinity:2.13.2
+docker buildx build --platform linux/amd64,linux/arm64 -t "lbmc/trinity:2.13.2" --push src/.docker_modules/trinity/2.13.2
diff --git a/src/nf_modules/trinity/main.nf b/src/nf_modules/trinity/main.nf
new file mode 100644
index 00000000..e10a79be
--- /dev/null
+++ b/src/nf_modules/trinity/main.nf
@@ -0,0 +1,115 @@
+version = "2.13.2"
+container_url = "lbmc/trinity:${version}"
+
+params.sample = 3
+params.min_glue = 1
+params.min_contig_length = 200
+params.assembly_out = ""
+
+
+workflow assembly {
+  take:
+    fastq
+  main:
+    complete_assembly(fastq)
+    super_transcript(complete_assembly.out.fasta)
+
+  emit:
+    fasta = complete_assembly.out.fasta
+    super_transcript = super_transcript.out.fasta
+}
+
+process complete_assembly {
+  container = "${container_url}"
+  label "big_mem_multi_cpus"
+  tag "$file_id"
+  if (params.assembly_out != "") {
+    publishDir "results/${params.assembly_out}", mode: 'copy'
+  }
+
+  input:
+    tuple val(file_id), path(fastq)
+
+  output:
+    tuple val(file_id), path("trinity_output_${file_prefix}/"), emit: folder
+    tuple val(file_id), path("trinity_output_${file_prefix}.Trinity.fasta"), emit: fasta
+    tuple val(file_id), path("trinity_output_${file_prefix}.Trinity.fasta.gene_trans_map"), emit: gene_map 
+    tuple val(file_id), path("trinity_output_${file_prefix}/salmon_outdir/quant.sf"), emit: quant
+
+  script:
+
+  switch(file_id) {
+    case {it instanceof List}:
+      file_prefix = file_id[0]
+    break;
+    case {it instanceof Map}:
+      file_prefix = file_id.values()[0]
+    break;
+    default:
+      file_prefix = file_id
+    break;
+  };
+  def memory = "${task.memory}" - ~/\s*GB/
+
+  if (fastq.size() == 2)
+"""
+  mkdir trinity_output_${file_prefix}
+  Trinity \
+    --seqType fq \
+    --max_memory ${memory}G \
+    --left ${fastq[0]} \
+    --right ${fastq[1]} \
+    --CPU ${task.cpus} \
+    --min_glue ${params.min_glue} \
+    --min_contig_length ${params.min_contig_length} \
+    --output trinity_output_${file_prefix}
+"""
+  else
+"""
+  mkdir trinity_output_${file_prefix}
+  Trinity \
+    --seqType fq \
+    --max_memory ${memory}G \
+    --single ${fastq} \
+    --CPU ${task.cpus} \
+    --min_glue ${params.min_glue} \
+    --min_contig_length ${params.min_contig_length} \
+    --output trinity_output_${file_prefix}
+"""
+}
+
+
+process super_transcript {
+  container = "${container_url}"
+  label "big_mem_mono_cpus"
+  tag "$file_id"
+  if (params.assembly_out != "") {
+    publishDir "results/${params.assembly_out}", mode: 'copy'
+  }
+
+  input:
+    tuple val(file_id), path(fasta)
+
+  output:
+    tuple val(file_id), path("trinity_genes.fasta"), path("trinity_genes.gtf"), emit: fasta
+
+  script:
+
+  switch(file_id) {
+    case {it instanceof List}:
+      file_prefix = file_id[0]
+    break;
+    case {it instanceof Map}:
+      file_prefix = file_id.values()[0]
+    break;
+    default:
+      file_prefix = file_id
+    break;
+  };
+  def memory = "${task.memory}" - ~/\s*GB/
+
+"""
+Trinity_gene_splice_modeler.py \
+  --trinity_fasta ${fasta}
+"""
+}
-- 
GitLab