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