From 30151f79f9923088c993548b73bd0a3d31fbb9db Mon Sep 17 00:00:00 2001
From: khalid <khalid.belkhir@umontpellier.fr>
Date: Wed, 1 Dec 2021 14:38:30 +0100
Subject: [PATCH] Add Accel-Align mapper

---
 tools/accel_align/accel_align.rule.snakefile |  63 ++++++++
 tools/accel_align/accel_align.yaml           | 144 +++++++++++++++++++
 2 files changed, 207 insertions(+)
 create mode 100755 tools/accel_align/accel_align.rule.snakefile
 create mode 100755 tools/accel_align/accel_align.yaml

diff --git a/tools/accel_align/accel_align.rule.snakefile b/tools/accel_align/accel_align.rule.snakefile
new file mode 100755
index 00000000..aec3ef40
--- /dev/null
+++ b/tools/accel_align/accel_align.rule.snakefile
@@ -0,0 +1,63 @@
+if config["SeOrPe"] == "PE":
+
+    rule <step_name>__accel_align_PE:
+        input:
+            **<step_name>__accel_align_PE_inputs()
+        output:
+            bam = config["results_dir"]+"/"+config["<step_name>__accel_align_PE_output_dir"]+"/{sample}.bam"
+        log:
+            config["results_dir"]+"/logs/" + config["<step_name>__accel_align_PE_output_dir"] + "/{sample}_accel_align_log.txt"
+        threads:
+            config["<step_name>__accel_align_threads"]
+        params:
+            command = config["<step_name>__accel_align_PE_command"],
+            #indexPrefix =  config["<step_name>__accel_align_index_output_dir"]+"/index",
+            #/patho_index/indexName.fna.hash 
+            indexPrefix = lambda w, input: os.path.splitext([x for x in input.index ][0])[0],
+            accel_align_seed_length = config["<step_name>__accel_align_seed_length"],
+            accel_align_insert_size = config["<step_name>__accel_align_insert_size"],
+            accel_align_softclipping = "-s" if config["<step_name>__accel_align_softclipping"] else "",
+            accel_align_alignment_free = "-x" if config["<step_name>__accel_align_alignment_free"] else "",
+        shell:
+            "{params.command} "
+            "-t {threads} "
+            "-l {params.accel_align_seed_length} "
+            "-p {params.accel_align_insert_size} "
+            "{params.accel_align_alignment_free} "
+            "{params.accel_align_alignment_free} "
+            "{params.indexPrefix} "
+            "{input.read} {input.read2} 2> {log} "
+            "| samtools view -b 2>> {log} "
+            "| samtools sort -@ {threads} > {output.bam} 2>> {log} &&"
+            "samtools index -@ {threads} {output.bam} 2>> {log}"
+
+
+elif config["SeOrPe"] == "SE":
+
+    rule <step_name>__accel_align_SE:
+        input:
+            **<step_name>__accel_align_SE_inputs()
+        output:
+            bam = config["results_dir"]+"/"+config["<step_name>__accel_align_SE_output_dir"]+"/{sample}.bam"
+        log:
+            config["results_dir"]+"/logs/" + config["<step_name>__accel_align_SE_output_dir"] + "/{sample}_accel_align_log.txt"
+        threads:
+            config["<step_name>__accel_align_threads"]
+        params:
+            command = config["<step_name>__accel_align_PE_command"],
+            accel_align_seed_length = config["<step_name>__accel_align_seed_length"],
+            accel_align_softclipping = "-s" if config["<step_name>__accel_align_softclipping"] else "",
+            accel_align_alignment_free = "-x" if config["<step_name>__accel_align_alignment_free"] else "",
+            #indexPrefix =  config["<step_name>__accel_align_index_output_dir"]+"/index",
+            indexPrefix = lambda w, input: os.path.splitext([x for x in input.index][0])[0],
+        shell:
+            "{params.command} "
+            "-t {threads} "
+            "-l {params.accel_align_seed_length} "
+            "{params.accel_align_alignment_free} "
+            "{params.accel_align_alignment_free} "
+            "{params.indexPrefix} "
+            "{input.read} 2> {log} "
+            "| samtools view -b 2>> {log} "
+            "| samtools sort -@ {threads} > {output.bam} 2>> {log} &&"
+            "samtools index -@ {threads} {output.bam} 2>> {log}"
diff --git a/tools/accel_align/accel_align.yaml b/tools/accel_align/accel_align.yaml
new file mode 100755
index 00000000..b8e00a58
--- /dev/null
+++ b/tools/accel_align/accel_align.yaml
@@ -0,0 +1,144 @@
+{
+  id: accel_align,
+  name: Accel-align is a fast alignment tool implemented in C++,
+  article: 10.1186/s12859-021-04162-z,
+  website: "https://github.com/raja-appuswamy/accel-align-release",
+  git: "https://github.com/raja-appuswamy/accel-align-release",
+  description: "a fast sequence mapper and aligner based on the seed-embed-extend method",
+  version: "2.0",
+  documentation: "https://github.com/raja-appuswamy/accel-align-release",
+  multiqc: "custom",
+  commands:
+    [
+      {
+        name: accel_align_PE,
+        cname: "Accel-align PE",
+        command: accalign-x86-64,
+        category: "mapping",
+        output_dir: accel_align/PE,
+        inputs: [{ name: read, type: "reads" }, { name: read2, type: "reads" }, { name: index, type: "accel_align_index", file: index, description: "Index files for accel_align alignment" }],
+        outputs: [{ name: bam, type: "bams", file: "{sample}.bam", description: "Alignment files" }],
+        options:
+          [
+            {
+              name: accel_align_threads,
+              prefix: -t,
+              type: numeric,
+              value: 4,
+              min: 1,
+              max: NA,
+              step: 1,
+              label: "Number of threads to use",
+            },
+            {
+              name: accel_align_seed_length,
+              prefix: -l,
+              type: numeric,
+              value: 32,
+              min: 10,
+              max: 100,
+              step: 1,
+              label: "length of seed",
+            },
+            {
+              name: accel_align_insert_size,
+              prefix: -p,
+              type: numeric,
+              value: 1000,
+              min: 10,
+              max: 400,
+              step: 10,
+              label: "the maximum distance allowed between the paired-end reads (maximum read length supported are 512)",
+            },
+            {
+              name: accel_align_softclipping,
+              prefix: -s,
+              type: checkbox,
+              value: FALSE,
+              label: "Take into account softclipping",
+            },
+            {
+              name: accel_align_alignment_free,
+              prefix: -x,
+              type: checkbox,
+              value: FALSE,
+              label: "alignment-free mapping mode where the position is reported without the CIGAR string",
+            }
+          ]
+      },
+      {
+        name: accel_align_SE,
+        cname: "Accel-align SE",
+        command: accalign-x86-64 ,
+        category: "mapping",
+        output_dir: accel_align/SE,
+        inputs: [{ name: read, type: "reads" }, { name: index, type: "accel_align_index", file: index, description: "Index files for accel_align alignment" }],
+        outputs: [{ name: bam, type: "bams", file: "{sample}.bam", description: "Alignment files" }],
+        options:
+          [
+            {
+              name: accel_align_threads,
+              prefix: -t,
+              type: numeric,
+              value: 4,
+              min: 1,
+              max: NA,
+              step: 1,
+              label: "Number of threads to use",
+            },
+            {
+              name: accel_align_seed_length,
+              prefix: -l,
+              type: numeric,
+              value: 32,
+              min: 10,
+              max: 100,
+              step: 1,
+              label: "length of seed",
+            },
+            {
+              name: accel_align_softclipping,
+              prefix: -s,
+              type: checkbox,
+              value: FALSE,
+              label: "Take into account softclipping",
+            },
+            {
+              name: accel_align_alignment_free,
+              prefix: -x,
+              type: checkbox,
+              value: FALSE,
+              label: "alignment-free mapping mode where the position is reported without the CIGAR string",
+            }
+          ]
+      }
+    ],
+  install:  {
+    accel_align: [
+      "cd /opt/biotools",
+      "git clone https://github.com/raja-appuswamy/accel-align-release.git",
+      "ENV PATH /opt/biotools/accel-align-release:$PATH",
+    ],
+    Intel_TBB: [
+     "apt-get install -y libtbb-dev",
+    ],
+    samtools: [
+      "cd /opt/biotools",
+      "wget https://github.com/samtools/samtools/releases/download/1.9/samtools-1.9.tar.bz2",
+      "tar -xvjf samtools-1.9.tar.bz2",
+      "cd samtools-1.9",
+      "./configure && make",
+      "cd ..",
+      "mv samtools-1.9/samtools bin/samtools",
+      "rm -r samtools-1.9 samtools-1.9.tar.bz2"
+    ]
+  },
+  citations:  {
+    accel_align: [
+      "Yan, Y., Chaturvedi, N. & Appuswamy, R. Accel-Align: a fast sequence mapper and aligner based on the seed-embed-extend method. BMC Bioinformatics 22, 257 (2021)."
+    ],
+    samtools: [
+      "Heng Li, Bob Handsaker, Alec Wysoker, Tim Fennell, Jue Ruan, Nils Homer, Gabor Marth, Goncalo Abecasis, Richard Durbin, 1000 Genome Project Data Processing Subgroup, The Sequence Alignment/Map format and SAMtools, Bioinformatics, Volume 25, Issue 16, 15 August 2009, Pages 2078-2079, https://doi.org/10.1093/bioinformatics/btp352"
+    ]
+  }
+}
\ No newline at end of file
-- 
GitLab