From 1aefdf1cf00acd1cb1c12decba0d0273a4d90fd6 Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 11:46:53 +0200 Subject: [PATCH 01/12] bump version --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 2f4a986..e4051ae 100644 --- a/nextflow.config +++ b/nextflow.config @@ -62,7 +62,7 @@ process.shell = ['/bin/bash', '-euo', 'pipefail'] cleanup = true conda.createTimeout = '1 h' -VERSION = '0.13.0' +VERSION = '0.14.0' manifest { name = 'TRON-Bioinformatics/covigator-ngs-pipeline' From 57c0ecdc6788728a36f1f51e6b02b28c860b4f94 Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 12:28:38 +0200 Subject: [PATCH 02/12] replace picard MarkDuplicates by Sambamba with the aim of increasing time and memory performance --- main.nf | 22 +++++++++------ modules/03_bam_preprocessing.nf | 49 +++++++++++++++++++++------------ 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/main.nf b/main.nf index 50771eb..abec977 100755 --- a/main.nf +++ b/main.nf @@ -5,7 +5,7 @@ nextflow.enable.dsl = 2 include { READ_TRIMMING_PAIRED_END; READ_TRIMMING_SINGLE_END } from './modules/01_fastp' include { ALIGNMENT_PAIRED_END; ALIGNMENT_SINGLE_END } from './modules/02_bwa' -include { BAM_PREPROCESSING; COVERAGE_ANALYSIS; PRIMER_TRIMMING_IVAR } from './modules/03_bam_preprocessing' +include { BAM_PREPROCESSING; COVERAGE_ANALYSIS; PRIMER_TRIMMING_IVAR; MARK_DUPLICATES } from './modules/03_bam_preprocessing' include { VARIANT_CALLING_BCFTOOLS; VARIANT_CALLING_LOFREQ ; VARIANT_CALLING_GATK ; VARIANT_CALLING_IVAR ; VARIANT_CALLING_ASSEMBLY; IVAR2VCF } from './modules/04_variant_calling' include { VARIANT_NORMALIZATION ; PHASING } from './modules/05_variant_normalization' @@ -192,31 +192,35 @@ workflow { } BAM_PREPROCESSING(bam_files, reference) preprocessed_bams = BAM_PREPROCESSING.out.preprocessed_bam + + MARK_DUPLICATES(preprocessed_bams) + deduplicated_bams = MARK_DUPLICATES.out.dedup_bams + if (primers) { - PRIMER_TRIMMING_IVAR(preprocessed_bams, primers) - preprocessed_bams = PRIMER_TRIMMING_IVAR.out.trimmed_bam + PRIMER_TRIMMING_IVAR(deduplicated_bams, primers) + deduplicated_bams = PRIMER_TRIMMING_IVAR.out.trimmed_bam } - COVERAGE_ANALYSIS(preprocessed_bams) + COVERAGE_ANALYSIS(deduplicated_bams) // variant calling vcfs_to_normalize = null if (!params.skip_bcftools) { - VARIANT_CALLING_BCFTOOLS(preprocessed_bams, reference) + VARIANT_CALLING_BCFTOOLS(deduplicated_bams, reference) vcfs_to_normalize = vcfs_to_normalize == null? VARIANT_CALLING_BCFTOOLS.out : vcfs_to_normalize.concat(VARIANT_CALLING_BCFTOOLS.out) } if (!params.skip_lofreq) { - VARIANT_CALLING_LOFREQ(preprocessed_bams, reference) + VARIANT_CALLING_LOFREQ(deduplicated_bams, reference) vcfs_to_normalize = vcfs_to_normalize == null? VARIANT_CALLING_LOFREQ.out : vcfs_to_normalize.concat(VARIANT_CALLING_LOFREQ.out) } if (!params.skip_gatk) { - VARIANT_CALLING_GATK(preprocessed_bams, reference) + VARIANT_CALLING_GATK(deduplicated_bams, reference) vcfs_to_normalize = vcfs_to_normalize == null? VARIANT_CALLING_GATK.out : vcfs_to_normalize.concat(VARIANT_CALLING_GATK.out) } if (!params.skip_ivar && gff) { - VARIANT_CALLING_IVAR(preprocessed_bams, reference, gff) + VARIANT_CALLING_IVAR(deduplicated_bams, reference, gff) IVAR2VCF(VARIANT_CALLING_IVAR.out, reference) vcfs_to_normalize = vcfs_to_normalize == null? IVAR2VCF.out : vcfs_to_normalize.concat(IVAR2VCF.out) @@ -246,7 +250,7 @@ workflow { if (input_fastqs) { // we can only add technical annotations when we have the reads - VAFATOR(normalized_vcfs.combine(preprocessed_bams, by: 0)) + VAFATOR(normalized_vcfs.combine(deduplicated_bams, by: 0)) VARIANT_VAF_ANNOTATION(VAFATOR.out.annotated_vcf) normalized_vcfs = VARIANT_VAF_ANNOTATION.out.vaf_annotated } diff --git a/modules/03_bam_preprocessing.nf b/modules/03_bam_preprocessing.nf index d7155bd..8c5825a 100644 --- a/modules/03_bam_preprocessing.nf +++ b/modules/03_bam_preprocessing.nf @@ -20,8 +20,7 @@ process BAM_PREPROCESSING { val(reference) output: - tuple val(name), file("${name}.preprocessed.bam"), file("${name}.preprocessed.bai"), emit: preprocessed_bam - file("${name}.deduplication_metrics.txt") + tuple val(name), file("${name}.preprocessed.bam"), emit: preprocessed_bam """ mkdir tmp @@ -34,29 +33,45 @@ process BAM_PREPROCESSING { --java-options '-Xmx${params.memory} -Djava.io.tmpdir=./tmp' \ --VALIDATION_STRINGENCY SILENT \ --INPUT /dev/stdin \ - --OUTPUT ${bam.baseName}.prepared.bam \ + --OUTPUT ${bam.baseName}.preprocessed.bam \ --REFERENCE_SEQUENCE ${reference} \ --RGPU 1 \ --RGID 1 \ --RGSM ${name} \ --RGLB 1 \ - --RGPL ILLUMINA \ - --SORT_ORDER queryname + --RGPL ILLUMINA + """ +} - gatk MarkDuplicates \ - --java-options '-Xmx${params.memory} -Djava.io.tmpdir=./tmp' \ - --INPUT ${bam.baseName}.prepared.bam \ - --METRICS_FILE ${name}.deduplication_metrics.txt \ - --OUTPUT ${bam.baseName}.dedup.bam \ - --REMOVE_DUPLICATES true +process MARK_DUPLICATES { + cpus params.cpus + memory params.memory + tag "${name}" - gatk SortSam \ - --java-options '-Xmx${params.memory} -Djava.io.tmpdir=./tmp' \ - --INPUT ${bam.baseName}.dedup.bam \ - --OUTPUT ${bam.baseName}.preprocessed.bam \ - --SORT_ORDER coordinate + conda (params.enable_conda ? "bioconda::sambamba=0.8.2" : null) + + input: + tuple val(name), file(bam) + + output: + tuple val(name), file("${name}.dedupped.bam"), file("${name}.dedupped.bai"), emit: dedup_bams + + """ + mkdir tmp - gatk BuildBamIndex --INPUT ${bam.baseName}.preprocessed.bam + sambamba sort -o /dev/stdout \ + -t ${task.cpus} \ + --tmpdir=./tmp \ + ${bam} | \ + sambamba markdup \ + -r \ + -t ${task.cpus} \ + --tmpdir=./tmp \ + /dev/stdin ${name}.dedupped.bam + + sambamba index \ + -t ${task.cpus} \ + ${name}.dedupped.bam ${name}.dedupped.bai """ } From 23cfc01b558bd08a6c22cc0d6492584241f6b55c Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 12:34:31 +0200 Subject: [PATCH 03/12] remove pipes from sambamba as do not seem supported for markdups --- modules/03_bam_preprocessing.nf | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/03_bam_preprocessing.nf b/modules/03_bam_preprocessing.nf index 8c5825a..0f8cc4b 100644 --- a/modules/03_bam_preprocessing.nf +++ b/modules/03_bam_preprocessing.nf @@ -59,16 +59,23 @@ process MARK_DUPLICATES { """ mkdir tmp - sambamba sort -o /dev/stdout \ + # sorts by coordinates + sambamba sort -o ${name}.sorted.bam \ -t ${task.cpus} \ --tmpdir=./tmp \ - ${bam} | \ + ${bam} + + # removes duplicates sambamba markdup \ -r \ -t ${task.cpus} \ --tmpdir=./tmp \ - /dev/stdin ${name}.dedupped.bam + ${name}.sorted.bam ${name}.dedupped.bam + + # removes intermediate sorted BAM file + rm -f ${name}.sorted.bam + # indexes the output BAM file sambamba index \ -t ${task.cpus} \ ${name}.dedupped.bam ${name}.dedupped.bai From 11b941d7dde9e750b9582cb97404732810c68bfe Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 12:44:45 +0200 Subject: [PATCH 04/12] merges again markduplicate and bam prepro --- main.nf | 23 +++++++++------------ modules/03_bam_preprocessing.nf | 36 +++++++++------------------------ 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/main.nf b/main.nf index abec977..2ec0b6e 100755 --- a/main.nf +++ b/main.nf @@ -5,7 +5,7 @@ nextflow.enable.dsl = 2 include { READ_TRIMMING_PAIRED_END; READ_TRIMMING_SINGLE_END } from './modules/01_fastp' include { ALIGNMENT_PAIRED_END; ALIGNMENT_SINGLE_END } from './modules/02_bwa' -include { BAM_PREPROCESSING; COVERAGE_ANALYSIS; PRIMER_TRIMMING_IVAR; MARK_DUPLICATES } from './modules/03_bam_preprocessing' +include { BAM_PREPROCESSING; COVERAGE_ANALYSIS; PRIMER_TRIMMING_IVAR } from './modules/03_bam_preprocessing' include { VARIANT_CALLING_BCFTOOLS; VARIANT_CALLING_LOFREQ ; VARIANT_CALLING_GATK ; VARIANT_CALLING_IVAR ; VARIANT_CALLING_ASSEMBLY; IVAR2VCF } from './modules/04_variant_calling' include { VARIANT_NORMALIZATION ; PHASING } from './modules/05_variant_normalization' @@ -191,36 +191,33 @@ workflow { bam_files = ALIGNMENT_SINGLE_END.out } BAM_PREPROCESSING(bam_files, reference) - preprocessed_bams = BAM_PREPROCESSING.out.preprocessed_bam - - MARK_DUPLICATES(preprocessed_bams) - deduplicated_bams = MARK_DUPLICATES.out.dedup_bams + preprocessed_bams = BAM_PREPROCESSING.out.preprocessed_bams if (primers) { - PRIMER_TRIMMING_IVAR(deduplicated_bams, primers) - deduplicated_bams = PRIMER_TRIMMING_IVAR.out.trimmed_bam + PRIMER_TRIMMING_IVAR(preprocessed_bams, primers) + preprocessed_bams = PRIMER_TRIMMING_IVAR.out.trimmed_bam } - COVERAGE_ANALYSIS(deduplicated_bams) + COVERAGE_ANALYSIS(preprocessed_bams) // variant calling vcfs_to_normalize = null if (!params.skip_bcftools) { - VARIANT_CALLING_BCFTOOLS(deduplicated_bams, reference) + VARIANT_CALLING_BCFTOOLS(preprocessed_bams, reference) vcfs_to_normalize = vcfs_to_normalize == null? VARIANT_CALLING_BCFTOOLS.out : vcfs_to_normalize.concat(VARIANT_CALLING_BCFTOOLS.out) } if (!params.skip_lofreq) { - VARIANT_CALLING_LOFREQ(deduplicated_bams, reference) + VARIANT_CALLING_LOFREQ(preprocessed_bams, reference) vcfs_to_normalize = vcfs_to_normalize == null? VARIANT_CALLING_LOFREQ.out : vcfs_to_normalize.concat(VARIANT_CALLING_LOFREQ.out) } if (!params.skip_gatk) { - VARIANT_CALLING_GATK(deduplicated_bams, reference) + VARIANT_CALLING_GATK(preprocessed_bams, reference) vcfs_to_normalize = vcfs_to_normalize == null? VARIANT_CALLING_GATK.out : vcfs_to_normalize.concat(VARIANT_CALLING_GATK.out) } if (!params.skip_ivar && gff) { - VARIANT_CALLING_IVAR(deduplicated_bams, reference, gff) + VARIANT_CALLING_IVAR(preprocessed_bams, reference, gff) IVAR2VCF(VARIANT_CALLING_IVAR.out, reference) vcfs_to_normalize = vcfs_to_normalize == null? IVAR2VCF.out : vcfs_to_normalize.concat(IVAR2VCF.out) @@ -250,7 +247,7 @@ workflow { if (input_fastqs) { // we can only add technical annotations when we have the reads - VAFATOR(normalized_vcfs.combine(deduplicated_bams, by: 0)) + VAFATOR(normalized_vcfs.combine(preprocessed_bams, by: 0)) VARIANT_VAF_ANNOTATION(VAFATOR.out.annotated_vcf) normalized_vcfs = VARIANT_VAF_ANNOTATION.out.vaf_annotated } diff --git a/modules/03_bam_preprocessing.nf b/modules/03_bam_preprocessing.nf index 0f8cc4b..247d06c 100644 --- a/modules/03_bam_preprocessing.nf +++ b/modules/03_bam_preprocessing.nf @@ -7,20 +7,19 @@ params.keep_intermediate = false process BAM_PREPROCESSING { cpus params.cpus memory params.memory + tag "${name}" if (params.keep_intermediate) { publishDir "${params.output}", mode: "copy" } - publishDir "${params.output}", mode: "copy", pattern: "${name}.deduplication_metrics.txt" - tag "${name}" - conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0 bioconda::sambamba=0.8.2" : null) input: tuple val(name), file(bam) val(reference) output: - tuple val(name), file("${name}.preprocessed.bam"), emit: preprocessed_bam + tuple val(name), file("${name}.preprocessed.bam"), file("${name}.preprocessed.bai"), emit: preprocessed_bams """ mkdir tmp @@ -33,52 +32,35 @@ process BAM_PREPROCESSING { --java-options '-Xmx${params.memory} -Djava.io.tmpdir=./tmp' \ --VALIDATION_STRINGENCY SILENT \ --INPUT /dev/stdin \ - --OUTPUT ${bam.baseName}.preprocessed.bam \ + --OUTPUT ${name}.prepared.bam \ --REFERENCE_SEQUENCE ${reference} \ --RGPU 1 \ --RGID 1 \ --RGSM ${name} \ --RGLB 1 \ --RGPL ILLUMINA - """ -} - -process MARK_DUPLICATES { - cpus params.cpus - memory params.memory - tag "${name}" - - conda (params.enable_conda ? "bioconda::sambamba=0.8.2" : null) - - input: - tuple val(name), file(bam) - - output: - tuple val(name), file("${name}.dedupped.bam"), file("${name}.dedupped.bai"), emit: dedup_bams - - """ - mkdir tmp # sorts by coordinates sambamba sort -o ${name}.sorted.bam \ -t ${task.cpus} \ --tmpdir=./tmp \ - ${bam} + ${name}.prepared.bam # removes duplicates sambamba markdup \ -r \ -t ${task.cpus} \ --tmpdir=./tmp \ - ${name}.sorted.bam ${name}.dedupped.bam + ${name}.sorted.bam ${name}.preprocessed.bam - # removes intermediate sorted BAM file + # removes intermediate BAM files + rm -f ${name}.prepared.bam rm -f ${name}.sorted.bam # indexes the output BAM file sambamba index \ -t ${task.cpus} \ - ${name}.dedupped.bam ${name}.dedupped.bai + ${name}.preprocessed.bam ${name}.preprocessed.bai """ } From 2a40ff5b6de86ae4cc14099cb5993b5f2fc448ec Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 12:57:27 +0200 Subject: [PATCH 05/12] controls memory in SnpEff --- modules/06_variant_annotation.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/06_variant_annotation.nf b/modules/06_variant_annotation.nf index a729db5..41abc6d 100644 --- a/modules/06_variant_annotation.nf +++ b/modules/06_variant_annotation.nf @@ -33,11 +33,13 @@ process VARIANT_ANNOTATION { output: tuple val(name), val(caller), file("${name}.${caller}.annotated.vcf"), emit: annotated_vcfs + script: + memory = "${params.memory}".replaceAll(" ", "").toLowerCase() """ # for some reason the snpEff.config file needs to be in the folder where snpeff runs... cp ${snpeff_config} . - snpEff eff -dataDir ${snpeff_data} \ + snpEff eff -Xmx${memory} -dataDir ${snpeff_data} \ -noStats -no-downstream -no-upstream -no-intergenic -no-intron -onlyProtein -hgvs1LetterAa -noShiftHgvs \ ${snpeff_organism} ${vcf} > ${name}.${caller}.annotated.vcf """ From 50cf87b69330552f267ab221f9a0b2e92299231c Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 13:06:00 +0200 Subject: [PATCH 06/12] remove unnecessary sort operation --- modules/03_bam_preprocessing.nf | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/modules/03_bam_preprocessing.nf b/modules/03_bam_preprocessing.nf index 247d06c..8e18eb4 100644 --- a/modules/03_bam_preprocessing.nf +++ b/modules/03_bam_preprocessing.nf @@ -40,22 +40,15 @@ process BAM_PREPROCESSING { --RGLB 1 \ --RGPL ILLUMINA - # sorts by coordinates - sambamba sort -o ${name}.sorted.bam \ - -t ${task.cpus} \ - --tmpdir=./tmp \ - ${name}.prepared.bam - - # removes duplicates + # removes duplicates (sorted from the alignment process) sambamba markdup \ -r \ -t ${task.cpus} \ --tmpdir=./tmp \ - ${name}.sorted.bam ${name}.preprocessed.bam + ${name}.prepared.bam ${name}.preprocessed.bam # removes intermediate BAM files rm -f ${name}.prepared.bam - rm -f ${name}.sorted.bam # indexes the output BAM file sambamba index \ From 91af0ebf88a6c8bb09f8a01dbf4457bdde3cbbc5 Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 13:06:40 +0200 Subject: [PATCH 07/12] replace bwa mem by bwa mem 2 --- modules/02_bwa.nf | 8 ++++---- .../Sars_cov_2.ASM985889v3.dna.toplevel.fa.0123 | Bin 0 -> 59806 bytes ...ov_2.ASM985889v3.dna.toplevel.fa.bwt.2bit.64 | Bin 0 -> 97276 bytes 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 reference/Sars_cov_2.ASM985889v3.dna.toplevel.fa.0123 create mode 100644 reference/Sars_cov_2.ASM985889v3.dna.toplevel.fa.bwt.2bit.64 diff --git a/modules/02_bwa.nf b/modules/02_bwa.nf index a5d8540..d5ba7e6 100644 --- a/modules/02_bwa.nf +++ b/modules/02_bwa.nf @@ -7,7 +7,7 @@ process ALIGNMENT_PAIRED_END { memory params.memory tag "${name}" - conda (params.enable_conda ? "bioconda::bwa=0.7.17 bioconda::samtools=1.12" : null) + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) input: tuple val(name), file(fastq1), file(fastq2) @@ -17,7 +17,7 @@ process ALIGNMENT_PAIRED_END { tuple val(name), file("${name}.bam") """ - bwa mem -t ${task.cpus} ${reference} ${fastq1} ${fastq2} | \ + bwa-mem2 mem -t ${task.cpus} ${reference} ${fastq1} ${fastq2} | \ samtools view -uS - | \ samtools sort - > ${name}.bam """ @@ -28,7 +28,7 @@ process ALIGNMENT_SINGLE_END { memory params.memory tag "${name}" - conda (params.enable_conda ? "bioconda::bwa=0.7.17 bioconda::samtools=1.12" : null) + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) input: tuple val(name), file(fastq1) @@ -38,7 +38,7 @@ process ALIGNMENT_SINGLE_END { tuple val(name), file("${name}.bam") """ - bwa mem -t ${task.cpus} ${reference} ${fastq1} | \ + bwa-mem2 mem -t ${task.cpus} ${params.reference} ${fastq1} | \ samtools view -uS - | \ samtools sort - > ${name}.bam """ diff --git a/reference/Sars_cov_2.ASM985889v3.dna.toplevel.fa.0123 b/reference/Sars_cov_2.ASM985889v3.dna.toplevel.fa.0123 new file mode 100644 index 0000000000000000000000000000000000000000..c9c473507b52b8b3f3d63ca5e37f2bd144f61278 GIT binary patch literal 59806 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 a5<{Y3YOf?`?oW>@>ByjSmiU=Z!v6sZ$6kE^ literal 0 HcmV?d00001 diff --git a/reference/Sars_cov_2.ASM985889v3.dna.toplevel.fa.bwt.2bit.64 b/reference/Sars_cov_2.ASM985889v3.dna.toplevel.fa.bwt.2bit.64 new file mode 100644 index 0000000000000000000000000000000000000000..f7cd6975c2b5f1381d6b11beaba0fdb9878cecef GIT binary patch literal 97276 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�T$V!5YR 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 n-O+WJtc&hU$zFPxKgLDn+ Date: Mon, 10 Oct 2022 14:00:42 +0200 Subject: [PATCH 08/12] fix tests + update README --- README.md | 8 ++++---- tests/test_00_test_mode.sh | 1 - tests/test_01.sh | 1 - tests/test_02.sh | 1 - tests/test_03.sh | 1 - tests/test_06.sh | 1 - tests/test_07.sh | 1 - tests/test_08.sh | 1 - tests/test_10.sh | 1 - tests/test_11.sh | 1 - 10 files changed, 4 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f2a16dd..00c5533 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,8 @@ analysed differently. Also, the output data that we can obtain from each of thes When FASTQ files are provided the pipeline includes the following steps: - **Trimming**. `fastp` is used to trim reads with default values. This step also includes QC filtering. -- **Alignment**. `BWA mem` is used for the alignment of single or paired end samples. -- **BAM preprocessing**. BAM files are prepared and duplicate reads are marked using GATK and Picard tools. +- **Alignment**. `BWA mem 2` is used for the alignment of single or paired end samples. +- **BAM preprocessing**. BAM files are prepared and duplicate reads are marked using GATK and Sambamba tools. - **Primer trimming**. When a BED with primers is provided, these are trimmed from the reads using iVar. This is applicable to the results from all variant callers. - **Coverage analysis**. `samtools coverage` and `samtools depth` are used to compute the horizontal and vertical coverage respectively. @@ -347,7 +347,6 @@ Output: * Only when FASTQs are provided: * FASTP statistics * Depth and breadth of coverage analysis results - * Picard's deduplication metrics ``` @@ -411,7 +410,7 @@ is a technical artifact that would need to be avoided. ## Bibliography - Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316–319. https://doi.org/10.1038/nbt.3820 -- Li H. and Durbin R. (2009) Fast and accurate short read alignment with Burrows-Wheeler Transform. Bioinformatics, 25:1754-60. [PMID: 19451168] +- Vasimuddin Md, Sanchit Misra, Heng Li, Srinivas Aluru. Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. IEEE Parallel and Distributed Processing Symposium (IPDPS), 2019. - Adrian Tan, Gonçalo R. Abecasis and Hyun Min Kang. Unified Representation of Genetic Variants. Bioinformatics (2015) 31(13): 2202-2204](http://bioinformatics.oxfordjournals.org/content/31/13/2202) and uses bcftools [Li, H. (2011). A statistical framework for SNP calling, mutation discovery, association mapping and population genetical parameter estimation from sequencing data. Bioinformatics (Oxford, England), 27(21), 2987–2993. 10.1093/bioinformatics/btr509 - Danecek P, Bonfield JK, Liddle J, Marshall J, Ohan V, Pollard MO, Whitwham A, Keane T, McCarthy SA, Davies RM, Li H. Twelve years of SAMtools and BCFtools. Gigascience. 2021 Feb 16;10(2):giab008. doi: 10.1093/gigascience/giab008. PMID: 33590861; PMCID: PMC7931819. - Van der Auwera GA, Carneiro M, Hartl C, Poplin R, del Angel G, Levy-Moonshine A, Jordan T, Shakir K, Roazen D, Thibault J, Banks E, Garimella K, Altshuler D, Gabriel S, DePristo M. (2013). From FastQ Data to High-Confidence Variant Calls: The Genome Analysis Toolkit Best Practices Pipeline. Curr Protoc Bioinformatics, 43:11.10.1-11.10.33. DOI: 10.1002/0471250953.bi1110s43. @@ -422,3 +421,4 @@ is a technical artifact that would need to be avoided. - Shifu Chen, Yanqing Zhou, Yaru Chen, Jia Gu; fastp: an ultra-fast all-in-one FASTQ preprocessor, Bioinformatics, Volume 34, Issue 17, 1 September 2018, Pages i884–i890, https://doi.org/10.1093/bioinformatics/bty560 - Kwon, S. Bin, & Ernst, J. (2021). Single-nucleotide conservation state annotation of the SARS-CoV-2 genome. Communications Biology, 4(1), 1–11. https://doi.org/10.1038/s42003-021-02231-w - Cock, P. J., Antao, T., Chang, J. T., Chapman, B. A., Cox, C. J., Dalke, A., et al. (2009). Biopython: freely available Python tools for computational molecular biology and bioinformatics. Bioinformatics, 25(11), 1422–1423. +- Artem Tarasov, Albert J. Vilella, Edwin Cuppen, Isaac J. Nijman, Pjotr Prins, Sambamba: fast processing of NGS alignment formats, Bioinformatics, Volume 31, Issue 12, 15 June 2015, Pages 2032–2034, https://doi.org/10.1093/bioinformatics/btv098 diff --git a/tests/test_00_test_mode.sh b/tests/test_00_test_mode.sh index 794a961..1bb2a19 100644 --- a/tests/test_00_test_mode.sh +++ b/tests/test_00_test_mode.sh @@ -23,7 +23,6 @@ test -s covigator_fastq_test/test.fastp_stats.json || { echo "Missing VCF output test -s covigator_fastq_test/test.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s covigator_fastq_test/test.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s covigator_fastq_test/test.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s covigator_fastq_test/test.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s covigator_fastq_test/test.bcftools.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } test -s covigator_fastq_test/test.gatk.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } test -s covigator_fastq_test/test.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } diff --git a/tests/test_01.sh b/tests/test_01.sh index c2ee242..979cabb 100644 --- a/tests/test_01.sh +++ b/tests/test_01.sh @@ -21,7 +21,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } assert_eq `zcat $output/test_data.lofreq.vcf.gz | grep -v '#' | wc -l` 54 "Wrong number of variants" diff --git a/tests/test_02.sh b/tests/test_02.sh index a8e826f..aa7d52a 100644 --- a/tests/test_02.sh +++ b/tests/test_02.sh @@ -18,7 +18,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } # these are the intermediate files kept by --keep_intermediate diff --git a/tests/test_03.sh b/tests/test_03.sh index a5ffa22..5c9e3f5 100644 --- a/tests/test_03.sh +++ b/tests/test_03.sh @@ -20,7 +20,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } # these are the intermediate files kept by --keep_intermediate diff --git a/tests/test_06.sh b/tests/test_06.sh index d9d8fe7..39e7cbd 100644 --- a/tests/test_06.sh +++ b/tests/test_06.sh @@ -18,7 +18,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } assert_eq `zcat $output/test_data.lofreq.vcf.gz | grep -v '#' | wc -l` 54 "Wrong number of variants" diff --git a/tests/test_07.sh b/tests/test_07.sh index cb78f91..b957658 100644 --- a/tests/test_07.sh +++ b/tests/test_07.sh @@ -18,7 +18,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } assert_eq `zcat $output/test_data.lofreq.vcf.gz | grep -v '#' | wc -l` 11 "Wrong number of variants" diff --git a/tests/test_08.sh b/tests/test_08.sh index 7b49b0e..49d31e4 100644 --- a/tests/test_08.sh +++ b/tests/test_08.sh @@ -19,7 +19,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } assert_eq `zcat $output/test_data.lofreq.vcf.gz | grep -v '#' | wc -l` 54 "Wrong number of variants" diff --git a/tests/test_10.sh b/tests/test_10.sh index 5a66231..529acfd 100644 --- a/tests/test_10.sh +++ b/tests/test_10.sh @@ -18,7 +18,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } assert_eq `zcat $output/test_data.lofreq.vcf.gz | grep -v '#' | wc -l` 11 "Wrong number of variants" diff --git a/tests/test_11.sh b/tests/test_11.sh index 83ddb87..d2387c9 100644 --- a/tests/test_11.sh +++ b/tests/test_11.sh @@ -16,7 +16,6 @@ test -s $output/test_data.fastp_stats.json || { echo "Missing VCF output file!"; test -s $output/test_data.fastp_stats.html || { echo "Missing VCF output file!"; exit 1; } test -s $output/test_data.coverage.tsv || { echo "Missing coverage output file!"; exit 1; } test -s $output/test_data.depth.tsv || { echo "Missing depth output file!"; exit 1; } -test -s $output/test_data.deduplication_metrics.txt || { echo "Missing deduplication metrics file!"; exit 1; } test -s $output/test_data.lofreq.pangolin.csv || { echo "Missing pangolin output file!"; exit 1; } assert_eq `zcat $output/test_data.lofreq.vcf.gz | grep -v '#' | wc -l` 3 "Wrong number of variants" From de47a4c212d3a50fbc777efd97933775e56e75fe Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Mon, 10 Oct 2022 15:25:46 +0200 Subject: [PATCH 09/12] fix issue with single end alignment --- modules/02_bwa.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/02_bwa.nf b/modules/02_bwa.nf index d5ba7e6..b5714ad 100644 --- a/modules/02_bwa.nf +++ b/modules/02_bwa.nf @@ -38,7 +38,7 @@ process ALIGNMENT_SINGLE_END { tuple val(name), file("${name}.bam") """ - bwa-mem2 mem -t ${task.cpus} ${params.reference} ${fastq1} | \ + bwa-mem2 mem -t ${task.cpus} ${reference} ${fastq1} | \ samtools view -uS - | \ samtools sort - > ${name}.bam """ From 77b6fc3a14a45d7f1e1f7df1c3dafceb37e5ba1c Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Tue, 25 Oct 2022 23:08:15 +0200 Subject: [PATCH 10/12] fix nextflow version in CI environment --- .github/workflows/automated_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/automated_tests.yml b/.github/workflows/automated_tests.yml index a4cedde..d48552a 100644 --- a/.github/workflows/automated_tests.yml +++ b/.github/workflows/automated_tests.yml @@ -29,4 +29,5 @@ jobs: key: ${{ runner.os }}-covigator-ngs-pipeline - name: Run tests run: | + export NXF_VER=22.04.5 make \ No newline at end of file From 59056b5949cde3771f4dfcfab485301d37dc30b5 Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Tue, 1 Nov 2022 18:24:36 +0100 Subject: [PATCH 11/12] add option to skip pangolin --- README.md | 1 + main.nf | 13 +++++++++---- nextflow.config | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 00c5533..1ded9db 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,7 @@ Optional input: * --skip_gatk: skips calling variants with GATK * --skip_bcftools: skips calling variants with BCFTools * --skip_ivar: skips calling variants with iVar + * --skip_pangolin: skips lineage determination with pangolin * --match_score: global alignment match score, only applicable for assemblies (default: 2) * --mismatch_score: global alignment mismatch score, only applicable for assemblies (default: -1) * --open_gap_score: global alignment open gap score, only applicable for assemblies (default: -3) diff --git a/main.nf b/main.nf index 2ec0b6e..82d4308 100755 --- a/main.nf +++ b/main.nf @@ -26,6 +26,7 @@ params.skip_lofreq = false params.skip_ivar = false params.skip_bcftools = false params.skip_gatk = false +params.skip_pangolin = false // references params.reference = false @@ -224,12 +225,16 @@ workflow { } // pangolin from VCF - VCF2FASTA(vcfs_to_normalize, reference) - PANGOLIN_LINEAGE(VCF2FASTA.out) + if (!params.skip_pangolin) { + VCF2FASTA(vcfs_to_normalize, reference) + PANGOLIN_LINEAGE(VCF2FASTA.out) + } } else if (input_fastas) { - // pangolin from fasta - PANGOLIN_LINEAGE(input_fastas) + if (!params.skip_pangolin) { + // pangolin from fasta + PANGOLIN_LINEAGE(input_fastas) + } // assembly variant calling VARIANT_CALLING_ASSEMBLY(input_fastas, reference) diff --git a/nextflow.config b/nextflow.config index e4051ae..dfe5185 100644 --- a/nextflow.config +++ b/nextflow.config @@ -111,6 +111,7 @@ Optional input: * --skip_gatk: skips calling variants with GATK * --skip_bcftools: skips calling variants with BCFTools * --skip_ivar: skips calling variants with iVar + * --skip_pangolin: skips lineage determination with pangolin * --match_score: global alignment match score, only applicable for assemblies (default: 2) * --mismatch_score: global alignment mismatch score, only applicable for assemblies (default: -1) * --open_gap_score: global alignment open gap score, only applicable for assemblies (default: -3) From 5b50b6425a1bc6ca860ad2697c700697168e4165 Mon Sep 17 00:00:00 2001 From: Pablo Riesgo Ferreiro Date: Tue, 1 Nov 2022 19:08:42 +0100 Subject: [PATCH 12/12] change conda channels order --- .github/workflows/automated_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/automated_tests.yml b/.github/workflows/automated_tests.yml index d48552a..9878af9 100644 --- a/.github/workflows/automated_tests.yml +++ b/.github/workflows/automated_tests.yml @@ -15,7 +15,7 @@ jobs: - uses: conda-incubator/setup-miniconda@v2 with: auto-update-conda: true - channels: defaults,conda-forge,bioconda + channels: conda-forge,bioconda,defaults - name: Install dependencies run: | apt-get update && apt-get --assume-yes install wget build-essential procps software-properties-common libgsl0-dev