From 019ddfa86262cf14c59349c1731802b6296bdaed Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 13:20:30 +0200 Subject: [PATCH 01/38] massive modules conda update --- modules.json | 217 +-- modules/nf-core/ascat/environment.yml | 2 - modules/nf-core/ascat/meta.yml | 220 +-- .../bcftools/annotate/bcftools-annotate.diff | 29 +- .../nf-core/bcftools/annotate/environment.yml | 2 - modules/nf-core/bcftools/annotate/main.nf | 18 +- modules/nf-core/bcftools/annotate/meta.yml | 87 +- .../bcftools/annotate/tests/bcf.config | 8 +- .../bcftools/annotate/tests/main.nf.test | 277 +++- .../bcftools/annotate/tests/main.nf.test.snap | 319 +++- .../bcftools/annotate/tests/vcf.config | 6 +- .../annotate/tests/vcf_gz_index.config | 4 + .../annotate/tests/vcf_gz_index_csi.config | 4 + .../annotate/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/concat/environment.yml | 2 - modules/nf-core/bcftools/concat/main.nf | 17 +- modules/nf-core/bcftools/concat/meta.yml | 75 +- .../bcftools/concat/tests/main.nf.test | 247 ++- .../bcftools/concat/tests/main.nf.test.snap | 306 +++- .../bcftools/concat/tests/vcf_gz_index.config | 4 + .../concat/tests/vcf_gz_index_csi.config | 4 + .../concat/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/mpileup/environment.yml | 2 - modules/nf-core/bcftools/mpileup/meta.yml | 109 +- .../bcftools/mpileup/tests/main.nf.test | 28 +- modules/nf-core/bcftools/sort/environment.yml | 2 - modules/nf-core/bcftools/sort/main.nf | 13 +- modules/nf-core/bcftools/sort/meta.yml | 65 +- .../nf-core/bcftools/sort/tests/main.nf.test | 174 ++- .../bcftools/sort/tests/main.nf.test.snap | 286 +++- .../bcftools/sort/tests/vcf_gz_index.config | 4 + .../sort/tests/vcf_gz_index_csi.config | 4 + .../sort/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/stats/environment.yml | 2 - modules/nf-core/bcftools/stats/meta.yml | 124 +- modules/nf-core/bwa/index/environment.yml | 2 - modules/nf-core/bwa/index/meta.yml | 43 +- modules/nf-core/bwa/mem/environment.yml | 6 +- modules/nf-core/bwa/mem/meta.yml | 113 +- modules/nf-core/bwa/mem/tests/main.nf.test | 139 +- .../nf-core/bwa/mem/tests/main.nf.test.snap | 203 ++- modules/nf-core/bwamem2/index/environment.yml | 2 - modules/nf-core/bwamem2/index/meta.yml | 41 +- modules/nf-core/bwamem2/mem/environment.yml | 6 +- modules/nf-core/bwamem2/mem/meta.yml | 137 +- .../nf-core/bwamem2/mem/tests/main.nf.test | 99 +- .../bwamem2/mem/tests/main.nf.test.snap | 108 +- modules/nf-core/cat/cat/environment.yml | 2 - modules/nf-core/cat/cat/main.nf | 1 - modules/nf-core/cat/cat/meta.yml | 39 +- modules/nf-core/cat/cat/tests/main.nf.test | 27 +- .../nf-core/cat/cat/tests/main.nf.test.snap | 74 +- modules/nf-core/cat/fastq/environment.yml | 2 - modules/nf-core/cat/fastq/main.nf | 10 +- modules/nf-core/cat/fastq/meta.yml | 43 +- modules/nf-core/cat/fastq/tests/main.nf.test | 136 +- .../nf-core/cat/fastq/tests/main.nf.test.snap | 207 +++ .../nf-core/cnvkit/antitarget/environment.yml | 2 - modules/nf-core/cnvkit/antitarget/meta.yml | 43 +- .../cnvkit/antitarget/tests/main.nf.test | 3 +- .../cnvkit/antitarget/tests/main.nf.test.snap | 46 +- modules/nf-core/cnvkit/batch/environment.yml | 7 +- modules/nf-core/cnvkit/batch/meta.yml | 191 ++- .../nf-core/cnvkit/batch/tests/main.nf.test | 105 +- .../cnvkit/batch/tests/main.nf.test.snap | 87 +- modules/nf-core/cnvkit/call/environment.yml | 2 - modules/nf-core/cnvkit/call/main.nf | 11 + modules/nf-core/cnvkit/call/meta.yml | 56 +- .../nf-core/cnvkit/call/tests/main.nf.test | 83 + .../cnvkit/call/tests/main.nf.test.snap | 107 ++ modules/nf-core/cnvkit/export/environment.yml | 2 - modules/nf-core/cnvkit/export/meta.yml | 47 +- .../cnvkit/genemetrics/environment.yml | 2 - modules/nf-core/cnvkit/genemetrics/main.nf | 0 modules/nf-core/cnvkit/genemetrics/meta.yml | 63 +- .../cnvkit/genemetrics/tests/main.nf.test | 59 + .../genemetrics/tests/main.nf.test.snap | 72 + .../nf-core/cnvkit/reference/environment.yml | 2 - modules/nf-core/cnvkit/reference/meta.yml | 45 +- .../cnvkit/reference/tests/main.nf.test | 3 +- .../cnvkit/reference/tests/main.nf.test.snap | 29 +- .../controlfreec-assesssignificance.diff | 55 +- .../assesssignificance/environment.yml | 2 - .../controlfreec/assesssignificance/meta.yml | 63 +- .../tests/main.nf.test.snap | 14 +- .../controlfreec/freec/environment.yml | 2 - modules/nf-core/controlfreec/freec/meta.yml | 307 ++-- .../controlfreec/freec/tests/main.nf.test | 8 +- .../freec/tests/main.nf.test.snap | 25 +- .../controlfreec/freec2bed/environment.yml | 2 - .../nf-core/controlfreec/freec2bed/meta.yml | 48 +- .../controlfreec/freec2circos/environment.yml | 2 - .../controlfreec/freec2circos/meta.yml | 48 +- .../controlfreec/makegraph2/environment.yml | 2 - .../nf-core/controlfreec/makegraph2/meta.yml | 82 +- modules/nf-core/deepvariant/README.md | 9 - .../nf-core/deepvariant/callvariants/main.nf | 58 + .../nf-core/deepvariant/callvariants/meta.yml | 48 + .../callvariants/tests/main.nf.test | 85 + .../callvariants/tests/main.nf.test.snap | 59 + .../callvariants/tests/nextflow.config | 11 + .../deepvariant/callvariants/tests/tags.yml | 2 + .../nf-core/deepvariant/makeexamples/main.nf | 66 + .../nf-core/deepvariant/makeexamples/meta.yml | 102 ++ .../makeexamples/tests/main.nf.test | 228 +++ .../makeexamples/tests/main.nf.test.snap | 134 ++ .../makeexamples/tests/nextflow.config | 6 + .../deepvariant/makeexamples/tests/tags.yml | 2 + modules/nf-core/deepvariant/meta.yml | 83 - .../deepvariant/postprocessvariants/main.nf | 77 + .../deepvariant/postprocessvariants/meta.yml | 113 ++ .../postprocessvariants/tests/main.nf.test | 118 ++ .../tests/main.nf.test.snap | 180 +++ .../postprocessvariants/tests/nextflow.config | 10 + .../postprocessvariants/tests/tags.yml | 2 + .../deepvariant/{ => rundeepvariant}/main.nf | 23 +- .../deepvariant/rundeepvariant/meta.yml | 122 ++ .../{ => rundeepvariant}/tests/main.nf.test | 55 +- .../rundeepvariant/tests/main.nf.test.snap | 358 +++++ .../tests/nextflow-intervals.config | 2 +- .../nextflow-non-autosomal-calling.config | 8 + .../tests/nextflow.config | 2 +- .../deepvariant/rundeepvariant/tests/tags.yml | 2 + .../deepvariant/tests/main.nf.test.snap | 269 ---- modules/nf-core/deepvariant/tests/tags.yml | 2 - .../nf-core/dragmap/align/dragmap-align.diff | 20 +- modules/nf-core/dragmap/align/environment.yml | 6 +- modules/nf-core/dragmap/align/meta.yml | 128 +- .../dragmap/hashtable/dragmap-hashtable.diff | 10 +- .../nf-core/dragmap/hashtable/environment.yml | 2 - modules/nf-core/dragmap/hashtable/meta.yml | 41 +- .../ensemblvep/download/environment.yml | 4 +- modules/nf-core/ensemblvep/download/main.nf | 4 +- modules/nf-core/ensemblvep/download/meta.yml | 56 +- .../ensemblvep/download/tests/main.nf.test | 4 +- .../download/tests/main.nf.test.snap | 444 +++--- .../ensemblvep/download/tests/nextflow.config | 2 +- .../nf-core/ensemblvep/vep/environment.yml | 4 +- modules/nf-core/ensemblvep/vep/main.nf | 8 +- modules/nf-core/ensemblvep/vep/meta.yml | 148 +- .../nf-core/ensemblvep/vep/tests/main.nf.test | 6 +- .../ensemblvep/vep/tests/main.nf.test.snap | 12 +- .../ensemblvep/vep/tests/nextflow.config | 2 +- modules/nf-core/fastp/environment.yml | 2 - modules/nf-core/fastp/main.nf | 21 +- modules/nf-core/fastp/meta.yml | 134 +- modules/nf-core/fastp/tests/main.nf.test | 823 ++++------ modules/nf-core/fastp/tests/main.nf.test.snap | 1361 ++++++++++++++--- modules/nf-core/fastqc/meta.yml | 57 +- .../environment.yml | 4 +- .../fgbio/callmolecularconsensusreads/main.nf | 41 +- .../callmolecularconsensusreads/meta.yml | 54 +- .../tests/main.nf.test | 72 + .../tests/main.nf.test.snap | 68 + .../tests/sort.config | 6 + .../tests/tags.yml | 2 + .../nf-core/fgbio/fastqtobam/environment.yml | 4 +- modules/nf-core/fgbio/fastqtobam/main.nf | 27 +- modules/nf-core/fgbio/fastqtobam/meta.yml | 55 +- .../fgbio/fastqtobam/tests/main.nf.test | 28 +- .../fgbio/fastqtobam/tests/main.nf.test.snap | 56 +- .../fgbio/groupreadsbyumi/environment.yml | 4 +- modules/nf-core/fgbio/groupreadsbyumi/main.nf | 47 +- .../nf-core/fgbio/groupreadsbyumi/meta.yml | 73 +- .../fgbio/groupreadsbyumi/tests/main.nf.test | 60 + .../groupreadsbyumi/tests/main.nf.test.snap | 108 ++ .../fgbio/groupreadsbyumi/tests/tags.yml | 2 + modules/nf-core/freebayes/environment.yml | 2 - modules/nf-core/freebayes/meta.yml | 178 +-- modules/nf-core/freebayes/tests/main.nf.test | 101 +- .../nf-core/freebayes/tests/main.nf.test.snap | 96 +- .../nf-core/gatk4/applybqsr/environment.yml | 2 - modules/nf-core/gatk4/applybqsr/meta.yml | 101 +- .../nf-core/gatk4/applyvqsr/environment.yml | 2 - modules/nf-core/gatk4/applyvqsr/meta.yml | 107 +- .../gatk4/baserecalibrator/environment.yml | 2 - .../nf-core/gatk4/baserecalibrator/meta.yml | 99 +- .../calculatecontamination/environment.yml | 2 - .../gatk4/calculatecontamination/meta.yml | 61 +- .../nf-core/gatk4/cnnscorevariants/meta.yml | 119 +- .../createsequencedictionary/environment.yml | 2 - .../gatk4/createsequencedictionary/meta.yml | 37 +- .../estimatelibrarycomplexity/environment.yml | 2 - .../gatk4/estimatelibrarycomplexity/meta.yml | 69 +- .../gatk4/filtermutectcalls/environment.yml | 2 - .../nf-core/gatk4/filtermutectcalls/meta.yml | 162 +- .../filtervarianttranches/environment.yml | 2 - .../gatk4/filtervarianttranches/meta.yml | 110 +- .../gatk4/gatherbqsrreports/environment.yml | 2 - .../nf-core/gatk4/gatherbqsrreports/meta.yml | 43 +- .../gatherbqsrreports/tests/main.nf.test | 60 + .../gatherbqsrreports/tests/main.nf.test.snap | 72 + .../gatherpileupsummaries/environment.yml | 2 - .../gatk4/gatherpileupsummaries/main.nf | 2 +- .../gatk4/gatherpileupsummaries/meta.yml | 46 +- .../gatherpileupsummaries/tests/main.nf.test | 37 + .../tests/main.nf.test.snap | 37 + .../tests/nextflow.config | 5 + .../gatk4/genomicsdbimport/environment.yml | 2 - .../nf-core/gatk4/genomicsdbimport/meta.yml | 139 +- .../gatk4/genomicsdbimport/tests/main.nf.test | 41 +- .../genomicsdbimport/tests/main.nf.test.snap | 92 +- .../gatk4/genotypegvcfs/environment.yml | 2 - modules/nf-core/gatk4/genotypegvcfs/main.nf | 18 +- modules/nf-core/gatk4/genotypegvcfs/meta.yml | 145 +- .../gatk4/genotypegvcfs/tests/main.nf.test | 285 ++++ .../genotypegvcfs/tests/main.nf.test.snap | 191 +++ .../gatk4/getpileupsummaries/environment.yml | 2 - .../nf-core/gatk4/getpileupsummaries/meta.yml | 128 +- .../gatk4/haplotypecaller/environment.yml | 2 - modules/nf-core/gatk4/haplotypecaller/main.nf | 1 + .../nf-core/gatk4/haplotypecaller/meta.yml | 178 ++- .../gatk4/haplotypecaller/tests/main.nf.test | 86 +- .../haplotypecaller/tests/main.nf.test.snap | 88 +- .../gatk4/intervallisttobed/environment.yml | 2 - .../nf-core/gatk4/intervallisttobed/meta.yml | 42 +- .../learnreadorientationmodel/environment.yml | 2 - .../gatk4/learnreadorientationmodel/meta.yml | 37 +- .../tests/main.nf.test | 38 + .../tests/main.nf.test.snap | 21 + .../tests/nextflow.config | 5 + .../gatk4/markduplicates/environment.yml | 5 +- modules/nf-core/gatk4/markduplicates/meta.yml | 121 +- .../gatk4/mergemutectstats/environment.yml | 2 - .../nf-core/gatk4/mergemutectstats/meta.yml | 45 +- .../nf-core/gatk4/mergevcfs/environment.yml | 2 - modules/nf-core/gatk4/mergevcfs/meta.yml | 66 +- modules/nf-core/gatk4/mutect2/environment.yml | 2 - modules/nf-core/gatk4/mutect2/meta.yml | 175 ++- .../nf-core/gatk4/mutect2/tests/main.nf.test | 124 +- .../gatk4/variantrecalibrator/environment.yml | 2 - .../gatk4/variantrecalibrator/meta.yml | 132 +- .../gatk4spark/applybqsr/environment.yml | 2 - modules/nf-core/gatk4spark/applybqsr/meta.yml | 101 +- .../baserecalibrator/environment.yml | 2 - .../gatk4spark/baserecalibrator/meta.yml | 99 +- .../gatk4spark/markduplicates/environment.yml | 2 - .../gatk4spark/markduplicates/meta.yml | 99 +- modules/nf-core/gawk/environment.yml | 2 - modules/nf-core/gawk/meta.yml | 56 +- .../lofreq/callparallel/environment.yml | 2 - modules/nf-core/lofreq/callparallel/meta.yml | 113 +- .../nf-core/manta/germline/environment.yml | 2 - modules/nf-core/manta/germline/meta.yml | 175 ++- modules/nf-core/manta/somatic/environment.yml | 2 - modules/nf-core/manta/somatic/meta.yml | 215 ++- .../nf-core/manta/tumoronly/environment.yml | 2 - modules/nf-core/manta/tumoronly/meta.yml | 175 ++- modules/nf-core/mosdepth/environment.yml | 2 - modules/nf-core/mosdepth/meta.yml | 214 ++- modules/nf-core/mosdepth/tests/main.nf.test | 50 +- .../msisensorpro/msisomatic/environment.yml | 2 - .../nf-core/msisensorpro/msisomatic/meta.yml | 131 +- .../nf-core/msisensorpro/scan/environment.yml | 2 - modules/nf-core/msisensorpro/scan/main.nf | 11 + modules/nf-core/msisensorpro/scan/meta.yml | 52 +- .../msisensorpro/scan/tests/main.nf.test | 58 + .../msisensorpro/scan/tests/main.nf.test.snap | 72 + modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 78 +- modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + .../nf-core/ngscheckmate/ncm/environment.yml | 2 - modules/nf-core/ngscheckmate/ncm/meta.yml | 133 +- .../ngscheckmate/ncm/tests/main.nf.test | 76 +- .../ngscheckmate/ncm/tests/main.nf.test.snap | 31 +- modules/nf-core/samblaster/environment.yml | 3 - modules/nf-core/samblaster/meta.yml | 45 +- modules/nf-core/samblaster/tests/main.nf.test | 11 +- .../samblaster/tests/main.nf.test.snap | 35 +- .../nf-core/samtools/bam2fq/environment.yml | 5 +- modules/nf-core/samtools/bam2fq/main.nf | 4 +- modules/nf-core/samtools/bam2fq/meta.yml | 65 +- .../samtools/bam2fq/tests/main.nf.test.snap | 16 +- .../samtools/collatefastq/environment.yml | 5 +- modules/nf-core/samtools/collatefastq/main.nf | 37 +- .../nf-core/samtools/collatefastq/meta.yml | 125 +- .../samtools/collatefastq/tests/main.nf.test | 242 +++ .../collatefastq/tests/main.nf.test.snap | 194 +++ .../samtools/collatefastq/tests/tags.yml | 2 + .../nf-core/samtools/convert/environment.yml | 5 +- modules/nf-core/samtools/convert/main.nf | 4 +- modules/nf-core/samtools/convert/meta.yml | 111 +- .../samtools/convert/tests/main.nf.test.snap | 26 +- .../nf-core/samtools/faidx/environment.yml | 7 +- modules/nf-core/samtools/faidx/main.nf | 4 +- modules/nf-core/samtools/faidx/meta.yml | 85 +- .../samtools/faidx/tests/main.nf.test.snap | 50 +- .../nf-core/samtools/index/environment.yml | 5 +- modules/nf-core/samtools/index/main.nf | 11 +- modules/nf-core/samtools/index/meta.yml | 68 +- .../nf-core/samtools/index/tests/main.nf.test | 87 +- .../samtools/index/tests/main.nf.test.snap | 264 +++- .../nf-core/samtools/merge/environment.yml | 5 +- modules/nf-core/samtools/merge/main.nf | 4 +- modules/nf-core/samtools/merge/meta.yml | 117 +- .../samtools/merge/tests/main.nf.test.snap | 32 +- .../nf-core/samtools/mpileup/environment.yml | 5 +- modules/nf-core/samtools/mpileup/main.nf | 4 +- modules/nf-core/samtools/mpileup/meta.yml | 59 +- .../samtools/mpileup/tests/main.nf.test.snap | 16 +- .../nf-core/samtools/stats/environment.yml | 5 +- modules/nf-core/samtools/stats/main.nf | 4 +- modules/nf-core/samtools/stats/meta.yml | 69 +- .../nf-core/samtools/stats/tests/main.nf.test | 60 +- .../samtools/stats/tests/main.nf.test.snap | 98 +- modules/nf-core/samtools/view/environment.yml | 5 +- modules/nf-core/samtools/view/main.nf | 44 +- modules/nf-core/samtools/view/meta.yml | 158 +- .../nf-core/samtools/view/tests/main.nf.test | 2 + .../samtools/view/tests/main.nf.test.snap | 88 +- .../sentieon/applyvarcal/environment.yml | 2 - modules/nf-core/sentieon/applyvarcal/main.nf | 50 +- modules/nf-core/sentieon/applyvarcal/meta.yml | 126 +- .../nf-core/sentieon/bwamem/environment.yml | 2 - modules/nf-core/sentieon/bwamem/main.nf | 67 +- modules/nf-core/sentieon/bwamem/meta.yml | 106 +- .../sentieon/bwamem/tests/main.nf.test | 262 ++++ .../sentieon/bwamem/tests/main.nf.test.snap | 187 +++ .../sentieon/bwamem/tests/nextflow.config | 15 + .../bwamem/tests/nextflow_out_cram.config | 16 + .../nf-core/sentieon/bwamem/tests/tags.yml | 2 + .../nf-core/sentieon/dedup/environment.yml | 2 - modules/nf-core/sentieon/dedup/main.nf | 72 +- modules/nf-core/sentieon/dedup/meta.yml | 164 +- .../nf-core/sentieon/dedup/tests/main.nf.test | 90 ++ .../sentieon/dedup/tests/main.nf.test.snap | 359 +++++ .../sentieon/dedup/tests/nextflow.config | 9 + .../dedup/tests/nextflow_rmdup.config | 15 + .../sentieon/dnamodelapply/environment.yml | 2 - .../nf-core/sentieon/dnamodelapply/main.nf | 51 +- .../nf-core/sentieon/dnamodelapply/meta.yml | 119 +- .../nf-core/sentieon/dnascope/environment.yml | 2 - modules/nf-core/sentieon/dnascope/main.nf | 50 +- modules/nf-core/sentieon/dnascope/meta.yml | 213 +-- .../sentieon/gvcftyper/environment.yml | 2 - modules/nf-core/sentieon/gvcftyper/main.nf | 61 +- modules/nf-core/sentieon/gvcftyper/meta.yml | 130 +- .../sentieon/gvcftyper/tests/main.nf.test | 212 +++ .../gvcftyper/tests/main.nf.test.snap | 121 ++ .../sentieon/gvcftyper/tests/nextflow.config | 15 + .../sentieon/haplotyper/environment.yml | 2 - modules/nf-core/sentieon/haplotyper/main.nf | 102 +- modules/nf-core/sentieon/haplotyper/meta.yml | 164 +- .../sentieon/haplotyper/tests/main.nf.test | 327 ++++ .../haplotyper/tests/main.nf.test.snap | 187 +++ .../sentieon/haplotyper/tests/nextflow.config | 16 + .../sentieon/haplotyper/tests/tags.yml | 2 + .../nf-core/sentieon/varcal/environment.yml | 2 - modules/nf-core/sentieon/varcal/main.nf | 51 +- modules/nf-core/sentieon/varcal/meta.yml | 123 +- .../nf-core/snpeff/download/environment.yml | 2 - modules/nf-core/snpeff/download/main.nf | 9 +- modules/nf-core/snpeff/download/meta.yml | 44 +- .../snpeff/download/tests/main.nf.test | 51 + .../snpeff/download/tests/main.nf.test.snap | 100 ++ modules/nf-core/snpeff/snpeff/environment.yml | 2 - modules/nf-core/snpeff/snpeff/meta.yml | 96 +- .../nf-core/snpeff/snpeff/tests/main.nf.test | 5 +- .../snpeff/snpeff/tests/nextflow.config | 3 +- .../nf-core/spring/decompress/environment.yml | 2 - modules/nf-core/spring/decompress/meta.yml | 58 +- .../spring/decompress/test/main.nf.test | 78 + .../spring/decompress/test/main.nf.test.snap | 74 + .../spring/decompress/test/nextflow.config | 5 + .../nf-core/spring/decompress/test/tags.yml | 3 + .../nf-core/strelka/germline/environment.yml | 2 - modules/nf-core/strelka/germline/meta.yml | 125 +- .../strelka/germline/tests/main.nf.test | 4 +- .../strelka/germline/tests/main.nf.test.snap | 26 +- .../nf-core/strelka/germline/tests/tags.yml | 2 - .../nf-core/strelka/somatic/environment.yml | 2 - modules/nf-core/strelka/somatic/meta.yml | 158 +- modules/nf-core/svdb/merge/environment.yml | 8 +- modules/nf-core/svdb/merge/meta.yml | 52 +- .../nf-core/tabix/bgziptabix/environment.yml | 5 +- modules/nf-core/tabix/bgziptabix/main.nf | 6 +- modules/nf-core/tabix/bgziptabix/meta.yml | 70 +- .../tabix/bgziptabix/tests/main.nf.test | 6 +- .../tabix/bgziptabix/tests/main.nf.test.snap | 50 +- modules/nf-core/tabix/tabix/environment.yml | 5 +- modules/nf-core/tabix/tabix/main.nf | 11 +- modules/nf-core/tabix/tabix/meta.yml | 55 +- .../nf-core/tabix/tabix/tests/main.nf.test | 44 +- .../tabix/tabix/tests/main.nf.test.snap | 111 +- modules/nf-core/tiddit/sv/environment.yml | 2 - modules/nf-core/tiddit/sv/meta.yml | 99 +- modules/nf-core/untar/environment.yml | 6 +- modules/nf-core/untar/main.nf | 29 +- modules/nf-core/untar/meta.yml | 43 +- modules/nf-core/untar/tests/main.nf.test | 44 +- modules/nf-core/untar/tests/main.nf.test.snap | 152 +- modules/nf-core/unzip/environment.yml | 2 - modules/nf-core/unzip/main.nf | 14 +- modules/nf-core/unzip/meta.yml | 46 +- modules/nf-core/unzip/tests/main.nf.test | 54 + modules/nf-core/unzip/tests/main.nf.test.snap | 76 + modules/nf-core/unzip/tests/tags.yml | 2 + modules/nf-core/vcftools/environment.yml | 2 - modules/nf-core/vcftools/main.nf | 64 + modules/nf-core/vcftools/meta.yml | 822 +++++++--- .../nf-core/vcftools/tests/main.nf.test.snap | 888 +++++++++-- subworkflows/nf-core/bam_ngscheckmate/main.nf | 1 - 405 files changed, 19492 insertions(+), 7806 deletions(-) create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/concat/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/sort/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/cnvkit/call/tests/main.nf.test create mode 100644 modules/nf-core/cnvkit/call/tests/main.nf.test.snap mode change 100755 => 100644 modules/nf-core/cnvkit/genemetrics/main.nf mode change 100755 => 100644 modules/nf-core/cnvkit/genemetrics/meta.yml create mode 100644 modules/nf-core/cnvkit/genemetrics/tests/main.nf.test create mode 100644 modules/nf-core/cnvkit/genemetrics/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/README.md create mode 100644 modules/nf-core/deepvariant/callvariants/main.nf create mode 100644 modules/nf-core/deepvariant/callvariants/meta.yml create mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/callvariants/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/callvariants/tests/tags.yml create mode 100644 modules/nf-core/deepvariant/makeexamples/main.nf create mode 100644 modules/nf-core/deepvariant/makeexamples/meta.yml create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/meta.yml create mode 100644 modules/nf-core/deepvariant/postprocessvariants/main.nf create mode 100644 modules/nf-core/deepvariant/postprocessvariants/meta.yml create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml rename modules/nf-core/deepvariant/{ => rundeepvariant}/main.nf (71%) create mode 100644 modules/nf-core/deepvariant/rundeepvariant/meta.yml rename modules/nf-core/deepvariant/{ => rundeepvariant}/tests/main.nf.test (67%) create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap rename modules/nf-core/deepvariant/{ => rundeepvariant}/tests/nextflow-intervals.config (70%) create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config rename modules/nf-core/deepvariant/{ => rundeepvariant}/tests/nextflow.config (75%) create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/tests/tags.yml create mode 100644 modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test create mode 100644 modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test.snap create mode 100644 modules/nf-core/fgbio/callmolecularconsensusreads/tests/sort.config create mode 100644 modules/nf-core/fgbio/callmolecularconsensusreads/tests/tags.yml create mode 100644 modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test create mode 100644 modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test.snap create mode 100644 modules/nf-core/fgbio/groupreadsbyumi/tests/tags.yml create mode 100644 modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/gatherpileupsummaries/tests/nextflow.config create mode 100644 modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/learnreadorientationmodel/tests/nextflow.config create mode 100644 modules/nf-core/msisensorpro/scan/tests/main.nf.test create mode 100644 modules/nf-core/msisensorpro/scan/tests/main.nf.test.snap create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 modules/nf-core/samtools/collatefastq/tests/main.nf.test create mode 100644 modules/nf-core/samtools/collatefastq/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/collatefastq/tests/tags.yml create mode 100644 modules/nf-core/sentieon/bwamem/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/bwamem/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config create mode 100644 modules/nf-core/sentieon/bwamem/tests/tags.yml create mode 100644 modules/nf-core/sentieon/dedup/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/dedup/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/dedup/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config create mode 100644 modules/nf-core/sentieon/gvcftyper/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/gvcftyper/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/gvcftyper/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/haplotyper/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/haplotyper/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/haplotyper/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/haplotyper/tests/tags.yml create mode 100644 modules/nf-core/snpeff/download/tests/main.nf.test create mode 100644 modules/nf-core/snpeff/download/tests/main.nf.test.snap create mode 100644 modules/nf-core/spring/decompress/test/main.nf.test create mode 100644 modules/nf-core/spring/decompress/test/main.nf.test.snap create mode 100644 modules/nf-core/spring/decompress/test/nextflow.config create mode 100644 modules/nf-core/spring/decompress/test/tags.yml delete mode 100644 modules/nf-core/strelka/germline/tests/tags.yml create mode 100644 modules/nf-core/unzip/tests/main.nf.test create mode 100644 modules/nf-core/unzip/tests/main.nf.test.snap create mode 100644 modules/nf-core/unzip/tests/tags.yml diff --git a/modules.json b/modules.json index 8862eab99c..1db9d1ba15 100644 --- a/modules.json +++ b/modules.json @@ -7,501 +7,516 @@ "nf-core": { "ascat": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/annotate": { "branch": "master", - "git_sha": "a5ba4d59c2b248c0379b0f8aeb4e7e754566cd1f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/bcftools/annotate/bcftools-annotate.diff" }, "bcftools/concat": { "branch": "master", - "git_sha": "a5ba4d59c2b248c0379b0f8aeb4e7e754566cd1f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/mpileup": { "branch": "master", - "git_sha": "a5ba4d59c2b248c0379b0f8aeb4e7e754566cd1f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["bam_ngscheckmate"] }, "bcftools/sort": { "branch": "master", - "git_sha": "a5ba4d59c2b248c0379b0f8aeb4e7e754566cd1f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/stats": { "branch": "master", - "git_sha": "a5ba4d59c2b248c0379b0f8aeb4e7e754566cd1f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "086fa66260595e123b0ea47a6512539b72a9afa3", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwa/mem": { "branch": "master", - "git_sha": "0c34b8159f62cde451c4ff249629c9d0a4f3f9c3", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", - "git_sha": "7081e04c18de9480948d34513a1c1e2d0fa9126d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", - "git_sha": "3afb95b2e15fc4a2347470255a7ef654f650c8ec", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "4fc983ad0b30e6e32696fa7d980c76c7bfe1c03e", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvkit/antitarget": { "branch": "master", - "git_sha": "7d8eff8f0cbc20cb83ce624e86c58ede51397054", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvkit/batch": { "branch": "master", - "git_sha": "f53b071421340e6fac0806c86ba030e578e94826", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvkit/call": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvkit/export": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvkit/genemetrics": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvkit/reference": { "branch": "master", - "git_sha": "f8693ff46b884892982d658271ed260380111c53", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "controlfreec/assesssignificance": { "branch": "master", - "git_sha": "e6c5689c1d4c7f255a7cc042b0a2fa25a9b3c4fa", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/controlfreec/assesssignificance/controlfreec-assesssignificance.diff" }, "controlfreec/freec": { "branch": "master", - "git_sha": "7b5827ac89358ad6dd3e8f328f6d1427d7f14a68", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "controlfreec/freec2bed": { "branch": "master", - "git_sha": "0c7fd5488d43188ee801c800461d259389d34c19", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "controlfreec/freec2circos": { "branch": "master", - "git_sha": "b626cd7bf99db4f42de314ee8b70d1c389a7b9f4", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "controlfreec/makegraph2": { "branch": "master", - "git_sha": "c3f338377c177a01847eeea2f77da33ce89f92e6", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, - "deepvariant": { + "deepvariant/callvariants": { "branch": "master", - "git_sha": "199ba086a259e1933d6e0ab7596e4a977bbd483a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "deepvariant/makeexamples": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "deepvariant/postprocessvariants": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "deepvariant/rundeepvariant": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "dragmap/align": { "branch": "master", - "git_sha": "dd2757cc22c5de8943fa38ba7cd6f8cc1eb65ac1", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/dragmap/align/dragmap-align.diff" }, "dragmap/hashtable": { "branch": "master", - "git_sha": "ae9e01cb5e77faada314047e78423b22b4f5bbc5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/dragmap/hashtable/dragmap-hashtable.diff" }, "ensemblvep/download": { "branch": "master", - "git_sha": "3db4f8488315cd7d7cf3fcb64251f6603210e831", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", - "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules", "vcf_annotate_ensemblvep"] }, "fastp": { "branch": "master", - "git_sha": "95cf5fe0194c7bf5cb0e3027a2eb7e7c89385080", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fgbio/callmolecularconsensusreads": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fgbio/fastqtobam": { "branch": "master", - "git_sha": "19f81cab3b2a08f37c4f3727ddb30c01ebf07be6", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fgbio/groupreadsbyumi": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "freebayes": { "branch": "master", - "git_sha": "77978839bef6d437f21edb900b49bcbc04f9f735", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/applybqsr": { "branch": "master", - "git_sha": "af273ea6618c50e82c372abe18b0a225e84fe6f7", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/applyvqsr": { "branch": "master", - "git_sha": "cee8fe33d3ef1a220dee67dac75a32f7c872f63f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/baserecalibrator": { "branch": "master", - "git_sha": "8a223e11d4e6deb36484e01891eae9c1cacb5f5d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/calculatecontamination": { "branch": "master", - "git_sha": "77ffba959bbe8b6e1d95d47688075d113e24f0d4", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/cnnscorevariants": { "branch": "master", - "git_sha": "60a7dbae179bcfa24c10294cc9a07423a239c19a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "e6fe277739f5894711405af3e717b2470bd956b5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/estimatelibrarycomplexity": { "branch": "master", - "git_sha": "1943aa60f7490c3d6740e8872e6e69122ccc8087", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "7d814815f638e1483995b24a23f5f23229036bbf", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/filtervarianttranches": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/gatherbqsrreports": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/gatherpileupsummaries": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/genomicsdbimport": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/genotypegvcfs": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/getpileupsummaries": { "branch": "master", - "git_sha": "b632dcbf8bd3d7b9cb22fd0b2416e9e6cb8f4045", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/haplotypecaller": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/intervallisttobed": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/learnreadorientationmodel": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/markduplicates": { "branch": "master", - "git_sha": "194fca815cf594646e638fa5476acbcc296f1850", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/mergemutectstats": { "branch": "master", - "git_sha": "cafe91148ca110e52ceaa07f3e373b882800d04b", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "194fca815cf594646e638fa5476acbcc296f1850", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "5fd04feb37b58caa6a54d41e38c80066bdf71056", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/variantrecalibrator": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4spark/applybqsr": { "branch": "master", - "git_sha": "3b928d02096f928ef224d89f2a502afaa6e06556", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4spark/baserecalibrator": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4spark/markduplicates": { "branch": "master", - "git_sha": "3b928d02096f928ef224d89f2a502afaa6e06556", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gawk": { "branch": "master", - "git_sha": "cf3ed075695639b0a0924eb0901146df1996dc08", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "lofreq/callparallel": { "branch": "master", - "git_sha": "bf918b32044472c9346ec3444d894c69700ced6d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "ebc1733b77c702f19fe42076a5edfcbaa0d84f66", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "manta/somatic": { "branch": "master", - "git_sha": "ab693fbb906b3a1151ad21e270129a9d48437ab6", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "manta/tumoronly": { "branch": "master", - "git_sha": "8731a6221dd10fd9039e18518b390b43e14ef9ae", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "e0616fba0919adb190bfe070d17fb12d76ba3a26", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "msisensorpro/msisomatic": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "msisensorpro/scan": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ngscheckmate/ncm": { "branch": "master", - "git_sha": "0e04b949c90e686c8b07495576832d78ab9210cf", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["bam_ngscheckmate"] }, "samblaster": { "branch": "master", - "git_sha": "310850152f3e1dec6ba28b28e1f1cb9ab8660a49", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/bam2fq": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/collatefastq": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/mpileup": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/applyvarcal": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/bwamem": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/dedup": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/dnamodelapply": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/dnascope": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/gvcftyper": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/haplotyper": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/varcal": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "snpeff/download": { "branch": "master", - "git_sha": "214d575774c172062924ad3564b4f66655600730", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "snpeff/snpeff": { "branch": "master", - "git_sha": "2f3db6f45147ebbb56b371536e31bdf622b5bfee", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules", "vcf_annotate_snpeff"] }, "spring/decompress": { "branch": "master", - "git_sha": "0a92fa8d17d9e3c411e01a0ce41a86eff02b1599", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "strelka/germline": { "branch": "master", - "git_sha": "e8f2c77a6e4174ee0a48d073d4cc8ff06c44bb4c", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "strelka/somatic": { "branch": "master", - "git_sha": "a626d7c63cb0ee675686a2f47b26cdc53266e186", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", - "git_sha": "ba3f3df395d2719dcef5c67189042a1dc555c701", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules", "vcf_annotate_snpeff"] }, "tabix/tabix": { "branch": "master", - "git_sha": "9502adb23c0b97ed8e616bbbdfa73b4585aec9a1", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules", "vcf_annotate_ensemblvep"] }, "tiddit/sv": { "branch": "master", - "git_sha": "6af4979ee1a57c986102175d9e1bb7ab834f3ae8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "unzip": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "vcftools": { "branch": "master", - "git_sha": "624ecdc43b72e0a45bf05d9b57215d18dcd538f8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -510,7 +525,7 @@ "nf-core": { "bam_ngscheckmate": { "branch": "master", - "git_sha": "cfd937a668919d948f6fcbf4218e79de50c2f36f", + "git_sha": "c60c14b285b89bdd0607e371417dadb80385ad6e", "installed_by": ["subworkflows"] }, "utils_nextflow_pipeline": { diff --git a/modules/nf-core/ascat/environment.yml b/modules/nf-core/ascat/environment.yml index 52935f0978..63d87708d6 100644 --- a/modules/nf-core/ascat/environment.yml +++ b/modules/nf-core/ascat/environment.yml @@ -1,8 +1,6 @@ -name: ascat channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ascat=3.1.1 - bioconda::cancerit-allelecount=4.3.0 diff --git a/modules/nf-core/ascat/meta.yml b/modules/nf-core/ascat/meta.yml index 34ea2e51d9..db7c92926a 100644 --- a/modules/nf-core/ascat/meta.yml +++ b/modules/nf-core/ascat/meta.yml @@ -6,105 +6,151 @@ keywords: - cram tools: - ascat: - description: ASCAT is a method to derive copy number profiles of tumour cells, accounting for normal cell admixture and tumour aneuploidy. ASCAT infers tumour purity (the fraction of tumour cells) and ploidy (the amount of DNA per tumour cell), expressed as multiples of haploid genomes from SNP array or massively parallel sequencing data, and calculates whole-genome allele-specific copy number profiles (the number of copies of both parental alleles for all SNP loci across the genome). + description: ASCAT is a method to derive copy number profiles of tumour cells, + accounting for normal cell admixture and tumour aneuploidy. ASCAT infers tumour + purity (the fraction of tumour cells) and ploidy (the amount of DNA per tumour + cell), expressed as multiples of haploid genomes from SNP array or massively + parallel sequencing data, and calculates whole-genome allele-specific copy number + profiles (the number of copies of both parental alleles for all SNP loci across + the genome). documentation: https://github.com/VanLoo-lab/ascat/tree/master/man tool_dev_url: https://github.com/VanLoo-lab/ascat doi: "10.1093/bioinformatics/btaa538" licence: ["GPL v3"] + identifier: biotools:ascat input: - - args: - type: map - description: | - Groovy Map containing tool parameters. MUST follow the structure/keywords below and be provided via modules.config. Parameters must be set between quotes. (optional) parameters can be removed from the map, if they are not set. For default values, please check the documentation above. - - ``` - { - [ - "gender": "XX", - "genomeVersion": "hg19" - "purity": (optional), - "ploidy": (optional), - "gc_files": (optional), - "minCounts": (optional), - "BED_file": (optional) but recommended for WES, - "chrom_names": (optional), - "min_base_qual": (optional), - "min_map_qual": (optional), - "ref_fasta": (optional), - "skip_allele_counting_tumour": (optional), - "skip_allele_counting_normal": (optional) - ] - } - ``` - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_normal: - type: file - description: BAM/CRAM file, must adhere to chr1, chr2, ...chrX notation For modifying chromosome notation in bam files please follow https://josephcckuo.wordpress.com/2016/11/17/modify-chromosome-notation-in-bam-file/. - pattern: "*.{bam,cram}" - - index_normal: - type: file - description: index for normal_bam/cram - pattern: "*.{bai,crai}" - - input_tumor: - type: file - description: BAM/CRAM file, must adhere to chr1, chr2, ...chrX notation - pattern: "*.{bam,cram}" - - index_tumor: - type: file - description: index for tumor_bam/cram - pattern: "*.{bai,crai}" - - allele_files: - type: file - description: allele files for ASCAT WGS. Can be downloaded here https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS - - loci_files: - type: file - description: loci files for ASCAT WGS. Loci files without chromosome notation can be downloaded here https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS Make sure the chromosome notation matches the bam/cram input files. To add the chromosome notation to loci files (hg19/hg38) if necessary, you can run this command `if [[ $(samtools view | head -n1 | cut -f3)\" == *\"chr\"* ]]; then for i in {1..22} X; do sed -i 's/^/chr/' G1000_loci_hg19_chr_${i}.txt; done; fi` - - bed_file: - type: file - description: Bed file for ASCAT WES (optional, but recommended for WES) - - fasta: - type: file - description: Reference fasta file (optional) - - gc_file: - type: file - description: GC correction file (optional) - Used to do logR correction of the tumour sample(s) with genomic GC content - - rt_file: - type: file - description: replication timing correction file (optional, provide only in combination with gc_file) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_normal: + type: file + description: BAM/CRAM file, must adhere to chr1, chr2, ...chrX notation For + modifying chromosome notation in bam files please follow + https://josephcckuo.wordpress.com/2016/11/17/modify-chromosome-notation-in-bam-file/. + pattern: "*.{bam,cram}" + - index_normal: + type: file + description: index for normal_bam/cram + pattern: "*.{bai,crai}" + - input_tumor: + type: file + description: BAM/CRAM file, must adhere to chr1, chr2, ...chrX notation + pattern: "*.{bam,cram}" + - index_tumor: + type: file + description: index for tumor_bam/cram + pattern: "*.{bai,crai}" + - - allele_files: + type: file + description: allele files for ASCAT WGS. Can be downloaded here https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS + - - loci_files: + type: file + description: loci files for ASCAT WGS. Loci files without chromosome notation + can be downloaded here https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS + Make sure the chromosome notation matches the bam/cram input files. To add + the chromosome notation to loci files (hg19/hg38) if necessary, you can run + this command `if [[ $(samtools view | head -n1 | cut -f3)\" + == *\"chr\"* ]]; then for i in {1..22} X; do sed -i 's/^/chr/' G1000_loci_hg19_chr_${i}.txt; + done; fi` + - - bed_file: + type: file + description: Bed file for ASCAT WES (optional, but recommended for WES) + - - fasta: + type: file + description: Reference fasta file (optional) + - - gc_file: + type: file + description: GC correction file (optional) - Used to do logR correction of the + tumour sample(s) with genomic GC content + - - rt_file: + type: file + description: replication timing correction file (optional, provide only in combination + with gc_file) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - allelefreqs: - type: file - description: Files containing allee frequencies per chromosome - pattern: "*{alleleFrequencies_chr*.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*alleleFrequencies_chr*.txt": + type: file + description: Files containing allee frequencies per chromosome + pattern: "*{alleleFrequencies_chr*.txt}" + - bafs: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*BAF.txt": + type: file + description: BAF file + - cnvs: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cnvs.txt": + type: file + description: CNV file + - logrs: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*LogR.txt": + type: file + description: LogR file - metrics: - type: file - description: File containing quality metrics - pattern: "*.{metrics.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*metrics.txt": + type: file + description: File containing quality metrics + pattern: "*.{metrics.txt}" - png: - type: file - description: ASCAT plots - pattern: "*.{png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*png": + type: file + description: ASCAT plots + pattern: "*.{png}" - purityploidy: - type: file - description: File with purity and ploidy data - pattern: "*.{purityploidy.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*purityploidy.txt": + type: file + description: File with purity and ploidy data + pattern: "*.{purityploidy.txt}" - segments: - type: file - description: File with segments data - pattern: "*.{segments.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*segments.txt": + type: file + description: File with segments data + pattern: "*.{segments.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@aasNGC" - "@lassefolkersen" diff --git a/modules/nf-core/bcftools/annotate/bcftools-annotate.diff b/modules/nf-core/bcftools/annotate/bcftools-annotate.diff index d15bf86b54..a9a8f03558 100644 --- a/modules/nf-core/bcftools/annotate/bcftools-annotate.diff +++ b/modules/nf-core/bcftools/annotate/bcftools-annotate.diff @@ -1,28 +1,29 @@ Changes in module 'nf-core/bcftools/annotate' +Changes in 'bcftools/annotate/main.nf': --- modules/nf-core/bcftools/annotate/main.nf +++ modules/nf-core/bcftools/annotate/main.nf -@@ -8,7 +8,10 @@ +@@ -8,8 +8,10 @@ 'biocontainers/bcftools:1.20--h8b25389_0' }" input: -- tuple val(meta), path(input), path(index), path(annotations), path(annotations_index), path(header_lines) -+ tuple val(meta), path(input) +- tuple val(meta), path(input), path(index), path(annotations), path(annotations_index) +- path(header_lines) ++ tuple val(meta), path(input), path(index) + path annotations + path annotations_index + path header_lines output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf -@@ -29,6 +32,10 @@ - "vcf" - if ("$input" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" - """ -+ bcftools \\ -+ index \\ -+ $input -+ - bcftools \\ - annotate \\ - $args \\ +'modules/nf-core/bcftools/annotate/meta.yml' is unchanged +'modules/nf-core/bcftools/annotate/environment.yml' is unchanged +'modules/nf-core/bcftools/annotate/tests/main.nf.test.snap' is unchanged +'modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config' is unchanged +'modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config' is unchanged +'modules/nf-core/bcftools/annotate/tests/bcf.config' is unchanged +'modules/nf-core/bcftools/annotate/tests/vcf.config' is unchanged +'modules/nf-core/bcftools/annotate/tests/main.nf.test' is unchanged +'modules/nf-core/bcftools/annotate/tests/tags.yml' is unchanged +'modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config' is unchanged ************************************************************ diff --git a/modules/nf-core/bcftools/annotate/environment.yml b/modules/nf-core/bcftools/annotate/environment.yml index 3d4e337992..5c00b116ad 100644 --- a/modules/nf-core/bcftools/annotate/environment.yml +++ b/modules/nf-core/bcftools/annotate/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_annotate channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf index 39c86bbe43..1e42b8cec8 100644 --- a/modules/nf-core/bcftools/annotate/main.nf +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -8,13 +8,15 @@ process BCFTOOLS_ANNOTATE { 'biocontainers/bcftools:1.20--h8b25389_0' }" input: - tuple val(meta), path(input) + tuple val(meta), path(input), path(index) path annotations path annotations_index path header_lines output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true path "versions.yml" , emit: versions when: @@ -30,11 +32,11 @@ process BCFTOOLS_ANNOTATE { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + def index_command = !index ? "bcftools index $input" : '' + if ("$input" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" """ - bcftools \\ - index \\ - $input + $index_command bcftools \\ annotate \\ @@ -59,10 +61,16 @@ process BCFTOOLS_ANNOTATE { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" - + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/annotate/meta.yml b/modules/nf-core/bcftools/annotate/meta.yml index f3aa463bf5..5bfccd2bd8 100644 --- a/modules/nf-core/bcftools/annotate/meta.yml +++ b/modules/nf-core/bcftools/annotate/meta.yml @@ -13,41 +13,64 @@ tools: documentation: https://samtools.github.io/bcftools/bcftools.html#annotate doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: Query VCF or BCF file, can be either uncompressed or compressed - - index: - type: file - description: Index of the query VCF or BCF file - - annotations: - type: file - description: Bgzip-compressed file with annotations - - annotations_index: - type: file - description: Index of the annotations file - - header_lines: - type: file - description: Contains lines to append to the output VCF header + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Query VCF or BCF file, can be either uncompressed or compressed + - index: + type: file + description: Index of the query VCF or BCF file + - annotations: + type: file + description: Bgzip-compressed file with annotations + - annotations_index: + type: file + description: Index of the annotations file + - - header_lines: + type: file + description: Contains lines to append to the output VCF header output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: Compressed annotated VCF file - pattern: "*{vcf,vcf.gz,bcf,bcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: Compressed annotated VCF file + pattern: "*{vcf,vcf.gz,bcf,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@projectoriented" - "@ramprasadn" diff --git a/modules/nf-core/bcftools/annotate/tests/bcf.config b/modules/nf-core/bcftools/annotate/tests/bcf.config index b8496b33c3..79d26779da 100644 --- a/modules/nf-core/bcftools/annotate/tests/bcf.config +++ b/modules/nf-core/bcftools/annotate/tests/bcf.config @@ -1,6 +1,4 @@ process { - withName: 'BCFTOOLS_ANNOTATE' { - ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type u" - ext.prefix = { "${meta.id}_ann" } - } -} \ No newline at end of file + ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type u" + ext.prefix = { "${meta.id}_ann" } +} diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test b/modules/nf-core/bcftools/annotate/tests/main.nf.test index 609102f836..3a5c493314 100644 --- a/modules/nf-core/bcftools/annotate/tests/main.nf.test +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test @@ -9,20 +9,21 @@ nextflow_process { tag "bcftools" tag "bcftools/annotate" - test("sarscov2 - [vcf, tbi, vcf2, tbi2, []] - vcf_output") { + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_output") { config "./vcf.config" when { process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz_tbi'], checkIfExists: true), - [] + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) ] + input[1] = [] """ } } @@ -33,34 +34,161 @@ nextflow_process { { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.versions - ).match("vcf") } + ).match() } ) } } + test("sarscov2 - [vcf, [], annotation, annotation_tbi], [] - vcf_output") { - test("sarscov2 - [vcf, [], [], [], header] - bcf_output") { - - config "./bcf.config" + config "./vcf.config" when { process { """ - vcf = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [], - [], - [] - ]) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + + } + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index") { - header = Channel.of( - '##INFO=', - '##INFO=' - ) - .collectFile(name:"headers.vcf", newLine:true) + config "./vcf_gz_index.config" - input[0] = vcf.combine(header) + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - [vcf, [], annotation, annotation_tbi], header - bcf_output") { + + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = Channel.of( + '##INFO=', + '##INFO=' + ).collectFile(name:"headers.vcf", newLine:true) """ } } @@ -77,7 +205,7 @@ nextflow_process { } - test("sarscov2 - [vcf, tbi, vcf2, tbi2, []] - stub") { + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - stub") { config "./vcf.config" options "-stub" @@ -85,13 +213,14 @@ nextflow_process { when { process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz_tbi'], checkIfExists: true), - [] + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) ] + input[1] = [] """ } } @@ -105,4 +234,94 @@ nextflow_process { } + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match()}, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + } \ No newline at end of file diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap index 359ab38dc1..bac2224a3b 100644 --- a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap @@ -18,9 +18,9 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-03T11:39:40.696827933" + "timestamp": "2024-06-12T16:39:33.331888" }, - "vcf": { + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index": { "content": [ [ [ @@ -31,6 +31,18 @@ "test_vcf.vcf.gz" ] ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi" + ] + ], [ "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" ] @@ -39,9 +51,9 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-03T11:39:29.215629503" + "timestamp": "2024-08-15T10:07:59.658031137" }, - "sarscov2 - [vcf, tbi, vcf2, tbi2, []] - stub": { + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi - stub": { "content": [ { "0": [ @@ -54,7 +66,304 @@ ] ], "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:09:05.096883418" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:08:10.581301219" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:08:43.975017625" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi" + ] + ], + [ + + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:08:21.354059092" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_output": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:07:37.788393317" + }, + "sarscov2 - [vcf, [], annotation, annotation_tbi], [] - vcf_output": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:07:48.500746325" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:09:16.094918834" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + ], "vcf": [ [ @@ -74,6 +383,6 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-03T11:39:52.630055205" + "timestamp": "2024-08-15T10:08:54.366358502" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/annotate/tests/vcf.config b/modules/nf-core/bcftools/annotate/tests/vcf.config index cb809f614c..611868d55c 100644 --- a/modules/nf-core/bcftools/annotate/tests/vcf.config +++ b/modules/nf-core/bcftools/annotate/tests/vcf.config @@ -1,6 +1,4 @@ process { - withName: 'BCFTOOLS_ANNOTATE' { - ext.prefix = { "${meta.id}_vcf" } - ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type z" - } + ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type z" + ext.prefix = { "${meta.id}_vcf" } } diff --git a/modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config new file mode 100644 index 0000000000..2fd9a225f0 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.args = "--output-type z --write-index --no-version" + ext.prefix = { "${meta.id}_vcf" } +} diff --git a/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000000..512c1dfb05 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.args = "--output-type z --write-index=csi --no-version" + ext.prefix = { "${meta.id}_vcf" } +} diff --git a/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000000..7feb5ebbed --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.args = "--output-type z --write-index=tbi --no-version" + ext.prefix = { "${meta.id}_vcf" } +} diff --git a/modules/nf-core/bcftools/concat/environment.yml b/modules/nf-core/bcftools/concat/environment.yml index 6544e949c8..5c00b116ad 100644 --- a/modules/nf-core/bcftools/concat/environment.yml +++ b/modules/nf-core/bcftools/concat/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_concat channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index 092d2c62e1..e2337eff25 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -11,15 +11,17 @@ process BCFTOOLS_CONCAT { tuple val(meta), path(vcfs), path(tbi) output: - tuple val(meta), path("*.gz"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.gz") , emit: vcf + tuple val(meta), path("*.tbi"), emit: tbi, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ bcftools concat \\ --output ${prefix}.vcf.gz \\ @@ -34,9 +36,16 @@ process BCFTOOLS_CONCAT { """ stub: - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_index = index.matches("csi|tbi") ? "touch ${prefix}.vcf.gz.${index}" : "" """ echo "" | gzip > ${prefix}.vcf.gz + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index 91cb54d5c7..b5d1f5b2ce 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -13,36 +13,59 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcfs: - type: list - description: | - List containing 2 or more vcf files - e.g. [ 'file1.vcf', 'file2.vcf' ] - - tbi: - type: list - description: | - List containing 2 or more index files (optional) - e.g. [ 'file1.tbi', 'file2.tbi' ] + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: list + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbi: + type: list + description: | + List containing 2 or more index files (optional) + e.g. [ 'file1.tbi', 'file2.tbi' ] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: VCF concatenated output file - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: VCF concatenated output file + pattern: "*.{vcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@nvnieuwk" diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test b/modules/nf-core/bcftools/concat/tests/main.nf.test index d5d9f78743..cea386e3bd 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test @@ -9,22 +9,23 @@ nextflow_process { tag "bcftools" tag "bcftools/concat" - config "./nextflow.config" test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]") { + config "./nextflow.config" + when { process { """ - input[0] = [ + input[0] = [ [ id:'test3' ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) ] ] """ @@ -40,16 +41,130 @@ nextflow_process { } + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], []]") { + config "./nextflow.config" + when { process { """ - input[0] = [ + input[0] = [ [ id:'test3' ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) ], [] ] @@ -68,19 +183,21 @@ nextflow_process { test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub") { + config "./nextflow.config" options "-stub" + when { process { """ - input[0] = [ + input[0] = [ [ id:'test3' ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) ] ] """ @@ -96,4 +213,104 @@ nextflow_process { } -} + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap index bef0ff05be..1182854f94 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap @@ -1,4 +1,59 @@ { + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T08:09:13.734103412" + }, "sarscov2 - [[vcf1, vcf2], []]": { "content": [ { @@ -11,7 +66,19 @@ ] ], "1": [ + + ], + "2": [ + + ], + "3": [ "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -28,9 +95,95 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T15:19:09.213249578" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T08:08:23.981388325" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-05-31T15:16:00.637917586" + "timestamp": "2024-06-05T14:01:24.419027693" }, "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]": { "content": [ @@ -44,7 +197,19 @@ ] ], "1": [ + + ], + "2": [ + + ], + "3": [ "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -61,9 +226,40 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-05-31T15:15:55.750767959" + "timestamp": "2024-06-04T15:19:03.597061078" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T14:00:10.868487669" }, "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { "content": [ @@ -77,7 +273,19 @@ ] ], "1": [ + + ], + "2": [ + + ], + "3": [ "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -94,8 +302,94 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T15:19:14.836256897" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + [ + + ], + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T14:00:31.061411617" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-05-31T15:16:05.717072932" + "timestamp": "2024-06-05T14:01:35.209746508" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/vcf_gz_index.config b/modules/nf-core/bcftools/concat/tests/vcf_gz_index.config new file mode 100644 index 0000000000..7dd696ee26 --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000000..aebffb6fb7 --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000000..b192ae7d19 --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/mpileup/environment.yml b/modules/nf-core/bcftools/mpileup/environment.yml index 7e479383ba..5c00b116ad 100644 --- a/modules/nf-core/bcftools/mpileup/environment.yml +++ b/modules/nf-core/bcftools/mpileup/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_mpileup channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/mpileup/meta.yml b/modules/nf-core/bcftools/mpileup/meta.yml index 65410ddd66..febcb33f60 100644 --- a/modules/nf-core/bcftools/mpileup/meta.yml +++ b/modules/nf-core/bcftools/mpileup/meta.yml @@ -12,56 +12,79 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Input BAM file - pattern: "*.{bam}" - - intervals: - type: file - description: Input intervals file. A file (commonly '.bed') containing regions to subset - - meta: - type: map - description: | - Groovy Map containing information about the genome fasta, e.g. [ id: 'sarscov2' ] - - fasta: - type: file - description: FASTA reference file - pattern: "*.{fasta,fa}" - - save_mpileup: - type: boolean - description: Save mpileup file generated by bcftools mpileup + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM file + pattern: "*.{bam}" + - intervals: + type: file + description: Input intervals file. A file (commonly '.bed') containing regions + to subset + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" + - - save_mpileup: + type: boolean + description: Save mpileup file generated by bcftools mpileup output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: VCF gzipped output file - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*vcf.gz": + type: file + description: VCF gzipped output file + pattern: "*.{vcf.gz}" - tbi: - type: file - description: tabix index file - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*vcf.gz.tbi": + type: file + description: tabix index file + pattern: "*.{vcf.gz.tbi}" - stats: - type: file - description: Text output file containing stats - pattern: "*{stats.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*stats.txt": + type: file + description: Text output file containing stats + pattern: "*{stats.txt}" - mpileup: - type: file - description: mpileup gzipped output for all positions - pattern: "{*.mpileup.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mpileup.gz": + type: file + description: mpileup gzipped output for all positions + pattern: "{*.mpileup.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/bcftools/mpileup/tests/main.nf.test b/modules/nf-core/bcftools/mpileup/tests/main.nf.test index dc35c54266..665a349fc8 100644 --- a/modules/nf-core/bcftools/mpileup/tests/main.nf.test +++ b/modules/nf-core/bcftools/mpileup/tests/main.nf.test @@ -18,12 +18,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), [] ] input[1] = [ [ id:'sarscov2' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] input[2] = false """ @@ -51,12 +51,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), [] ] input[1] = [ [ id:'sarscov2' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] input[2] = false """ @@ -82,12 +82,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), [] ] input[1] = [ [ id:'sarscov2' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] input[2] = true """ @@ -116,12 +116,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), [] ] input[1] = [ [ id:'sarscov2' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] input[2] = true """ @@ -148,12 +148,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] input[1] = [ [ id:'sarscov2' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] input[2] = false """ @@ -181,12 +181,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] input[1] = [ [ id:'sarscov2' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] input[2] = false """ diff --git a/modules/nf-core/bcftools/sort/environment.yml b/modules/nf-core/bcftools/sort/environment.yml index 2295ecfd17..5c00b116ad 100644 --- a/modules/nf-core/bcftools/sort/environment.yml +++ b/modules/nf-core/bcftools/sort/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_sort channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index d5e3ce9af7..7d4c9b8e9d 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -11,8 +11,10 @@ process BCFTOOLS_SORT { tuple val(meta), path(vcf) output: - tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -49,9 +51,16 @@ process BCFTOOLS_SORT { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/sort/meta.yml b/modules/nf-core/bcftools/sort/meta.yml index 84747c6d89..f7a6eff17d 100644 --- a/modules/nf-core/bcftools/sort/meta.yml +++ b/modules/nf-core/bcftools/sort/meta.yml @@ -12,30 +12,53 @@ tools: tool_dev_url: https://github.com/samtools/bcftools doi: "10.1093/bioinformatics/btp352" licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: The VCF/BCF file to be sorted - pattern: "*.{vcf.gz,vcf,bcf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: The VCF/BCF file to be sorted + pattern: "*.{vcf.gz,vcf,bcf}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: Sorted VCF file - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: Sorted VCF file + pattern: "*.{vcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Gwennid" maintainers: diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test b/modules/nf-core/bcftools/sort/tests/main.nf.test index 8a496dda7d..b9bdd76a09 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] """ } @@ -30,6 +30,96 @@ nextflow_process { } + test("sarscov2 - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - vcf - stub") { options "-stub" when { @@ -37,7 +127,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] """ } @@ -51,4 +141,82 @@ nextflow_process { } } -} + + test("sarscov2 - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap index 3f478d19d6..f38272cb28 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap @@ -1,4 +1,59 @@ { + "sarscov2 - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:06:05.201680777" + }, "vcf": { "content": [ { @@ -11,7 +66,19 @@ ] ], "1": [ + + ], + "2": [ + + ], + "3": [ "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -30,7 +97,179 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-03T11:54:39.200647026" + "timestamp": "2024-06-05T12:04:43.889971134" + }, + "sarscov2 - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:04:55.385964497" + }, + "sarscov2 - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:06.662818922" + }, + "sarscov2 - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:40.012912381" + }, + "sarscov2 - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:52.405673587" }, "sarscov2 - vcf - stub": { "content": [ @@ -44,7 +283,19 @@ ] ], "1": [ + + ], + "2": [ + + ], + "3": [ "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -63,6 +314,37 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-03T11:54:55.594155692" + "timestamp": "2024-06-05T12:05:29.117946461" + }, + "sarscov2 - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:17.217274984" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/tests/vcf_gz_index.config b/modules/nf-core/bcftools/sort/tests/vcf_gz_index.config new file mode 100644 index 0000000000..aacd13464a --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index" +} diff --git a/modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config new file mode 100644 index 0000000000..640eb0ba56 --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi" +} diff --git a/modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config new file mode 100644 index 0000000000..589a50c65d --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi" +} diff --git a/modules/nf-core/bcftools/stats/environment.yml b/modules/nf-core/bcftools/stats/environment.yml index 128fe20422..93357b41ea 100644 --- a/modules/nf-core/bcftools/stats/environment.yml +++ b/modules/nf-core/bcftools/stats/environment.yml @@ -1,8 +1,6 @@ -name: bcftools_stats channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bcftools=1.20 - bioconda::htslib=1.20 diff --git a/modules/nf-core/bcftools/stats/meta.yml b/modules/nf-core/bcftools/stats/meta.yml index 7ea2103e3b..655a61c5f4 100644 --- a/modules/nf-core/bcftools/stats/meta.yml +++ b/modules/nf-core/bcftools/stats/meta.yml @@ -13,58 +13,86 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF input file - pattern: "*.{vcf}" - - tbi: - type: file - description: | - The tab index for the VCF file to be inspected. Optional: only required when parameter regions is chosen. - pattern: "*.tbi" - - regions: - type: file - description: | - Optionally, restrict the operation to regions listed in this file. (VCF, BED or tab-delimited) - - targets: - type: file - description: | - Optionally, restrict the operation to regions listed in this file (doesn't rely upon tbi index files) - - samples: - type: file - description: | - Optional, file of sample names to be included or excluded. - e.g. 'file.tsv' - - exons: - type: file - description: | - Tab-delimited file with exons for indel frameshifts (chr,beg,end; 1-based, inclusive, optionally bgzip compressed). - e.g. 'exons.tsv.gz' - - fasta: - type: file - description: | - Faidx indexed reference sequence file to determine INDEL context. - e.g. 'reference.fa' + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF input file + pattern: "*.{vcf}" + - tbi: + type: file + description: | + The tab index for the VCF file to be inspected. Optional: only required when parameter regions is chosen. + pattern: "*.tbi" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. (VCF, BED or tab-delimited) + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon tbi index files) + - - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' + - - meta5: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - exons: + type: file + description: | + Tab-delimited file with exons for indel frameshifts (chr,beg,end; 1-based, inclusive, optionally bgzip compressed). + e.g. 'exons.tsv.gz' + - - meta6: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + Faidx indexed reference sequence file to determine INDEL context. + e.g. 'reference.fa' output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - stats: - type: file - description: Text output file containing stats - pattern: "*_{stats.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*stats.txt": + type: file + description: Text output file containing stats + pattern: "*_{stats.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/bwa/index/environment.yml b/modules/nf-core/bwa/index/environment.yml index 126e003448..d8789a2092 100644 --- a/modules/nf-core/bwa/index/environment.yml +++ b/modules/nf-core/bwa/index/environment.yml @@ -1,7 +1,5 @@ -name: bwa_index channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bwa=0.7.18 diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml index 4c7d30f3aa..4884bca2ab 100644 --- a/modules/nf-core/bwa/index/meta.yml +++ b/modules/nf-core/bwa/index/meta.yml @@ -11,32 +11,35 @@ tools: BWA is a software package for mapping DNA sequences against a large reference genome, such as the human genome. homepage: http://bio-bwa.sourceforge.net/ - documentation: http://www.htslib.org/doc/samtools.html + documentation: https://bio-bwa.sourceforge.net/bwa.shtml arxiv: arXiv:1303.3997 licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - index: - type: file - description: BWA genome index files - pattern: "*.{amb,ann,bwt,pac,sa}" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bwa: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@maxulysse" diff --git a/modules/nf-core/bwa/mem/environment.yml b/modules/nf-core/bwa/mem/environment.yml index 3aa9f0cca2..ef7b966c0f 100644 --- a/modules/nf-core/bwa/mem/environment.yml +++ b/modules/nf-core/bwa/mem/environment.yml @@ -1,10 +1,8 @@ -name: bwa_mem channels: - conda-forge - bioconda - - defaults + dependencies: - bwa=0.7.18 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.20 - htslib=1.20.0 + - samtools=1.20 diff --git a/modules/nf-core/bwa/mem/meta.yml b/modules/nf-core/bwa/mem/meta.yml index 1532c2615d..37467d2912 100644 --- a/modules/nf-core/bwa/mem/meta.yml +++ b/modules/nf-core/bwa/mem/meta.yml @@ -14,58 +14,85 @@ tools: BWA is a software package for mapping DNA sequences against a large reference genome, such as the human genome. homepage: http://bio-bwa.sourceforge.net/ - documentation: http://www.htslib.org/doc/samtools.html + documentation: https://bio-bwa.sourceforge.net/bwa.shtml arxiv: arXiv:1303.3997 licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" - - fasta: - type: file - description: Reference genome in FASTA format - pattern: "*.{fasta,fa}" - - sort_bam: - type: boolean - description: use samtools sort (true) or samtools view (false) - pattern: "true or false" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fasta,fa}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" output: - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + - meta: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" - cram: - type: file - description: Output CRAM file containing read alignments - pattern: "*.{cram}" + - meta: + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" - csi: - type: file - description: Optional index file for BAM file - pattern: "*.{csi}" + - meta: + type: file + description: Optional index file for BAM file + pattern: "*.{csi}" + - "*.csi": + type: file + description: Optional index file for BAM file + pattern: "*.{csi}" - crai: - type: file - description: Optional index file for CRAM file - pattern: "*.{crai}" + - meta: + type: file + description: Optional index file for CRAM file + pattern: "*.{crai}" + - "*.crai": + type: file + description: Optional index file for CRAM file + pattern: "*.{crai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@jeremy1805" diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test index 463b76f81c..5de2c2f453 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test +++ b/modules/nf-core/bwa/mem/tests/main.nf.test @@ -9,21 +9,21 @@ nextflow_process { script "../main.nf" process "BWA_MEM" - test("Single-End") { - - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ } } + } + + test("Single-End") { when { process { @@ -49,7 +49,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -59,20 +60,6 @@ nextflow_process { test("Single-End Sort") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -97,7 +84,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -107,20 +95,6 @@ nextflow_process { test("Paired-End") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -146,7 +120,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -156,20 +131,6 @@ nextflow_process { test("Paired-End Sort") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -195,7 +156,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -205,20 +167,6 @@ nextflow_process { test("Paired-End - no fasta") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -244,7 +192,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -253,20 +202,9 @@ nextflow_process { } test("Single-end - stub") { + options "-stub" - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } + when { process { """ @@ -286,30 +224,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - file(process.out.csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } } test("Paired-end - stub") { + options "-stub" - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } + when { process { """ @@ -330,11 +253,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - file(process.out.csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap index 038ee7b7a2..2079ea2240 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap @@ -13,13 +13,14 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "b6d9cb250261a4c125413c5d867d87a7", + "798439cbd7fd81cbcc5078022dc5479d" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:44:32.953673185" + "timestamp": "2024-08-02T12:22:28.051598" }, "Single-End Sort": { "content": [ @@ -35,13 +36,14 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "848434ae4b79cfdcb2281c60b33663ce", + "94fcf617f5b994584c4e8d4044e16b4f" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:44:45.27066093" + "timestamp": "2024-08-02T12:22:39.671154" }, "Paired-End": { "content": [ @@ -57,13 +59,14 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "5b34d31be84478761f789e3e2e805e31", + "57aeef88ed701a8ebc8e2f0a381b2a6" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:44:57.706852274" + "timestamp": "2024-08-02T12:22:51.919479" }, "Paired-End Sort": { "content": [ @@ -79,27 +82,91 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "69003376d9a8952622d8587b39c3eaae", + "af8628d9df18b2d3d4f6fd47ef2bb872" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:45:10.376505036" + "timestamp": "2024-08-02T12:23:00.833562" }, "Single-end - stub": { "content": [ - "test.bam", - "test.csi", - [ - "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:46:07.182072398" + "timestamp": "2024-08-02T12:31:29.46282" }, "Paired-End - no fasta": { "content": [ @@ -115,26 +182,90 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "5b34d31be84478761f789e3e2e805e31", + "57aeef88ed701a8ebc8e2f0a381b2a6" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:45:53.813076501" + "timestamp": "2024-08-02T12:23:09.942545" }, "Paired-end - stub": { "content": [ - "test.bam", - "test.csi", - [ - "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:46:18.412916364" + "timestamp": "2024-08-02T12:31:37.757037" } } \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml index 26b439172a..15cee23876 100644 --- a/modules/nf-core/bwamem2/index/environment.yml +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -1,7 +1,5 @@ -name: bwamem2_index channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml index c14a109252..74f54ef0d8 100644 --- a/modules/nf-core/bwamem2/index/meta.yml +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -13,29 +13,32 @@ tools: homepage: https://github.com/bwa-mem2/bwa-mem2 documentation: https://github.com/bwa-mem2/bwa-mem2#usage licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - index: - type: file - description: BWA genome index files - pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bwamem2: + type: file + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml index cbf06d3993..7e0b5a3479 100644 --- a/modules/nf-core/bwamem2/mem/environment.yml +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -1,10 +1,8 @@ -name: bwamem2_mem channels: - conda-forge - bioconda - - defaults + dependencies: - bwa-mem2=2.2.1 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.19.2 - htslib=1.19.1 + - samtools=1.19.2 diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml index 931f712943..c6333ca171 100644 --- a/modules/nf-core/bwamem2/mem/meta.yml +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -17,69 +17,96 @@ tools: documentation: http://www.htslib.org/doc/samtools.html arxiv: arXiv:1303.3997 licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference/index information - e.g. [ id:'test' ] - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference genome in FASTA format - pattern: "*.{fa,fasta,fna}" - - sort_bam: - type: boolean - description: use samtools sort (true) or samtools view (false) - pattern: "true or false" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - sam: - type: file - description: Output SAM file containing read alignments - pattern: "*.{sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" - cram: - type: file - description: Output CRAM file containing read alignments - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" - crai: - type: file - description: Index file for CRAM file - pattern: "*.{crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" - csi: - type: file - description: Index file for BAM file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for BAM file + pattern: "*.{csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@matthdsm" diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test index 5e67f70b6a..9e0ab14aec 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -10,21 +10,21 @@ nextflow_process { tag "bwamem2/mem" tag "bwamem2/index" - test("sarscov2 - fastq, index, fasta, false") { - - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ } } + } + + test("sarscov2 - fastq, index, fasta, false") { when { process { @@ -44,7 +44,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -54,20 +55,6 @@ nextflow_process { test("sarscov2 - fastq, index, fasta, true") { - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -86,7 +73,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -96,20 +84,6 @@ nextflow_process { test("sarscov2 - [fastq1, fastq2], index, fasta, false") { - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -131,7 +105,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -141,20 +116,6 @@ nextflow_process { test("sarscov2 - [fastq1, fastq2], index, fasta, true") { - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -176,7 +137,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -188,20 +150,6 @@ nextflow_process { options "-stub" - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -222,10 +170,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap index 9fb1e69d07..69bc3612bf 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -1,67 +1,129 @@ { "sarscov2 - [fastq1, fastq2], index, fasta, false": { "content": [ - "test.bam", + "eefa0f44493fd0504e734efd2f1f4a9e", + "57aeef88ed701a8ebc8e2f0a381b2a6", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:13:18.890289958" + "timestamp": "2024-08-02T12:23:37.929675" }, "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { "content": [ - "test.bam", - [ - "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" - ] + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:45:51.821633029" + "timestamp": "2024-08-02T12:12:06.693567" }, "sarscov2 - [fastq1, fastq2], index, fasta, true": { "content": [ - "test.bam", + "7aba324f82d5b4e926a5dd7b46029cb4", + "af8628d9df18b2d3d4f6fd47ef2bb872", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:13:36.458291078" + "timestamp": "2024-08-02T12:23:53.488374" }, "sarscov2 - fastq, index, fasta, false": { "content": [ - "test.bam", + "bc02b41697b3a8f1021b02becec24052", + "798439cbd7fd81cbcc5078022dc5479d", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:12:44.084654507" + "timestamp": "2024-08-02T12:23:05.644682" }, "sarscov2 - fastq, index, fasta, true": { "content": [ - "test.bam", + "e41d67320815d29ba5f6e9d1ae21902a", + "94fcf617f5b994584c4e8d4044e16b4f", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:13:01.763341681" + "timestamp": "2024-08-02T12:23:21.837763" } } \ No newline at end of file diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml index 17a04ef232..9b01c865a2 100644 --- a/modules/nf-core/cat/cat/environment.yml +++ b/modules/nf-core/cat/cat/environment.yml @@ -1,7 +1,5 @@ -name: cat_cat channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index adbdbd7ba6..2862c64cd9 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -76,4 +76,3 @@ def getFileSuffix(filename) { def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) } - diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 00a8db0bca..81778a0671 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -9,25 +9,32 @@ tools: description: Just concatenation documentation: https://man7.org/linux/man-pages/man1/cat.1.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - files_in: - type: file - description: List of compressed / uncompressed files - pattern: "*" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - file_out: - type: file - description: Concatenated file. Will be gzipped if file_out ends with ".gz" - pattern: "${file_out}" + - meta: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - ${prefix}: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@erikrikarddaniel" - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index fcee2d19f2..9cb1617883 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -29,7 +29,8 @@ nextflow_process { then { assertAll( { assert !process.success }, - { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,8 +84,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -142,8 +147,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -170,8 +179,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_one_file_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_one_file_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 423571ba27..b7623ee650 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -1,10 +1,4 @@ { - "test_cat_unzipped_zipped_size": { - "content": [ - 375 - ], - "timestamp": "2023-10-16T14:33:08.049445686" - }, "test_cat_unzipped_unzipped": { "content": [ { @@ -34,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:18.500464399" }, "test_cat_zipped_unzipped": { @@ -65,9 +63,13 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:49.642741302" }, - "test_cat_zipped_zipped_lines": { + "test_cat_zipped_zipped": { "content": [ [ "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", @@ -76,11 +78,31 @@ "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + ] ], - "timestamp": "2023-10-16T14:32:33.629048645" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" }, - "test_cat_unzipped_zipped_lines": { + "test_cat_one_file_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -89,11 +111,19 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:08.038830506" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" }, - "test_cat_one_file_unzipped_zipped_lines": { + "test_cat_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -102,20 +132,16 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:21.39642399" - }, - "test_cat_zipped_zipped_size": { - "content": [ - 78 - ], - "timestamp": "2023-10-16T14:32:33.641869244" - }, - "test_cat_one_file_unzipped_zipped_size": { - "content": [ - 374 - ], - "timestamp": "2023-10-16T14:33:21.4094373" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" } } \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml index 8c69b121f7..c7eb9bd1c3 100644 --- a/modules/nf-core/cat/fastq/environment.yml +++ b/modules/nf-core/cat/fastq/environment.yml @@ -1,7 +1,5 @@ -name: cat_fastq channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::coreutils=8.30 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index f132b2adc1..b68e5f9114 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -53,9 +53,9 @@ process CAT_FASTQ { def prefix = task.ext.prefix ?: "${meta.id}" def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] if (meta.single_end) { - if (readList.size > 1) { + if (readList.size >= 1) { """ - touch ${prefix}.merged.fastq.gz + echo '' | gzip > ${prefix}.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -64,10 +64,10 @@ process CAT_FASTQ { """ } } else { - if (readList.size > 2) { + if (readList.size >= 2) { """ - touch ${prefix}_1.merged.fastq.gz - touch ${prefix}_2.merged.fastq.gz + echo '' | gzip > ${prefix}_1.merged.fastq.gz + echo '' | gzip > ${prefix}_2.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml index db4ac3c79a..91ff2fb5f6 100644 --- a/modules/nf-core/cat/fastq/meta.yml +++ b/modules/nf-core/cat/fastq/meta.yml @@ -10,30 +10,33 @@ tools: The cat utility reads files sequentially, writing them to the standard output. documentation: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files to be concatenated. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files to be concatenated. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - reads: - type: file - description: Merged fastq file - pattern: "*.{merged.fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.merged.fastq.gz": + type: file + description: Merged fastq file + pattern: "*.{merged.fastq.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index a71dcb8dfa..f88a78b6ca 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -13,9 +13,6 @@ nextflow_process { test("test_cat_fastq_single_end") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -38,9 +35,6 @@ nextflow_process { test("test_cat_fastq_paired_end") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -65,9 +59,6 @@ nextflow_process { test("test_cat_fastq_single_end_same_name") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -90,9 +81,6 @@ nextflow_process { test("test_cat_fastq_paired_end_same_name") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -117,9 +105,129 @@ nextflow_process { test("test_cat_fastq_single_end_single_file") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file - stub") { + + options "-stub" + + when { process { """ input[0] = Channel.of([ diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap index 43dfe28fc7..aec119a94e 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -28,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:30:39.816981" }, "test_cat_fastq_single_end_same_name": { @@ -59,6 +63,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:32:35.229332" }, "test_cat_fastq_single_end_single_file": { @@ -90,6 +98,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:34:00.058829" }, "test_cat_fastq_paired_end_same_name": { @@ -127,8 +139,123 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:33:33.031555" }, + "test_cat_fastq_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:28.244999" + }, + "test_cat_fastq_paired_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:57.070911" + }, + "test_cat_fastq_single_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:46.796254" + }, "test_cat_fastq_paired_end": { "content": [ { @@ -164,6 +291,86 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:32:02.270935" + }, + "test_cat_fastq_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:37.807553" + }, + "test_cat_fastq_single_end_single_file - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:14:51.861264" } } \ No newline at end of file diff --git a/modules/nf-core/cnvkit/antitarget/environment.yml b/modules/nf-core/cnvkit/antitarget/environment.yml index a33a12e23c..b683406cc5 100644 --- a/modules/nf-core/cnvkit/antitarget/environment.yml +++ b/modules/nf-core/cnvkit/antitarget/environment.yml @@ -1,7 +1,5 @@ -name: cnvkit_antitarget channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvkit=0.9.11 diff --git a/modules/nf-core/cnvkit/antitarget/meta.yml b/modules/nf-core/cnvkit/antitarget/meta.yml index d879092d33..13f12a10c0 100644 --- a/modules/nf-core/cnvkit/antitarget/meta.yml +++ b/modules/nf-core/cnvkit/antitarget/meta.yml @@ -15,30 +15,33 @@ tools: tool_dev_url: "https://github.com/etal/cnvkit" doi: 10.1371/journal.pcbi.1004873 licence: ["Apache-2.0"] + identifier: biotools:cnvkit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - targets: - type: file - description: File containing genomic regions - pattern: "*.{bed}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - targets: + type: file + description: File containing genomic regions + pattern: "*.{bed}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bed: - type: file - description: File containing off-target regions - pattern: "*.{bed}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: File containing off-target regions + pattern: "*.{bed}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@adamrtalbot" - "@priesgo" diff --git a/modules/nf-core/cnvkit/antitarget/tests/main.nf.test b/modules/nf-core/cnvkit/antitarget/tests/main.nf.test index 558abb6768..84f3818007 100644 --- a/modules/nf-core/cnvkit/antitarget/tests/main.nf.test +++ b/modules/nf-core/cnvkit/antitarget/tests/main.nf.test @@ -25,8 +25,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("version") }, - { assert snapshot(file(process.out.bed.get(0).get(1)).readLines()[0..5]).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/cnvkit/antitarget/tests/main.nf.test.snap b/modules/nf-core/cnvkit/antitarget/tests/main.nf.test.snap index f793a5275f..57bccf9f99 100644 --- a/modules/nf-core/cnvkit/antitarget/tests/main.nf.test.snap +++ b/modules/nf-core/cnvkit/antitarget/tests/main.nf.test.snap @@ -34,31 +34,35 @@ }, "human - bed": { "content": [ - [ - "chr21\t23354500\t23509999\tAntitarget", - "chr21\t23509999\t23665499\tAntitarget", - "chr21\t23665499\t23820999\tAntitarget", - "chr21\t23820999\t23976499\tAntitarget", - "chr21\t23976499\t24131999\tAntitarget", - "chr21\t24911498\t25066997\tAntitarget" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" - }, - "timestamp": "2024-05-13T13:58:33.088665" - }, - "version": { - "content": [ - [ - "versions.yml:md5,b5e73ea85743cedc68ca6ef8006e5030" - ] + { + "0": [ + [ + { + "id": "test" + }, + "test.antitarget.bed:md5,3d4d20f9f23b39970865d29ef239d20b" + ] + ], + "1": [ + "versions.yml:md5,b5e73ea85743cedc68ca6ef8006e5030" + ], + "bed": [ + [ + { + "id": "test" + }, + "test.antitarget.bed:md5,3d4d20f9f23b39970865d29ef239d20b" + ] + ], + "versions": [ + "versions.yml:md5,b5e73ea85743cedc68ca6ef8006e5030" + ] + } ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.0" }, - "timestamp": "2024-05-13T13:58:33.070317" + "timestamp": "2024-06-10T10:32:33.936192" } } \ No newline at end of file diff --git a/modules/nf-core/cnvkit/batch/environment.yml b/modules/nf-core/cnvkit/batch/environment.yml index 10c5d6b753..5d79360119 100644 --- a/modules/nf-core/cnvkit/batch/environment.yml +++ b/modules/nf-core/cnvkit/batch/environment.yml @@ -1,11 +1,8 @@ -name: cnvkit_batch - channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvkit=0.9.10 - - bioconda::htslib=1.19.1 - - bioconda::samtools=1.19.2 + - bioconda::htslib=1.17 # Matched with the container + - bioconda::samtools=1.17 # Matched with the container diff --git a/modules/nf-core/cnvkit/batch/meta.yml b/modules/nf-core/cnvkit/batch/meta.yml index f14efe553c..30f7a1a29b 100644 --- a/modules/nf-core/cnvkit/batch/meta.yml +++ b/modules/nf-core/cnvkit/batch/meta.yml @@ -12,94 +12,127 @@ tools: homepage: https://cnvkit.readthedocs.io/en/stable/index.html documentation: https://cnvkit.readthedocs.io/en/stable/index.html licence: ["Apache-2.0"] + identifier: biotools:cnvkit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tumor: - type: file - description: | - Input tumour sample bam file (or cram) - - normal: - type: file - description: | - Input normal sample bam file (or cram) - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: | - Input reference genome fasta file (only needed for cram_input and/or when normal_samples are provided) - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta_fai: - type: file - description: | - Input reference genome fasta index (optional, but recommended for cram_input) - - meta4: - type: map - description: | - Groovy Map containing information about target file - e.g. [ id:'test' ] - - targets: - type: file - description: | - Input target bed file - - meta5: - type: map - description: | - Groovy Map containing information about reference file - e.g. [ id:'test' ] - - reference: - type: file - description: | - Input reference cnn-file (only for germline and tumor-only running) - - panel_of_normals: - type: file - description: | - Input panel of normals file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tumor: + type: file + description: | + Input tumour sample bam file (or cram) + - normal: + type: file + description: | + Input normal sample bam file (or cram) + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: | + Input reference genome fasta file (only needed for cram_input and/or when normal_samples are provided) + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta_fai: + type: file + description: | + Input reference genome fasta index (optional, but recommended for cram_input) + - - meta4: + type: map + description: | + Groovy Map containing information about target file + e.g. [ id:'test' ] + - targets: + type: file + description: | + Input target bed file + - - meta5: + type: map + description: | + Groovy Map containing information about reference file + e.g. [ id:'test' ] + - reference: + type: file + description: | + Input reference cnn-file (only for germline and tumor-only running) + - - panel_of_normals: + type: file + description: | + Input panel of normals file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bed: - type: file - description: File containing genomic regions - pattern: "*.{bed}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: File containing genomic regions + pattern: "*.{bed}" - cnn: - type: file - description: File containing coverage information - pattern: "*.{cnn}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cnn": + type: file + description: File containing coverage information + pattern: "*.{cnn}" - cnr: - type: file - description: File containing copy number ratio information - pattern: "*.{cnr}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cnr": + type: file + description: File containing copy number ratio information + pattern: "*.{cnr}" - cns: - type: file - description: File containing copy number segment information - pattern: "*.{cns}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cns": + type: file + description: File containing copy number segment information + pattern: "*.{cns}" - pdf: - type: file - description: File with plot of copy numbers or segments on chromosomes - pattern: "*.{pdf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pdf": + type: file + description: File with plot of copy numbers or segments on chromosomes + pattern: "*.{pdf}" - png: - type: file - description: File with plot of bin-level log2 coverages and segmentation calls - pattern: "*.{png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.png": + type: file + description: File with plot of bin-level log2 coverages and segmentation calls + pattern: "*.{png}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@adamrtalbot" - "@drpatelh" diff --git a/modules/nf-core/cnvkit/batch/tests/main.nf.test b/modules/nf-core/cnvkit/batch/tests/main.nf.test index b2c0a9b720..f191a4b952 100644 --- a/modules/nf-core/cnvkit/batch/tests/main.nf.test +++ b/modules/nf-core/cnvkit/batch/tests/main.nf.test @@ -18,12 +18,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - input[1] = [[:],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] input[2] = [[:],[]] - input[3] = [[:],file(params.test_data['sarscov2']['genome']['baits_bed'], checkIfExists: true)] + input[3] = [[:],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true)] input[4] = [[:],[]] input[5] = false """ @@ -34,7 +34,7 @@ nextflow_process { println process.out.bed[0][1] assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -49,10 +49,10 @@ nextflow_process { """ input[0] = [ [ id:'test'], // meta map - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] - input[1] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] input[2] = [[:],[]] input[3] = [[:],[]] input[4] = [[:],[]] @@ -64,7 +64,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -79,11 +79,11 @@ nextflow_process { """ input[0] = [ [ id:'test'], // meta map - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) - ] - input[1] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - input[2] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] input[3] = [[:],[]] input[4] = [[:],[]] input[5] = false @@ -94,7 +94,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -109,13 +109,13 @@ nextflow_process { """ input[0] = [ [ id:'test'], // meta map - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true), [] - ] + ] input[1] = [[:],[]] input[2] = [[:],[]] input[3] = [[:],[]] - input[4] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_21_reference_cnn'], checkIfExists: true)] + input[4] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/reference_chr21.cnn', checkIfExists: true)] input[5] = false """ } @@ -124,7 +124,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -139,13 +139,13 @@ nextflow_process { """ input[0] = [ [ id:'test'], // meta map - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true), [] - ] - input[1] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] input[2] = [[:],[]] input[3] = [[:],[]] - input[4] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_21_reference_cnn'], checkIfExists: true)] + input[4] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/reference_chr21.cnn', checkIfExists: true)] input[5] = false """ } @@ -154,7 +154,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -168,11 +168,11 @@ nextflow_process { input[0] = [ [ id:'test'], // meta map [], - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true) - ] - input[1] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true)] - input[2] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true)] - input[3] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_21_multi_interval_bed'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true)] + input[2] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/multi_intervals.bed', checkIfExists: true)] input[4] = [[:],[]] input[5] = false """ @@ -182,7 +182,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -195,13 +195,13 @@ nextflow_process { process { """ input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - input[1] = [[:],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] input[2] = [[:],[]] - input[3] = [[:],file(params.test_data['sarscov2']['genome']['baits_bed'], checkIfExists: true)] + input[3] = [[:],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true)] input[4] = [[:],[]] input[5] = false """ @@ -211,7 +211,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -228,11 +228,12 @@ nextflow_process { input[0] = [ [ id:'test'], // meta map [], - [file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_bam'], checkIfExists: true) + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) ] - ] - input[1] = [[:],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] input[2] = [[:],[]] input[3] = [[:],[]] input[4] = [[:],[]] @@ -244,7 +245,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.version).match() } + { assert snapshot(process.out.versions).match() } ) } @@ -260,12 +261,12 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - input[1] = [[:],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) + ] + input[1] = [[:],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] input[2] = [[:],[]] - input[3] = [[:],file(params.test_data['sarscov2']['genome']['baits_bed'], checkIfExists: true)] + input[3] = [[:],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true)] input[4] = [[:],[]] input[5] = false """ @@ -275,7 +276,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.bed).match() } + { assert snapshot( + process.out.bed, + process.out.versions + ).match() + } ) } diff --git a/modules/nf-core/cnvkit/batch/tests/main.nf.test.snap b/modules/nf-core/cnvkit/batch/tests/main.nf.test.snap index 5d7cb143e9..205d43f8d0 100644 --- a/modules/nf-core/cnvkit/batch/tests/main.nf.test.snap +++ b/modules/nf-core/cnvkit/batch/tests/main.nf.test.snap @@ -1,19 +1,27 @@ { "cnvkit batch tumouronly mode - bam": { - "content": null, + "content": [ + [ + "versions.yml:md5,5737e02065ca6359586a4078708c73e6" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:30:55.150317561" + "timestamp": "2024-08-07T10:07:07.53837" }, "cnvkit batch tumouronly mode - cram": { - "content": null, + "content": [ + [ + "versions.yml:md5,0310a792526148b05f434944a1167835" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:31:31.039652656" + "timestamp": "2024-08-07T10:07:48.900117" }, "cnvkit batch - bam - stub": { "content": [ @@ -27,60 +35,87 @@ "baits.target.bed:md5,26d25ff2d6c45b6d92169b3559c6acdb" ] ] + ], + [ + "versions.yml:md5,5737e02065ca6359586a4078708c73e6" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:33:25.790391941" + "timestamp": "2024-08-07T10:09:40.098703" }, "cnvkit batch wgs - bam": { - "content": null, + "content": [ + [ + "versions.yml:md5,5737e02065ca6359586a4078708c73e6" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:30:10.677690173" + "timestamp": "2024-08-07T10:06:25.023798" }, "cnvkit batch germline hybrid mode - bam": { - "content": null, + "content": [ + [ + "versions.yml:md5,5737e02065ca6359586a4078708c73e6" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:32:50.217076532" + "timestamp": "2024-08-07T10:09:19.191221" }, "cnvkit batch hybrid mode - bam": { - "content": null, + "content": [ + [ + "versions.yml:md5,5737e02065ca6359586a4078708c73e6" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T13:54:41.69602289" + "timestamp": "2024-08-07T10:06:10.438545" }, "cnvkit batch wgs - cram": { - "content": null, + "content": [ + [ + "versions.yml:md5,0310a792526148b05f434944a1167835" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:30:27.271060826" + "timestamp": "2024-08-07T10:06:39.492881" }, "cnvkit batch pon mode - bam": { - "content": null, + "content": [ + [ + "versions.yml:md5,5737e02065ca6359586a4078708c73e6" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:33:06.391306794" + "timestamp": "2024-08-07T10:09:29.636924" }, "cnvkit batch germline mode - cram": { - "content": null, + "content": [ + [ + "versions.yml:md5,0310a792526148b05f434944a1167835" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T14:32:23.38326412" + "timestamp": "2024-08-07T10:09:07.307311" } } \ No newline at end of file diff --git a/modules/nf-core/cnvkit/call/environment.yml b/modules/nf-core/cnvkit/call/environment.yml index 3b96de7008..152af54d19 100644 --- a/modules/nf-core/cnvkit/call/environment.yml +++ b/modules/nf-core/cnvkit/call/environment.yml @@ -1,7 +1,5 @@ -name: cnvkit_call channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvkit=0.9.10 diff --git a/modules/nf-core/cnvkit/call/main.nf b/modules/nf-core/cnvkit/call/main.nf index fade6df0fd..06d51e857e 100644 --- a/modules/nf-core/cnvkit/call/main.nf +++ b/modules/nf-core/cnvkit/call/main.nf @@ -33,4 +33,15 @@ process CNVKIT_CALL { cnvkit: \$(cnvkit.py version | sed -e 's/cnvkit v//g') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.cns + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvkit: \$(cnvkit.py version | sed -e 's/cnvkit v//g') + END_VERSIONS + """ } diff --git a/modules/nf-core/cnvkit/call/meta.yml b/modules/nf-core/cnvkit/call/meta.yml index 64dc336869..b3b4a4a78a 100644 --- a/modules/nf-core/cnvkit/call/meta.yml +++ b/modules/nf-core/cnvkit/call/meta.yml @@ -1,5 +1,6 @@ name: cnvkit_call -description: Given segmented log2 ratio estimates (.cns), derive each segment’s absolute integer copy number +description: Given segmented log2 ratio estimates (.cns), derive each segment’s absolute + integer copy number keywords: - cnvkit - bam @@ -12,34 +13,37 @@ tools: homepage: https://cnvkit.readthedocs.io/en/stable/index.html documentation: https://cnvkit.readthedocs.io/en/stable/index.html licence: ["Apache-2.0"] + identifier: biotools:cnvkit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - cns: - type: file - description: CNVKit CNS file. - pattern: "*.cns" - - vcf: - type: file - description: Germline VCF file for BAF. - pattern: "*.vcf{,.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cns: + type: file + description: CNVKit CNS file. + pattern: "*.cns" + - vcf: + type: file + description: Germline VCF file for BAF. + pattern: "*.vcf{,.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + - cns: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cns": + type: file + description: CNS file. + pattern: "*.cns" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - output: - type: file - description: File containing copy number information in new format. - pattern: "*.{bed,vcf,cdt,jtv,seg,interval_count}" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@adamrtalbot" - "@priesgo" diff --git a/modules/nf-core/cnvkit/call/tests/main.nf.test b/modules/nf-core/cnvkit/call/tests/main.nf.test new file mode 100644 index 0000000000..6012ef137f --- /dev/null +++ b/modules/nf-core/cnvkit/call/tests/main.nf.test @@ -0,0 +1,83 @@ + +nextflow_process { + + name "Test Process CNVKIT_CALL" + script "../main.nf" + process "CNVKIT_CALL" + + tag "modules" + tag "modules_nfcore" + tag "cnvkit" + tag "cnvkit/call" + + test("test-cnvkit-call") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/etal/cnvkit/v0.9.9/test/formats/amplicon.cns', checkIfExists: true), + [] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-cnvkit-call-with-vcf") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/etal/cnvkit/v0.9.9/test/formats/amplicon.cns', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-cnvkit-call-with-vcf-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/etal/cnvkit/v0.9.9/test/formats/amplicon.cns', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/cnvkit/call/tests/main.nf.test.snap b/modules/nf-core/cnvkit/call/tests/main.nf.test.snap new file mode 100644 index 0000000000..844a415ecf --- /dev/null +++ b/modules/nf-core/cnvkit/call/tests/main.nf.test.snap @@ -0,0 +1,107 @@ +{ + "test-cnvkit-call": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cns:md5,7746029caf9ecc134a075a2d50be269f" + ] + ], + "1": [ + "versions.yml:md5,f47253e21b991f72a741d6b5c9a351a5" + ], + "cns": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cns:md5,7746029caf9ecc134a075a2d50be269f" + ] + ], + "versions": [ + "versions.yml:md5,f47253e21b991f72a741d6b5c9a351a5" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T22:24:41.048386" + }, + "test-cnvkit-call-with-vcf": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cns:md5,2a4b3da8a8131a4ed4ae902a9f96a405" + ] + ], + "1": [ + "versions.yml:md5,f47253e21b991f72a741d6b5c9a351a5" + ], + "cns": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cns:md5,2a4b3da8a8131a4ed4ae902a9f96a405" + ] + ], + "versions": [ + "versions.yml:md5,f47253e21b991f72a741d6b5c9a351a5" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T22:24:50.134984" + }, + "test-cnvkit-call-with-vcf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cns:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,f47253e21b991f72a741d6b5c9a351a5" + ], + "cns": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cns:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f47253e21b991f72a741d6b5c9a351a5" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T22:24:56.743954" + } +} \ No newline at end of file diff --git a/modules/nf-core/cnvkit/export/environment.yml b/modules/nf-core/cnvkit/export/environment.yml index a61b2765f6..152af54d19 100644 --- a/modules/nf-core/cnvkit/export/environment.yml +++ b/modules/nf-core/cnvkit/export/environment.yml @@ -1,7 +1,5 @@ -name: cnvkit_export channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvkit=0.9.10 diff --git a/modules/nf-core/cnvkit/export/meta.yml b/modules/nf-core/cnvkit/export/meta.yml index 836baa1b58..a573e03bac 100644 --- a/modules/nf-core/cnvkit/export/meta.yml +++ b/modules/nf-core/cnvkit/export/meta.yml @@ -1,5 +1,6 @@ name: cnvkit_export -description: Convert copy number ratio tables (.cnr files) or segments (.cns) to another format. +description: Convert copy number ratio tables (.cnr files) or segments (.cns) to another + format. keywords: - cnvkit - copy number @@ -11,30 +12,32 @@ tools: homepage: https://cnvkit.readthedocs.io/en/stable/index.html documentation: https://cnvkit.readthedocs.io/en/stable/index.html licence: ["Apache-2.0"] + identifier: biotools:cnvkit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - cns: - type: file - description: CNVKit CNS file. - pattern: "*.cns" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cns: + type: file + description: CNVKit CNS file. + pattern: "*.cns" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + - output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${suffix}: + type: file + description: Output file - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - cns: - type: file - description: File containing copy number segment information - pattern: "*.{cns}" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@adamrtalbot" - "@priesgo" diff --git a/modules/nf-core/cnvkit/genemetrics/environment.yml b/modules/nf-core/cnvkit/genemetrics/environment.yml index 14deb0ef73..152af54d19 100644 --- a/modules/nf-core/cnvkit/genemetrics/environment.yml +++ b/modules/nf-core/cnvkit/genemetrics/environment.yml @@ -1,7 +1,5 @@ -name: cnvkit_genemetrics channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvkit=0.9.10 diff --git a/modules/nf-core/cnvkit/genemetrics/main.nf b/modules/nf-core/cnvkit/genemetrics/main.nf old mode 100755 new mode 100644 diff --git a/modules/nf-core/cnvkit/genemetrics/meta.yml b/modules/nf-core/cnvkit/genemetrics/meta.yml old mode 100755 new mode 100644 index 4bef28c7d5..6b110accc2 --- a/modules/nf-core/cnvkit/genemetrics/meta.yml +++ b/modules/nf-core/cnvkit/genemetrics/meta.yml @@ -12,34 +12,47 @@ tools: homepage: https://cnvkit.readthedocs.io/en/stable/index.html documentation: https://cnvkit.readthedocs.io/en/stable/index.html licence: ["Apache-2.0"] + identifier: biotools:cnvkit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - cnr: - type: file - description: CNR file - pattern: "*.cnr" - - cns: - type: file - description: CNS file [Optional] - pattern: "*.cns" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cnr: + type: file + description: CNR file + pattern: "*.cnr" + - cns: + type: file + description: CNS file [Optional] + pattern: "*.cns" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - txt: - type: file - description: TXT file - pattern: "*.txt" + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: TSV file + pattern: "*.tsv" + - cnn: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cnn": + type: file + description: CNN file + pattern: "*.cnn" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@adamrtalbot" - "@marrip" diff --git a/modules/nf-core/cnvkit/genemetrics/tests/main.nf.test b/modules/nf-core/cnvkit/genemetrics/tests/main.nf.test new file mode 100644 index 0000000000..a2d8b4580c --- /dev/null +++ b/modules/nf-core/cnvkit/genemetrics/tests/main.nf.test @@ -0,0 +1,59 @@ + +nextflow_process { + + name "Test Process CNVKIT_GENEMETRICS" + script "../main.nf" + process "CNVKIT_GENEMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "cnvkit" + tag "cnvkit/genemetrics" + + test("test-cnvkit-genemetrics-with-cns") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/etal/cnvkit/v0.9.9/test/formats/amplicon.cnr', checkIfExists: true), + file('https://raw.githubusercontent.com/etal/cnvkit/v0.9.9/test/formats/amplicon.cns', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-cnvkit-genemetrics-without-cns") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/etal/cnvkit/v0.9.9/test/formats/amplicon.cnr', checkIfExists: true), + [] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/cnvkit/genemetrics/tests/main.nf.test.snap b/modules/nf-core/cnvkit/genemetrics/tests/main.nf.test.snap new file mode 100644 index 0000000000..53ed81f370 --- /dev/null +++ b/modules/nf-core/cnvkit/genemetrics/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "test-cnvkit-genemetrics-without-cns": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,622e154a107301da6f456b4b3196b79d" + ] + ], + "1": [ + "versions.yml:md5,d3f23da560774564afa9c69e2d171e5f" + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,622e154a107301da6f456b4b3196b79d" + ] + ], + "versions": [ + "versions.yml:md5,d3f23da560774564afa9c69e2d171e5f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-28T11:17:13.604558" + }, + "test-cnvkit-genemetrics-with-cns": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,2a18eca552ea33faab1d39795d9e051c" + ] + ], + "1": [ + "versions.yml:md5,d3f23da560774564afa9c69e2d171e5f" + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,2a18eca552ea33faab1d39795d9e051c" + ] + ], + "versions": [ + "versions.yml:md5,d3f23da560774564afa9c69e2d171e5f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-28T11:17:04.195978" + } +} \ No newline at end of file diff --git a/modules/nf-core/cnvkit/reference/environment.yml b/modules/nf-core/cnvkit/reference/environment.yml index e3070044d0..b683406cc5 100644 --- a/modules/nf-core/cnvkit/reference/environment.yml +++ b/modules/nf-core/cnvkit/reference/environment.yml @@ -1,7 +1,5 @@ -name: cnvkit_reference channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvkit=0.9.11 diff --git a/modules/nf-core/cnvkit/reference/meta.yml b/modules/nf-core/cnvkit/reference/meta.yml index 8747893b6f..965a7b5795 100644 --- a/modules/nf-core/cnvkit/reference/meta.yml +++ b/modules/nf-core/cnvkit/reference/meta.yml @@ -15,33 +15,32 @@ tools: tool_dev_url: https://github.com/etal/cnvkit doi: 10.1371/journal.pcbi.1004873 licence: ["Apache-2.0"] + identifier: biotools:cnvkit input: - - fasta: - type: file - description: File containing reference genome - pattern: "*.{fasta}" - - targets: - type: file - description: File containing genomic regions - pattern: "*.{bed}" - - antitargets: - type: file - description: File containing off-target genomic regions - pattern: "*.{bed}" + - - fasta: + type: file + description: File containing reference genome + pattern: "*.{fasta}" + - - targets: + type: file + description: File containing genomic regions + pattern: "*.{bed}" + - - antitargets: + type: file + description: File containing off-target genomic regions + pattern: "*.{bed}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - cnn: - type: file - description: File containing a copy-number reference (required for CNV calling in tumor_only mode) - pattern: "*.{cnn}" + - "*.cnn": + type: file + description: File containing a copy-number reference (required for CNV calling + in tumor_only mode) + pattern: "*.{cnn}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@adamrtalbot" - "@priesgo" diff --git a/modules/nf-core/cnvkit/reference/tests/main.nf.test b/modules/nf-core/cnvkit/reference/tests/main.nf.test index 47039e3086..f03dd231f3 100644 --- a/modules/nf-core/cnvkit/reference/tests/main.nf.test +++ b/modules/nf-core/cnvkit/reference/tests/main.nf.test @@ -24,8 +24,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("version") }, - { assert snapshot(file(process.out.cnn.get(0)).readLines()[0]).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/cnvkit/reference/tests/main.nf.test.snap b/modules/nf-core/cnvkit/reference/tests/main.nf.test.snap index 353f6378a6..eb5dee671d 100644 --- a/modules/nf-core/cnvkit/reference/tests/main.nf.test.snap +++ b/modules/nf-core/cnvkit/reference/tests/main.nf.test.snap @@ -1,13 +1,26 @@ { "human - [fasta, bed]": { "content": [ - "chromosome\tstart\tend\tgene\tlog2\tdepth\tgc\trmask\tspread" + { + "0": [ + "multi_intervals.reference.cnn:md5,7c4a7902f5ab101b1f9d6038d331b3d9" + ], + "1": [ + "versions.yml:md5,85ff8911567b4e1245b883541ad3cc1e" + ], + "cnn": [ + "multi_intervals.reference.cnn:md5,7c4a7902f5ab101b1f9d6038d331b3d9" + ], + "versions": [ + "versions.yml:md5,85ff8911567b4e1245b883541ad3cc1e" + ] + } ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.0" }, - "timestamp": "2024-05-13T14:00:12.102517" + "timestamp": "2024-06-10T10:25:05.273892" }, "human - [fasta, bed] - stub": { "content": [ @@ -31,17 +44,5 @@ "nextflow": "23.10.0" }, "timestamp": "2024-05-13T14:00:30.095718" - }, - "version": { - "content": [ - [ - "versions.yml:md5,85ff8911567b4e1245b883541ad3cc1e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" - }, - "timestamp": "2024-05-13T14:00:12.090836" } } \ No newline at end of file diff --git a/modules/nf-core/controlfreec/assesssignificance/controlfreec-assesssignificance.diff b/modules/nf-core/controlfreec/assesssignificance/controlfreec-assesssignificance.diff index 96691730cd..49c0c9af21 100644 --- a/modules/nf-core/controlfreec/assesssignificance/controlfreec-assesssignificance.diff +++ b/modules/nf-core/controlfreec/assesssignificance/controlfreec-assesssignificance.diff @@ -1,4 +1,5 @@ Changes in module 'nf-core/controlfreec/assesssignificance' +Changes in 'controlfreec/assesssignificance/main.nf': --- modules/nf-core/controlfreec/assesssignificance/main.nf +++ modules/nf-core/controlfreec/assesssignificance/main.nf @@ -4,8 +4,8 @@ @@ -31,57 +32,19 @@ Changes in module 'nf-core/controlfreec/assesssignificance' touch ${prefix}.p.value.txt +'modules/nf-core/controlfreec/assesssignificance/meta.yml' is unchanged +Changes in 'controlfreec/assesssignificance/environment.yml': --- modules/nf-core/controlfreec/assesssignificance/environment.yml +++ modules/nf-core/controlfreec/assesssignificance/environment.yml -@@ -4,4 +4,4 @@ +@@ -2,4 +2,4 @@ + - conda-forge - bioconda - - defaults dependencies: - - bioconda::control-freec=11.6b + - bioconda::control-freec=11.6 ---- modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap -+++ modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap -@@ -13,7 +13,7 @@ - ] - ], - "1": [ -- "versions.yml:md5,81750d0b4c0e563bd392720d09ae024f" -+ "versions.yml:md5,0a11399a3318a7c75460c4eb71d58766" - ], - "p_value_txt": [ - [ -@@ -26,26 +26,26 @@ - ] - ], - "versions": [ -- "versions.yml:md5,81750d0b4c0e563bd392720d09ae024f" -+ "versions.yml:md5,0a11399a3318a7c75460c4eb71d58766" - ] - } - ], - "meta": { - "nf-test": "0.8.4", -- "nextflow": "23.10.0" -+ "nextflow": "24.02.0" - }, -- "timestamp": "2024-03-26T16:24:34.84551" -+ "timestamp": "2024-04-05T16:15:36.357267" - }, - "version": { - "content": [ - [ -- "versions.yml:md5,81750d0b4c0e563bd392720d09ae024f" -+ "versions.yml:md5,0a11399a3318a7c75460c4eb71d58766" - ] - ], - "meta": { - "nf-test": "0.8.4", -- "nextflow": "23.10.0" -+ "nextflow": "24.02.0" - }, -- "timestamp": "2024-03-26T17:23:22.833417" -+ "timestamp": "2024-04-05T16:14:54.943475" - } - } +'modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap' is unchanged +'modules/nf-core/controlfreec/assesssignificance/tests/nextflow.config' is unchanged +'modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test' is unchanged +'modules/nf-core/controlfreec/assesssignificance/tests/tags.yml' is unchanged ************************************************************ diff --git a/modules/nf-core/controlfreec/assesssignificance/environment.yml b/modules/nf-core/controlfreec/assesssignificance/environment.yml index cb0b9c17c3..444d29ddd4 100644 --- a/modules/nf-core/controlfreec/assesssignificance/environment.yml +++ b/modules/nf-core/controlfreec/assesssignificance/environment.yml @@ -1,7 +1,5 @@ -name: controlfreec_assesssignificance channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::control-freec=11.6 diff --git a/modules/nf-core/controlfreec/assesssignificance/meta.yml b/modules/nf-core/controlfreec/assesssignificance/meta.yml index b8cda6dd50..8a6ab47edb 100644 --- a/modules/nf-core/controlfreec/assesssignificance/meta.yml +++ b/modules/nf-core/controlfreec/assesssignificance/meta.yml @@ -1,5 +1,6 @@ name: controlfreec_assesssignificance -description: Add both Wilcoxon test and Kolmogorov-Smirnov test p-values to each CNV output of FREEC +description: Add both Wilcoxon test and Kolmogorov-Smirnov test p-values to each CNV + output of FREEC keywords: - cna - cnv @@ -8,41 +9,49 @@ keywords: - tumor-only tools: - controlfreec/assesssignificance: - description: Copy number and genotype annotation from whole genome and whole exome sequencing data. + description: Copy number and genotype annotation from whole genome and whole exome + sequencing data. homepage: http://boevalab.inf.ethz.ch/FREEC documentation: http://boevalab.inf.ethz.ch/FREEC/tutorial.html tool_dev_url: https://github.com/BoevaLab/FREEC/ doi: "10.1093/bioinformatics/btq635" licence: ["GPL >=2"] + identifier: "" input: # Only when we have meta - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - cnvs: - type: file - description: _CNVs file generated by FREEC - pattern: "*._CNVs" - - ratio: - type: file - description: ratio file generated by FREEC - pattern: "*.ratio.txt" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cnvs: + type: file + description: _CNVs file generated by FREEC + pattern: "*._CNVs" + - ratio: + type: file + description: ratio file generated by FREEC + pattern: "*.ratio.txt" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - p_value_txt: - type: file - description: CNV file containing p_values for each call - pattern: "*.p.value.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.p.value.txt": + type: file + description: CNV file containing p_values for each call + pattern: "*.p.value.txt" + - ue_txt: + type: file + description: CNV file containing p_values for each call + pattern: "*.p.value.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap b/modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap index 0498b9c5be..ab354908ec 100644 --- a/modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap +++ b/modules/nf-core/controlfreec/assesssignificance/tests/main.nf.test.snap @@ -13,7 +13,7 @@ ] ], "1": [ - "versions.yml:md5,0a11399a3318a7c75460c4eb71d58766" + "versions.yml:md5,81750d0b4c0e563bd392720d09ae024f" ], "p_value_txt": [ [ @@ -26,26 +26,26 @@ ] ], "versions": [ - "versions.yml:md5,0a11399a3318a7c75460c4eb71d58766" + "versions.yml:md5,81750d0b4c0e563bd392720d09ae024f" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "23.10.0" }, - "timestamp": "2024-04-05T16:15:36.357267" + "timestamp": "2024-03-26T16:24:34.84551" }, "version": { "content": [ [ - "versions.yml:md5,0a11399a3318a7c75460c4eb71d58766" + "versions.yml:md5,81750d0b4c0e563bd392720d09ae024f" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "23.10.0" }, - "timestamp": "2024-04-05T16:14:54.943475" + "timestamp": "2024-03-26T17:23:22.833417" } } \ No newline at end of file diff --git a/modules/nf-core/controlfreec/freec/environment.yml b/modules/nf-core/controlfreec/freec/environment.yml index cb76c6ba93..f6b64529bc 100644 --- a/modules/nf-core/controlfreec/freec/environment.yml +++ b/modules/nf-core/controlfreec/freec/environment.yml @@ -1,7 +1,5 @@ -name: controlfreec_freec channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::control-freec=11.6b diff --git a/modules/nf-core/controlfreec/freec/meta.yml b/modules/nf-core/controlfreec/freec/meta.yml index 1442bbe44a..6b35a38be7 100644 --- a/modules/nf-core/controlfreec/freec/meta.yml +++ b/modules/nf-core/controlfreec/freec/meta.yml @@ -1,5 +1,6 @@ name: controlfreec_freec -description: Copy number and genotype annotation from whole genome and whole exome sequencing data +description: Copy number and genotype annotation from whole genome and whole exome + sequencing data keywords: - cna - cnv @@ -8,172 +9,176 @@ keywords: - tumor-only tools: - controlfreec/freec: - description: Copy number and genotype annotation from whole genome and whole exome sequencing data. + description: Copy number and genotype annotation from whole genome and whole exome + sequencing data. homepage: http://boevalab.inf.ethz.ch/FREEC documentation: http://boevalab.inf.ethz.ch/FREEC/tutorial.html tool_dev_url: https://github.com/BoevaLab/FREEC/ doi: "10.1093/bioinformatics/btq635" licence: ["GPL >=2"] + identifier: "" input: - - args: - type: map - description: | - Groovy Map containing tool parameters. MUST follow the structure/keywords below and be provided via modules.config. - Parameters marked as (optional) can be removed from the map, if they are not set. All values must be surrounded by quotes, meta map parameters can be set with, i.e. `sex = meta.sex`: - For default values, please check the documentation above. - - ``` - { - [ - "general" :[ - "bedgraphoutput": (optional), - "breakpointthreshold": (optional), - "breakpointtype": (optional), - "coefficientofvariation": (optional), - "contamination": (optional), - "contaminationadjustment": (optional), - "degree": (optional), - "forcegccontentnormalization": (optional), - "gccontentprofile": (optional), - "intercept": (optional), - "mincnalength": (optional), - "minmappabilityperwindow": (optional), - "minexpectedgc": (optional), - "maxexpectedgc": (optional), - "minimalsubclonepresence": (optional), - "noisydata": (optional), - "ploidy": (optional), - "printNA": (optional), - "readcountthreshold": (optional), - "sex": (optional), - "step": (optional), - "telocentromeric": (optional), - "uniquematch": (optional), - "window": (optional) - ], - "control":[ - "inputformat": (required), - "mateorientation": (optional), - ], - "sample":[ - "inputformat": (required), - "mateorientation": (optional), - ], - "BAF":[ - "minimalcoverageperposition": (optional), - "minimalqualityperposition": (optional), - "shiftinquality": (optional) - ] - ] - } - ``` - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - mateFile_normal: - type: file - description: File with mapped reads - pattern: "*.{sam,bam,pileup(.gz),bowtie(.gz),eland(.gz),arachne(.gz),psl(.gz),bed(.gz)}" - - mateFile_tumor: - type: file - description: File with mapped reads - pattern: "*.{sam,bam,pileup(.gz),bowtie(.gz),eland(.gz),arachne(.gz),psl(.gz),bed(.gz)}" - - cpn_normal: - type: file - description: Raw copy number profiles (optional) - pattern: "*.cpn" - - cpn_tumor: - type: file - description: Raw copy number profiles (optional) - pattern: "*.cpn" - - minipileup_normal: - type: file - description: miniPileup file from previous run (optional) - pattern: "*.pileup" - - minipileup_tumor: - type: file - description: miniPileup file from previous run (optional) - pattern: "*.pileup" - - fasta: - type: file - description: Reference file (optional; required if args 'makePileup' is set) - pattern: "*.{fasta,fna,fa}" - - fai: - type: file - description: Fasta index - pattern: "*.fai" - - snp_position: - type: file - description: Path to a BED or VCF file with SNP positions to create a mini pileup file from the initial BAM file provided in mateFile (optional) - pattern: "*.{bed,vcf}" - - known_snps: - type: file - description: File with known SNPs - pattern: "*.{vcf,vcf.gz}" - - known_snps_tbi: - type: file - description: Index of known_snps - pattern: "*.tbi" - - chr_directory: - type: file - description: Path to directory with chromosome fasta files (optional, required if gccontentprofile is not provided) - pattern: "*/" - - mappability: - type: file - description: Contains information of mappable positions (optional) - pattern: "*.gem" - - target_bed: - type: file - description: Sorted bed file containing capture regions (optional) - pattern: "*.bed" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - mpileup_normal: + type: file + description: miniPileup file + - mpileup_tumor: + type: file + description: miniPileup file + - cpn_normal: + type: file + description: Raw copy number profiles (optional) + pattern: "*.cpn" + - cpn_tumor: + type: file + description: Raw copy number profiles (optional) + pattern: "*.cpn" + - minipileup_normal: + type: file + description: miniPileup file from previous run (optional) + pattern: "*.pileup" + - minipileup_tumor: + type: file + description: miniPileup file from previous run (optional) + pattern: "*.pileup" + - - fasta: + type: file + description: Reference file (optional; required if args 'makePileup' is set) + pattern: "*.{fasta,fna,fa}" + - - fai: + type: file + description: Fasta index + pattern: "*.fai" + - - snp_position: + type: file + description: Path to a BED or VCF file with SNP positions to create a mini pileup + file from the initial BAM file provided in mateFile (optional) + pattern: "*.{bed,vcf}" + - - known_snps: + type: file + description: File with known SNPs + pattern: "*.{vcf,vcf.gz}" + - - known_snps_tbi: + type: file + description: Index of known_snps + pattern: "*.tbi" + - - chr_directory: + type: file + description: Path to directory with chromosome fasta files (optional, required + if gccontentprofile is not provided) + pattern: "*/" + - - mappability: + type: file + description: Contains information of mappable positions (optional) + pattern: "*.gem" + - - target_bed: + type: file + description: Sorted bed file containing capture regions (optional) + pattern: "*.bed" + - - gccontent_profile: + type: file + description: File with GC-content profile output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bedgraph: - type: file - description: Bedgraph format for the UCSC genome browser - pattern: ".bedgraph" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_ratio.BedGraph": + type: file + description: Bedgraph format for the UCSC genome browser + pattern: ".bedgraph" - control_cpn: - type: file - description: files with raw copy number profiles - pattern: "*_control.cpn" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_control.cpn": + type: file + description: files with raw copy number profiles + pattern: "*_control.cpn" - sample_cpn: - type: file - description: files with raw copy number profiles - pattern: "*_sample.cpn" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_sample.cpn": + type: file + description: files with raw copy number profiles + pattern: "*_sample.cpn" - gcprofile_cpn: - type: file - description: file with GC-content profile. - pattern: "GC_profile.*.cpn" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - GC_profile.*.cpn: + type: file + description: file with GC-content profile. + pattern: "GC_profile.*.cpn" - BAF: - type: file - description: file B-allele frequencies for each possibly heterozygous SNP position - pattern: "*_BAF.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_BAF.txt": + type: file + description: file B-allele frequencies for each possibly heterozygous SNP position + pattern: "*_BAF.txt" - CNV: - type: file - description: file with coordinates of predicted copy number alterations. - pattern: "*_CNVs" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_CNVs": + type: file + description: file with coordinates of predicted copy number alterations. + pattern: "*_CNVs" - info: - type: file - description: parsable file with information about FREEC run - pattern: "*_info.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_info.txt": + type: file + description: parsable file with information about FREEC run + pattern: "*_info.txt" - ratio: - type: file - description: file with ratios and predicted copy number alterations for each window - pattern: "*_ratio.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_ratio.txt": + type: file + description: file with ratios and predicted copy number alterations for each + window + pattern: "*_ratio.txt" - config: - type: file - description: Config file used to run Control-FREEC - pattern: "config.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - config.txt: + type: file + description: Config file used to run Control-FREEC + pattern: "config.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/controlfreec/freec/tests/main.nf.test b/modules/nf-core/controlfreec/freec/tests/main.nf.test index 90312aebc8..8e38becdfd 100644 --- a/modules/nf-core/controlfreec/freec/tests/main.nf.test +++ b/modules/nf-core/controlfreec/freec/tests/main.nf.test @@ -70,9 +70,9 @@ nextflow_process { path(process.out.BAF.get(0).get(1)).readLines()[0], path(process.out.ratio.get(0).get(1)).readLines()[0], path(process.out.config.get(0).get(1)).readLines()[0], - path(process.out.info.get(0).get(1)).readLines()[0] - ).match() }, - { assert snapshot(process.out.versions).match("version") } + path(process.out.info.get(0).get(1)).readLines()[0], + process.out.versions + ).match() } ) } @@ -159,7 +159,5 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } - } diff --git a/modules/nf-core/controlfreec/freec/tests/main.nf.test.snap b/modules/nf-core/controlfreec/freec/tests/main.nf.test.snap index 39850d0256..eb0c468ae6 100644 --- a/modules/nf-core/controlfreec/freec/tests/main.nf.test.snap +++ b/modules/nf-core/controlfreec/freec/tests/main.nf.test.snap @@ -178,21 +178,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-26T13:42:56.629043" - }, - "version": { - "content": [ - [ - "versions.yml:md5,e704fc0e6d1ac333dc419498fa128769" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.0" - }, - "timestamp": "2024-03-27T10:01:40.977048" + "timestamp": "2024-07-09T10:41:07.003311" }, "human - mpileup": { "content": [ @@ -201,12 +189,15 @@ "Chromosome\tPosition\tBAF\tFittedA\tFittedB\tA\tB\tuncertainty", "Chromosome\tStart\tRatio\tMedianRatio\tCopyNumber\tBAF\testimatedBAF\tGenotype\tUncertaintyOfGT", "[general]", - "Program_Version\tv11.6" + "Program_Version\tv11.6", + [ + "versions.yml:md5,e704fc0e6d1ac333dc419498fa128769" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-27T10:14:50.936823" + "timestamp": "2024-07-09T10:40:42.538035" } } \ No newline at end of file diff --git a/modules/nf-core/controlfreec/freec2bed/environment.yml b/modules/nf-core/controlfreec/freec2bed/environment.yml index 12601ffa55..f6b64529bc 100644 --- a/modules/nf-core/controlfreec/freec2bed/environment.yml +++ b/modules/nf-core/controlfreec/freec2bed/environment.yml @@ -1,7 +1,5 @@ -name: controlfreec_freec2bed channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::control-freec=11.6b diff --git a/modules/nf-core/controlfreec/freec2bed/meta.yml b/modules/nf-core/controlfreec/freec2bed/meta.yml index b10c8ab377..e01f870f4d 100644 --- a/modules/nf-core/controlfreec/freec2bed/meta.yml +++ b/modules/nf-core/controlfreec/freec2bed/meta.yml @@ -8,36 +8,40 @@ keywords: - tumor-only tools: - controlfreec: - description: Copy number and genotype annotation from whole genome and whole exome sequencing data. + description: Copy number and genotype annotation from whole genome and whole exome + sequencing data. homepage: http://boevalab.inf.ethz.ch/FREEC documentation: http://boevalab.inf.ethz.ch/FREEC/tutorial.html tool_dev_url: https://github.com/BoevaLab/FREEC/ doi: "10.1093/bioinformatics/btq635" licence: ["GPL >=2"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ratio: - type: file - description: ratio file generated by FREEC - pattern: "*.ratio.txt" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ratio: + type: file + description: ratio file generated by FREEC + pattern: "*.ratio.txt" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bed: - type: file - description: Bed file - pattern: "*.bed" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: Bed file + pattern: "*.bed" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/controlfreec/freec2circos/environment.yml b/modules/nf-core/controlfreec/freec2circos/environment.yml index 1915abfd7f..f6b64529bc 100644 --- a/modules/nf-core/controlfreec/freec2circos/environment.yml +++ b/modules/nf-core/controlfreec/freec2circos/environment.yml @@ -1,7 +1,5 @@ -name: controlfreec_freec2circos channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::control-freec=11.6b diff --git a/modules/nf-core/controlfreec/freec2circos/meta.yml b/modules/nf-core/controlfreec/freec2circos/meta.yml index 2c6b77d611..5368c0429e 100644 --- a/modules/nf-core/controlfreec/freec2circos/meta.yml +++ b/modules/nf-core/controlfreec/freec2circos/meta.yml @@ -8,36 +8,40 @@ keywords: - tumor-only tools: - controlfreec: - description: Copy number and genotype annotation from whole genome and whole exome sequencing data. + description: Copy number and genotype annotation from whole genome and whole exome + sequencing data. homepage: http://boevalab.inf.ethz.ch/FREEC documentation: http://boevalab.inf.ethz.ch/FREEC/tutorial.html tool_dev_url: https://github.com/BoevaLab/FREEC/ doi: "10.1093/bioinformatics/btq635" licence: ["GPL >=2"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ratio: - type: file - description: ratio file generated by FREEC - pattern: "*.ratio.txt" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ratio: + type: file + description: ratio file generated by FREEC + pattern: "*.ratio.txt" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - circos: - type: file - description: Txt file - pattern: "*.circos.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.circos.txt": + type: file + description: Txt file + pattern: "*.circos.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/controlfreec/makegraph2/environment.yml b/modules/nf-core/controlfreec/makegraph2/environment.yml index 720c2e950e..f6b64529bc 100644 --- a/modules/nf-core/controlfreec/makegraph2/environment.yml +++ b/modules/nf-core/controlfreec/makegraph2/environment.yml @@ -1,7 +1,5 @@ -name: controlfreec_makegraph2 channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::control-freec=11.6b diff --git a/modules/nf-core/controlfreec/makegraph2/meta.yml b/modules/nf-core/controlfreec/makegraph2/meta.yml index 1325da4a8b..6614b39ba9 100644 --- a/modules/nf-core/controlfreec/makegraph2/meta.yml +++ b/modules/nf-core/controlfreec/makegraph2/meta.yml @@ -8,51 +8,65 @@ keywords: - tumor-only tools: - controlfreec: - description: Copy number and genotype annotation from whole genome and whole exome sequencing data. + description: Copy number and genotype annotation from whole genome and whole exome + sequencing data. homepage: http://boevalab.inf.ethz.ch/FREEC documentation: http://boevalab.inf.ethz.ch/FREEC/tutorial.html tool_dev_url: https://github.com/BoevaLab/FREEC/ doi: "10.1093/bioinformatics/btq635" licence: ["GPL >=2"] + identifier: "" input: # Only when we have meta - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ratio: - type: file - description: ratio file generated by FREEC - pattern: "*.ratio.txt" - - baf: - type: file - description: .BAF file generated by FREEC - pattern: "*.BAF" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ratio: + type: file + description: ratio file generated by FREEC + pattern: "*.ratio.txt" + - baf: + type: file + description: .BAF file generated by FREEC + pattern: "*.BAF" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - png_baf: - type: file - description: Image of BAF plot - pattern: "*_BAF.png" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_BAF.png": + type: file + description: Image of BAF plot + pattern: "*_BAF.png" - png_ratio_log2: - type: file - description: Image of ratio log2 plot - pattern: "*_ratio.log2.png" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_ratio.log2.png": + type: file + description: Image of ratio log2 plot + pattern: "*_ratio.log2.png" - png_ratio: - type: file - description: Image of ratio plot - pattern: "*_ratio.png" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_ratio.png": + type: file + description: Image of ratio plot + pattern: "*_ratio.png" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" diff --git a/modules/nf-core/deepvariant/README.md b/modules/nf-core/deepvariant/README.md deleted file mode 100644 index ca112a7d33..0000000000 --- a/modules/nf-core/deepvariant/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Conda is not supported at the moment - -The [bioconda](https://bioconda.github.io/recipes/deepvariant/README.html) recipe is not fully working as expected - -Hence, we are using the docker container provided by the authors of the tool: - -- [google/deepvariant](https://hub.docker.com/r/google/deepvariant) - -This image is mirrored on the [nf-core quay.io](https://quay.io/repository/nf-core/deepvariant) for convenience. diff --git a/modules/nf-core/deepvariant/callvariants/main.nf b/modules/nf-core/deepvariant/callvariants/main.nf new file mode 100644 index 0000000000..668b51ae4c --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/main.nf @@ -0,0 +1,58 @@ + +process DEEPVARIANT_CALLVARIANTS { + tag "$meta.id" + label 'process_high' + + //Conda is not supported at the moment + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(make_examples_tfrecords) + + output: + tuple val(meta), path("${prefix}.call-*-of-*.tfrecord.gz"), emit: call_variants_tfrecords + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + + def matcher = make_examples_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ + if (!matcher.matches()) { + throw new IllegalArgumentException("tfrecord baseName '" + make_examples_tfrecords[0].baseName + "' doesn't match the expected pattern") + } + def examples_tfrecord_name = matcher[0][1] + def shardCount = matcher[0][2] + // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz + def examples_tfrecords_logical_name = "${examples_tfrecord_name}@${shardCount}.gz" + + """ + /opt/deepvariant/bin/call_variants \\ + ${args} \\ + --outfile "${prefix}.call.tfrecord.gz" \\ + --examples "${examples_tfrecords_logical_name}" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.call-00000-of-00001.tfrecord.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/callvariants/meta.yml b/modules/nf-core/deepvariant/callvariants/meta.yml new file mode 100644 index 0000000000..4507192ca2 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/meta.yml @@ -0,0 +1,48 @@ +name: deepvariant_callvariants +description: Call variants from the examples produced by make_examples +keywords: + - variant calling + - machine learning + - neural network +tools: + - deepvariant: + description: DeepVariant is an analysis pipeline that uses a deep neural network + to call genetic variants from next-generation DNA sequencing data + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - make_examples_tfrecords: + type: file + description: The actual sharded input files, from DEEPVARIANT_MAKEEXAMPLES process + pattern: "*.gz" +output: + - call_variants_tfrecords: + - meta: + type: list + description: | + Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. + - ${prefix}.call-*-of-*.tfrecord.gz: + type: list + description: | + Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. + - versions: + - versions.yml: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" + - "@fa2k" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test new file mode 100644 index 0000000000..72f04b51f3 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test @@ -0,0 +1,85 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_CALLVARIANTS" + script "../main.nf" + config "./nextflow.config" + process "DEEPVARIANT_CALLVARIANTS" + + tag "deepvariant/makeexamples" + tag "deepvariant/callvariants" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - wgs") { + setup { + run("DEEPVARIANT_MAKEEXAMPLES") { + script "../../makeexamples/main.nf" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + } + when { + process { + """ + input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.call_variants_tfrecords.get(0).get(0) == [ id:'test', single_end:false ] }, + // The tfrecord binary representation is not stable, but we check the name of the output. + { assert snapshot(file(process.out.call_variants_tfrecords.get(0).get(1)).name).match("homo_sapiens-wgs-call_variants_tfrecords-filenames")}, + { assert snapshot(process.out.versions).match("versions") }, + ) + } + } + + test("homo_sapiens - wgs - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta + [] // No input paths are needed in stub mode + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap new file mode 100644 index 0000000000..8f04ede70e --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap @@ -0,0 +1,59 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:38:47.927241" + }, + "homo_sapiens-wgs-call_variants_tfrecords-filenames": { + "content": [ + "test.call-00000-of-00001.tfrecord.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T17:04:33.276938" + }, + "homo_sapiens - wgs - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" + ], + "call_variants_tfrecords": [ + [ + { + "id": "test", + "single_end": false + }, + "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-13T21:07:17.335788301" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config new file mode 100644 index 0000000000..590aa06023 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: "DEEPVARIANT_CALLVARIANTS" { + ext.args = '--checkpoint "/opt/models/wgs"' + cpus = 2 // Keep CPUs fixed so the number of output files is reproducible + } +} +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--channels "insert_size"' + } +} diff --git a/modules/nf-core/deepvariant/callvariants/tests/tags.yml b/modules/nf-core/deepvariant/callvariants/tests/tags.yml new file mode 100644 index 0000000000..02e63f5089 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/callvariants: + - modules/nf-core/deepvariant/callvariants/** diff --git a/modules/nf-core/deepvariant/makeexamples/main.nf b/modules/nf-core/deepvariant/makeexamples/main.nf new file mode 100644 index 0000000000..022d0bf280 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/main.nf @@ -0,0 +1,66 @@ +process DEEPVARIANT_MAKEEXAMPLES { + tag "$meta.id" + label 'process_high' + + //Conda is not supported at the moment + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(input), path(index), path(intervals) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(gzi) + tuple val(meta5), path(par_bed) + + output: + tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}"), emit: examples + tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), emit: gvcf + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def regions = intervals ? "--regions ${intervals}" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + + """ + seq 0 ${task.cpus - 1} | parallel -q --halt 2 --line-buffer /opt/deepvariant/bin/make_examples \\ + --mode calling \\ + --ref "${fasta}" \\ + --reads "${input}" \\ + --examples "./${prefix}.examples.tfrecord@${task.cpus}.gz" \\ + --gvcf "./${prefix}.gvcf.tfrecord@${task.cpus}.gz" \\ + ${regions} \\ + ${par_regions} \\ + ${args} \\ + --task {} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + printf -v SHARD_COUNT "%04d" ${task.cpus} + for i in \$( seq -f "%04g" 0 ${task.cpus-1} ) + do + touch ${prefix}.examples.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz{,.example_info.json} + touch ${prefix}.gvcf.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz + done + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/makeexamples/meta.yml b/modules/nf-core/deepvariant/makeexamples/meta.yml new file mode 100644 index 0000000000..6fb9f1b814 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/meta.yml @@ -0,0 +1,102 @@ +name: deepvariant_makeexamples +description: Transforms the input alignments to a format suitable for the deep neural + network variant caller +keywords: + - variant calling + - machine learning + - neural network +tools: + - deepvariant: + description: DeepVariant is an analysis pipeline that uses a deep neural network + to call genetic variants from next-generation DNA sequencing data + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.bam/cram" + - index: + type: file + description: Index of BAM/CRAM file + pattern: "*.bai/crai" + - intervals: + type: file + description: Interval file for targeted regions + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - gzi: + type: file + description: GZI index of reference fasta file + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + pattern: "*.gzi" + - par_bed: + type: file + description: BED file containing PAR regions + pattern: "*.bed" +output: + - examples: + - meta: + type: list + description: | + Tuple containing sample metadata and examples that can be used for calling + - ${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}: + type: list + description: | + Tuple containing sample metadata and examples that can be used for calling + - gvcf: + - meta: + type: list + description: | + Tuple containing sample metadata and the GVCF data in tfrecord format + - ${prefix}.gvcf.tfrecord-*-of-*.gz: + type: list + description: | + Tuple containing sample metadata and the GVCF data in tfrecord format + - versions: + - versions.yml: + type: file + description: File containing the DeepVariant software version + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" + - "@fa2k" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test new file mode 100644 index 0000000000..d46dbe6d57 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test @@ -0,0 +1,228 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_MAKEEXAMPLES" + script "../main.nf" + config "./nextflow.config" + process "DEEPVARIANT_MAKEEXAMPLES" + + tag "deepvariant/makeexamples" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - [bam, bai] - fasta - fai") { + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + // Test string values and versions. The tfrecords contents are not stable, but we check the names. + { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file name list + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test1-exaamples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf file name list + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test1-gvcf-filenames")}, + { assert snapshot(process.out.versions).match("test1-versions") }, + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, + // The test is always run with 2 cpus + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file names + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test2-examples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf tfrecord file names + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test2-gvcf-filenames")}, + { assert snapshot(process.out.versions).match("test2-versions") }, + ) + } + } + + test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + + { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, + // The test is always run with 2 cpus + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file name list + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test3-examples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf file name list + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test3-gvcf-filenames")}, + { assert snapshot(process.out.versions).match("test3-versions") }, + ) + } + } + + test("stub") { + + options "-stub" + + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file name list + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test4-examples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf file name list + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test4-gvcf-filenames")}, + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap new file mode 100644 index 0000000000..24182c54a0 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "test1-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:09:47.885995" + }, + "test2-examples-filenames": { + "content": [ + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:02.757227" + }, + "test2-versions": { + "content": [ + [ + "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:39:28.960959" + }, + "test4-examples-filenames": { + "content": [ + "test.examples.tfrecord-0000-of-0002.tfrecord.gz", + "test.examples.tfrecord-0000-of-0002.tfrecord.gz.example_info.json", + "test.examples.tfrecord-0001-of-0002.tfrecord.gz", + "test.examples.tfrecord-0001-of-0002.tfrecord.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:27.41698" + }, + "test1-versions": { + "content": [ + [ + "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:39:13.57526" + }, + "test3-examples-filenames": { + "content": [ + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:17.705948" + }, + "test2-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:02.765863" + }, + "test4-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-0000-of-0002.tfrecord.gz", + "test.gvcf.tfrecord-0001-of-0002.tfrecord.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:27.423442" + }, + "test3-versions": { + "content": [ + [ + "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:39:44.83616" + }, + "test1-exaamples-filenames": { + "content": [ + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:09:47.874585" + }, + "test3-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:17.714443" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config new file mode 100644 index 0000000000..5f071fcb34 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--channels "insert_size"' + cpus = 2 // The number of output files is determined by cpus - keep it the same for tests + } +} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/tags.yml b/modules/nf-core/deepvariant/makeexamples/tests/tags.yml new file mode 100644 index 0000000000..6a13da0959 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/makeexamples: + - modules/nf-core/deepvariant/makeexamples/** diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml deleted file mode 100644 index a50dc57d9a..0000000000 --- a/modules/nf-core/deepvariant/meta.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: deepvariant -description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data -keywords: - - variant calling - - machine learning - - neural network -tools: - - deepvariant: - description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.bam/cram" - - index: - type: file - description: Index of BAM/CRAM file - pattern: "*.bai/crai" - - interval: - type: file - description: Interval file for targeted regions - pattern: "*.bed" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fai" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - gzi: - type: file - description: GZI index of reference fasta file - pattern: "*.gzi" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" - - gvcf: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@abhi18av" - - "@ramprasadn" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/postprocessvariants/main.nf b/modules/nf-core/deepvariant/postprocessvariants/main.nf new file mode 100644 index 0000000000..90e8563deb --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/main.nf @@ -0,0 +1,77 @@ +process DEEPVARIANT_POSTPROCESSVARIANTS { + tag "$meta.id" + label 'process_medium' + + //Conda is not supported at the moment + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(gzi) + + output: + tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf + tuple val(meta), path("${prefix}.vcf.gz.tbi") , emit: vcf_tbi + tuple val(meta), path("${prefix}.g.vcf.gz") , emit: gvcf + tuple val(meta), path("${prefix}.g.vcf.gz.tbi"), emit: gvcf_tbi + + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + + def variant_calls_tfrecord_name = variant_calls_tfrecord_files[0].name.replaceFirst(/-\d{5}-of-\d{5}/, "") + + def gvcf_matcher = gvcf_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ + if (!gvcf_matcher.matches()) { + throw new IllegalArgumentException("tfrecord baseName '" + gvcf_tfrecords[0].baseName + "' doesn't match the expected pattern") + } + def gvcf_tfrecord_name = gvcf_matcher[0][1] + def gvcf_shardCount = gvcf_matcher[0][2] + // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz + def gvcf_tfrecords_logical_name = "${gvcf_tfrecord_name}@${gvcf_shardCount}.gz" + + """ + /opt/deepvariant/bin/postprocess_variants \\ + ${args} \\ + --ref "${fasta}" \\ + --infile "${variant_calls_tfrecord_name}" \\ + --outfile "${prefix}.vcf.gz" \\ + --nonvariant_site_tfrecord_path "${gvcf_tfrecords_logical_name}" \\ + --gvcf_outfile "${prefix}.g.vcf.gz" \\ + --cpus $task.cpus + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_postprocessvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + echo "" | gzip > ${prefix}.g.vcf.gz + touch ${prefix}.g.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/meta.yml b/modules/nf-core/deepvariant/postprocessvariants/meta.yml new file mode 100644 index 0000000000..132a526322 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/meta.yml @@ -0,0 +1,113 @@ +name: deepvariant_postprocessvariants +description: DeepVariant is an analysis pipeline that uses a deep neural network to + call genetic variants from next-generation DNA sequencing data +keywords: + - variant calling + - machine learning + - neural network +tools: + - deepvariant: + description: DeepVariant is an analysis pipeline that uses a deep neural network + to call genetic variants from next-generation DNA sequencing data + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - variant_calls_tfrecord_files: + type: file + description: | + One or more data files containing variant calls from DEEPVARIANT_CALLVARIANTS + pattern: "*.tfrecord.gz" + - gvcf_tfrecords: + type: file + description: | + Sharded tfrecord file from DEEPVARIANT_MAKEEXAMPLES with the coverage information used for GVCF output + pattern: "*.gz" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - gzi: + type: file + description: GZI index of reference fasta file + pattern: "*.gzi" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - vcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz.tbi: + type: file + description: Index for VCF + pattern: "*.vcf.gz.tbi" + - gvcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - gvcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz.tbi: + type: file + description: Index for GVCF + pattern: "*.g.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" + - "@fa2k" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test new file mode 100644 index 0000000000..e4e9b5570c --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test @@ -0,0 +1,118 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_POSTPROCESSVARIANTS" + script "../main.nf" + process "DEEPVARIANT_POSTPROCESSVARIANTS" + config "./nextflow.config" + + tag "deepvariant/makeexamples" + tag "deepvariant/callvariants" + tag "deepvariant/postprocessvariants" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - wgs") { + setup { + run("DEEPVARIANT_MAKEEXAMPLES") { + script "../../makeexamples/main.nf" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + run("DEEPVARIANT_CALLVARIANTS") { + script "../../callvariants/main.nf" + process { + """ + input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples + """ + } + } + } + when { + process { + """ + input[0] = DEEPVARIANT_CALLVARIANTS.out.call_variants_tfrecords.join( + DEEPVARIANT_MAKEEXAMPLES.out.gvcf, + failOnMismatch: true + ) + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - wgs - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [], + [], + [], + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap new file mode 100644 index 0000000000..5a29c624e5 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap @@ -0,0 +1,180 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:40:38.231189" + }, + "homo_sapiens - wgs": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:46:15.793662" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config new file mode 100644 index 0000000000..070b4892f8 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: "DEEPVARIANT_CALLVARIANTS" { + ext.args = '--checkpoint "/opt/models/wgs"' + } +} +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--channels "insert_size"' + } +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml b/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml new file mode 100644 index 0000000000..d26188cd7a --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/postprocessvariants: + - modules/nf-core/deepvariant/postprocessvariants/** diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/rundeepvariant/main.nf similarity index 71% rename from modules/nf-core/deepvariant/main.nf rename to modules/nf-core/deepvariant/rundeepvariant/main.nf index 507b6c1174..7f99c53f6d 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/rundeepvariant/main.nf @@ -1,15 +1,18 @@ -process DEEPVARIANT { +process DEEPVARIANT_RUNDEEPVARIANT { tag "$meta.id" label 'process_high' - //Conda is not supported at the moment - container "nf-core/deepvariant:1.5.0" + // FIXME Conda is not supported at the moment + // BUG https://github.com/nf-core/modules/issues/1754 + // BUG https://github.com/bioconda/bioconda-recipes/issues/30310 + container "nf-core/deepvariant:1.6.1" input: tuple val(meta), path(input), path(index), path(intervals) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) tuple val(meta4), path(gzi) + tuple val(meta5), path(par_bed) output: tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf @@ -29,6 +32,10 @@ process DEEPVARIANT { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def regions = intervals ? "--regions=${intervals}" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' """ /opt/deepvariant/bin/run_deepvariant \\ @@ -38,12 +45,13 @@ process DEEPVARIANT { --output_gvcf=${prefix}.g.vcf.gz \\ ${args} \\ ${regions} \\ - --intermediate_results_dir=. \\ + ${par_regions} \\ + --intermediate_results_dir=tmp \\ --num_shards=${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": - deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + deepvariant: $VERSION END_VERSIONS """ @@ -53,6 +61,9 @@ process DEEPVARIANT { error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." } prefix = task.ext.prefix ?: "${meta.id}" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' """ touch ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi @@ -61,7 +72,7 @@ process DEEPVARIANT { cat <<-END_VERSIONS > versions.yml "${task.process}": - deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + deepvariant: $VERSION END_VERSIONS """ } diff --git a/modules/nf-core/deepvariant/rundeepvariant/meta.yml b/modules/nf-core/deepvariant/rundeepvariant/meta.yml new file mode 100644 index 0000000000..29b45ff917 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/meta.yml @@ -0,0 +1,122 @@ +name: deepvariant_rundeepvariant +description: DeepVariant is an analysis pipeline that uses a deep neural network to + call genetic variants from next-generation DNA sequencing data +keywords: + - variant calling + - machine learning + - neural network +tools: + - deepvariant: + description: DeepVariant is an analysis pipeline that uses a deep neural network + to call genetic variants from next-generation DNA sequencing data + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.bam/cram" + - index: + type: file + description: Index of BAM/CRAM file + pattern: "*.bai/crai" + - intervals: + type: file + description: file containing intervals + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - gzi: + type: file + description: GZI index of reference fasta file + pattern: "*.gzi" + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - par_bed: + type: file + description: BED file containing PAR regions + pattern: "*.bed" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - vcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz.tbi: + type: file + description: Tabix index file of compressed VCF + pattern: "*.vcf.gz.tbi" + - gvcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - gvcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz.tbi: + type: file + description: Tabix index file of compressed GVCF + pattern: "*.g.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/tests/main.nf.test b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test similarity index 67% rename from modules/nf-core/deepvariant/tests/main.nf.test rename to modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test index 91612c1e28..0790fb8136 100644 --- a/modules/nf-core/deepvariant/tests/main.nf.test +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test @@ -1,9 +1,10 @@ nextflow_process { - name "Test Process DEEPVARIANT" + name "Test Process DEEPVARIANT_RUNDEEPVARIANT" script "../main.nf" - process "DEEPVARIANT" + process "DEEPVARIANT_RUNDEEPVARIANT" + tag "deepvariant/rundeepvariant" tag "deepvariant" tag "modules" tag "modules_nfcore" @@ -31,6 +32,9 @@ nextflow_process { input[3] = [ [],[] ] + input[4] = [ + [],[] + ] """ } } @@ -66,6 +70,48 @@ nextflow_process { input[3] = [ [],[] ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed") { + config "./nextflow-non-autosomal-calling.config" + tag "test" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.blacklist_intervals.bed', checkIfExists: true) + ] """ } } @@ -102,6 +148,9 @@ nextflow_process { [ id:'genome'], file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) ] + input[4] = [ + [],[] + ] """ } } @@ -114,4 +163,4 @@ nextflow_process { } } -} \ No newline at end of file +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap new file mode 100644 index 0000000000..1ec351eecc --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap @@ -0,0 +1,358 @@ +{ + "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:36:27.325363" + }, + "homo_sapiens - [bam, bai] - fasta - fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:34:41.779153" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:35:16.993129" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:35:52.23093" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/tests/nextflow-intervals.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config similarity index 70% rename from modules/nf-core/deepvariant/tests/nextflow-intervals.config rename to modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config index 6d135f9f10..78d8d5982a 100644 --- a/modules/nf-core/deepvariant/tests/nextflow-intervals.config +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config @@ -1,6 +1,6 @@ process { - withName: DEEPVARIANT { + withName: DEEPVARIANT_RUNDEEPVARIANT { ext.args = '--model_type=WGS ' ext.prefix = { "${meta.id}_out" } } diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config new file mode 100644 index 0000000000..6d265292ab --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=WGS --haploid_contigs chr22' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/tests/nextflow.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config similarity index 75% rename from modules/nf-core/deepvariant/tests/nextflow.config rename to modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config index d335d30b54..77e355cae8 100644 --- a/modules/nf-core/deepvariant/tests/nextflow.config +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config @@ -1,6 +1,6 @@ process { - withName: DEEPVARIANT { + withName: DEEPVARIANT_RUNDEEPVARIANT { ext.args = ' --regions=\"chr22:0-40001\" --model_type=WGS ' ext.prefix = { "${meta.id}_out" } } diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml new file mode 100644 index 0000000000..958b8e4149 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/rundeepvariant: + - modules/nf-core/deepvariant/rundeepvariant/** diff --git a/modules/nf-core/deepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/tests/main.nf.test.snap deleted file mode 100644 index 6ad76ae4c3..0000000000 --- a/modules/nf-core/deepvariant/tests/main.nf.test.snap +++ /dev/null @@ -1,269 +0,0 @@ -{ - "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "4": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "versions": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T13:54:42.757335334" - }, - "homo_sapiens - [bam, bai] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "4": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "versions": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T13:54:18.409489045" - }, - "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "4": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "versions": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T13:54:30.523871801" - } -} diff --git a/modules/nf-core/deepvariant/tests/tags.yml b/modules/nf-core/deepvariant/tests/tags.yml deleted file mode 100644 index 8e838c7ba2..0000000000 --- a/modules/nf-core/deepvariant/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant: - - modules/nf-core/deepvariant/** diff --git a/modules/nf-core/dragmap/align/dragmap-align.diff b/modules/nf-core/dragmap/align/dragmap-align.diff index 18a36816d3..cca557b628 100644 --- a/modules/nf-core/dragmap/align/dragmap-align.diff +++ b/modules/nf-core/dragmap/align/dragmap-align.diff @@ -1,4 +1,5 @@ Changes in module 'nf-core/dragmap/align' +Changes in 'dragmap/align/main.nf': --- modules/nf-core/dragmap/align/main.nf +++ modules/nf-core/dragmap/align/main.nf @@ -4,8 +4,8 @@ @@ -13,18 +14,25 @@ Changes in module 'nf-core/dragmap/align' input: tuple val(meta) , path(reads) +'modules/nf-core/dragmap/align/meta.yml' is unchanged +Changes in 'dragmap/align/environment.yml': --- modules/nf-core/dragmap/align/environment.yml +++ modules/nf-core/dragmap/align/environment.yml -@@ -4,7 +4,7 @@ +@@ -1,8 +1,8 @@ + channels: + - conda-forge - bioconda - - defaults +- dependencies: - - dragmap=1.3.0 -+ - dragmap=1.2.1 - # renovate: datasource=conda depName=bioconda/samtools -- - samtools=1.18 - - pigz=2.8 -+ - samtools=1.19.2 +- - samtools=1.18 ++ - dragmap=1.2.1 + - pigz=2.3.4 ++ # renovate: datasource=conda depName=bioconda/samtools ++ - samtools=1.19.2 +'modules/nf-core/dragmap/align/tests/main.nf.test.snap' is unchanged +'modules/nf-core/dragmap/align/tests/main.nf.test' is unchanged +'modules/nf-core/dragmap/align/tests/tags.yml' is unchanged ************************************************************ diff --git a/modules/nf-core/dragmap/align/environment.yml b/modules/nf-core/dragmap/align/environment.yml index a443ce4455..507a1e9327 100644 --- a/modules/nf-core/dragmap/align/environment.yml +++ b/modules/nf-core/dragmap/align/environment.yml @@ -1,10 +1,8 @@ -name: dragmap_align channels: - conda-forge - bioconda - - defaults dependencies: - dragmap=1.2.1 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.19.2 - pigz=2.3.4 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.19.2 diff --git a/modules/nf-core/dragmap/align/meta.yml b/modules/nf-core/dragmap/align/meta.yml index 2270bd3397..80f020f58f 100644 --- a/modules/nf-core/dragmap/align/meta.yml +++ b/modules/nf-core/dragmap/align/meta.yml @@ -13,44 +13,104 @@ tools: documentation: https://github.com/Illumina/dragmap tool_dev_url: https://github.com/Illumina/dragmap#basic-command-line-usage licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test', single_end:false ] - - hashmap: - type: file - description: DRAGMAP hash table - pattern: "Directory containing DRAGMAP hash table *.{cmp,.bin,.txt}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - fasta: - type: file - description: Genome fasta reference files - pattern: "*.{fa,fasta,fna}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - hashmap: + type: file + description: DRAGMAP hash table + pattern: "Directory containing DRAGMAP hash table *.{cmp,.bin,.txt}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fasta: + type: file + description: Genome fasta reference files + pattern: "*.{fa,fasta,fna}" + - - sort_bam: + type: boolean + description: Sort the BAM file output: + - sam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + - meta: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for CRAM file + pattern: "*.{csi}" + - log: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: Log file + pattern: "*.{log}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" maintainers: diff --git a/modules/nf-core/dragmap/hashtable/dragmap-hashtable.diff b/modules/nf-core/dragmap/hashtable/dragmap-hashtable.diff index c2fba762b8..3e9ffb89c6 100644 --- a/modules/nf-core/dragmap/hashtable/dragmap-hashtable.diff +++ b/modules/nf-core/dragmap/hashtable/dragmap-hashtable.diff @@ -1,4 +1,5 @@ Changes in module 'nf-core/dragmap/hashtable' +Changes in 'dragmap/hashtable/main.nf': --- modules/nf-core/dragmap/hashtable/main.nf +++ modules/nf-core/dragmap/hashtable/main.nf @@ -4,8 +4,8 @@ @@ -13,13 +14,18 @@ Changes in module 'nf-core/dragmap/hashtable' input: tuple val(meta), path(fasta) +'modules/nf-core/dragmap/hashtable/meta.yml' is unchanged +Changes in 'dragmap/hashtable/environment.yml': --- modules/nf-core/dragmap/hashtable/environment.yml +++ modules/nf-core/dragmap/hashtable/environment.yml -@@ -4,4 +4,4 @@ +@@ -2,4 +2,4 @@ + - conda-forge - bioconda - - defaults dependencies: - - bioconda::dragmap=1.3.0 + - bioconda::dragmap=1.2.1 +'modules/nf-core/dragmap/hashtable/tests/main.nf.test.snap' is unchanged +'modules/nf-core/dragmap/hashtable/tests/main.nf.test' is unchanged +'modules/nf-core/dragmap/hashtable/tests/tags.yml' is unchanged ************************************************************ diff --git a/modules/nf-core/dragmap/hashtable/environment.yml b/modules/nf-core/dragmap/hashtable/environment.yml index 3c3d1404f4..9adca49bae 100644 --- a/modules/nf-core/dragmap/hashtable/environment.yml +++ b/modules/nf-core/dragmap/hashtable/environment.yml @@ -1,7 +1,5 @@ -name: dragmap_hashtable channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::dragmap=1.2.1 diff --git a/modules/nf-core/dragmap/hashtable/meta.yml b/modules/nf-core/dragmap/hashtable/meta.yml index 1d1f92f522..450a1e58e0 100644 --- a/modules/nf-core/dragmap/hashtable/meta.yml +++ b/modules/nf-core/dragmap/hashtable/meta.yml @@ -12,29 +12,32 @@ tools: documentation: https://github.com/Illumina/dragmap tool_dev_url: https://github.com/Illumina/dragmap#basic-command-line-usage licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test', single_end:false ] - hashmap: - type: file - description: DRAGMAP hash table - pattern: "*.{cmp,.bin,.txt}" + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - dragmap: + type: file + description: DRAGMAP hash table + pattern: "*.{cmp,.bin,.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" maintainers: diff --git a/modules/nf-core/ensemblvep/download/environment.yml b/modules/nf-core/ensemblvep/download/environment.yml index 2ea8642fe4..283a45bbdf 100644 --- a/modules/nf-core/ensemblvep/download/environment.yml +++ b/modules/nf-core/ensemblvep/download/environment.yml @@ -1,7 +1,5 @@ -name: ensemblvep_download channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::ensembl-vep=111.0 + - bioconda::ensembl-vep=112.0 diff --git a/modules/nf-core/ensemblvep/download/main.nf b/modules/nf-core/ensemblvep/download/main.nf index f9e025a552..555c3c6645 100644 --- a/modules/nf-core/ensemblvep/download/main.nf +++ b/modules/nf-core/ensemblvep/download/main.nf @@ -4,8 +4,8 @@ process ENSEMBLVEP_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:111.0--pl5321h2a3209d_0' : - 'biocontainers/ensembl-vep:111.0--pl5321h2a3209d_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:112.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:112.0--pl5321h2a3209d_0' }" input: tuple val(meta), val(assembly), val(species), val(cache_version) diff --git a/modules/nf-core/ensemblvep/download/meta.yml b/modules/nf-core/ensemblvep/download/meta.yml index a4277ad7a7..8da9621cbf 100644 --- a/modules/nf-core/ensemblvep/download/meta.yml +++ b/modules/nf-core/ensemblvep/download/meta.yml @@ -1,5 +1,6 @@ name: ensemblvep_download -description: Ensembl Variant Effect Predictor (VEP). The cache downloading options are controlled through `task.ext.args`. +description: Ensembl Variant Effect Predictor (VEP). The cache downloading options + are controlled through `task.ext.args`. keywords: - annotation - cache @@ -12,33 +13,40 @@ tools: homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - assembly: - type: string - description: | - Genome assembly - - species: - type: string - description: | - Specie - - cache_version: - type: string - description: | - cache version + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - assembly: + type: string + description: | + Genome assembly + - species: + type: string + description: | + Specie + - cache_version: + type: string + description: | + cache version output: - cache: - type: file - description: cache - pattern: "*" + - meta: + type: file + description: cache + pattern: "*" + - prefix: + type: file + description: cache + pattern: "*" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test b/modules/nf-core/ensemblvep/download/tests/main.nf.test index 760c9d5643..ac41cc3f32 100644 --- a/modules/nf-core/ensemblvep/download/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { process { """ input[0] = Channel.of([ - [id:"111_WBcel235"], + [id:"112_WBcel235"], params.vep_genome, params.vep_species, params.vep_cache_version @@ -41,7 +41,7 @@ nextflow_process { process { """ input[0] = Channel.of([ - [id:"111_WBcel235"], + [id:"112_WBcel235"], params.vep_genome, params.vep_species, params.vep_cache_version diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap index 6ea596fbde..9e303c5486 100644 --- a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap @@ -5,130 +5,130 @@ "0": [ [ { - "id": "111_WBcel235" + "id": "112_WBcel235" }, [ [ [ [ - "1-1000000.gz:md5,4da54db2f781d08975630811fd831585", - "10000001-11000000.gz:md5,7bee73e51d08f5e6de1796614105c5de", - "1000001-2000000.gz:md5,e8beff9020e261d78988c37e804cc89a", - "11000001-12000000.gz:md5,1a31b2dcf58822e837cd91b7a74a8b4f", - "12000001-13000000.gz:md5,34522be2ee5bd3cf51a9b151c877fe35", - "13000001-14000000.gz:md5,4e5a7b604f8aea2ad9de79b75ed89a6b", - "14000001-15000000.gz:md5,65146be110ea58b64ab8518bcbfbde9d", - "15000001-16000000.gz:md5,a39fdb7b0b056c0254574353351722eb", - "2000001-3000000.gz:md5,b72a04531477615dc4d2c530d09e60df", - "3000001-4000000.gz:md5,50dae46f370e1468c8f8f2c97cc75f0b", - "4000001-5000000.gz:md5,e58e124073689212e5311fbd8ccce415", - "5000001-6000000.gz:md5,db27434dc8be9557f97aa09a95126836", - "6000001-7000000.gz:md5,a5131e3ee41b329eb55fb3849ddb1471", - "7000001-8000000.gz:md5,61e1fbe1a82892a0f9f6ee0380fa60bc", - "8000001-9000000.gz:md5,48166dd4518ec21f597b6acca73809bb", - "9000001-10000000.gz:md5,3e416c856f40f36ec0ed3f42a93b2267" + "1-1000000.gz:md5,c7df2324c613caafe70024bb156b077c", + "10000001-11000000.gz:md5,baee612beb1fc7b931d1b4c34df9a366", + "1000001-2000000.gz:md5,4fefec2bbbcdc22022ba22e2b36fe118", + "11000001-12000000.gz:md5,e06df8391870440be75a3a0fed05ad29", + "12000001-13000000.gz:md5,3abd252ef8e0c79d7be07dfe7503c38b", + "13000001-14000000.gz:md5,9b20be645c68c1ef16f0aaadc9d1899d", + "14000001-15000000.gz:md5,c80817caa2a893c8059ad9a66e1c2c1a", + "15000001-16000000.gz:md5,595cf5694cba18c82cff8f0ab882c08a", + "2000001-3000000.gz:md5,b1e24d27d0ef74c85926c1fad795e07b", + "3000001-4000000.gz:md5,ec32b7b8263ee176c97269a34b77232d", + "4000001-5000000.gz:md5,017e3d44b66c6b343c6b9d2265f4a539", + "5000001-6000000.gz:md5,d0723825e78aceac2345548928e3c2b9", + "6000001-7000000.gz:md5,b73797333b2493592b4ebfe72c817c2d", + "7000001-8000000.gz:md5,665647b964cd5a66d8d02aa5104ca3be", + "8000001-9000000.gz:md5,d98e077bf36e071f651c9a5f7661f294", + "9000001-10000000.gz:md5,828987069dd14db0ecf1f18c05b83ea9" ], [ - "1-1000000.gz:md5,06b83c3bd2c651c5a8a96f0865d54a53", - "10000001-11000000.gz:md5,79b3348f860370d1697e6d4de128fca3", - "1000001-2000000.gz:md5,f98e31f3e25c0a419ebeee5b17527b00", - "11000001-12000000.gz:md5,5f23214fdef1f7637f6046dc751155ed", - "12000001-13000000.gz:md5,9a4422905679e543a92d47142b1acba1", - "13000001-14000000.gz:md5,c5db99e7d56f2115f8da8fe3af83314a", - "14000001-15000000.gz:md5,66b65af3732c0495dc74f3071203ac2f", - "15000001-16000000.gz:md5,d4c30dc42925cc92dc594d4145544f33", - "2000001-3000000.gz:md5,ff9b3fd1235468c738e9201e2fa98e08", - "3000001-4000000.gz:md5,c649308c7d3b4891a8c6f95e583f3a08", - "4000001-5000000.gz:md5,c53d2fa6695248d0a725ef70325aae91", - "5000001-6000000.gz:md5,5481fb4b60ebd97256f5d52c42aee0bd", - "6000001-7000000.gz:md5,94b82e096bacb091e0ef55bcd08b8ab8", - "7000001-8000000.gz:md5,83f571dfaf8b891bf27208466e6f7d8c", - "8000001-9000000.gz:md5,4f07e30c7d772544bc6e99bac371b97b", - "9000001-10000000.gz:md5,f1439765f6428ae99516d95dc5df3926" + "1-1000000.gz:md5,f9c71b88d2173861735f6bbb1628fb7b", + "10000001-11000000.gz:md5,caef13b68ca547ed551aef70c6d35045", + "1000001-2000000.gz:md5,493c2f368edeb6bbfe7ad237aff36c4b", + "11000001-12000000.gz:md5,65d6e583c532ac05033663d0fa52952c", + "12000001-13000000.gz:md5,fbba6aa2b41aa4d3e8a5bed643361d47", + "13000001-14000000.gz:md5,dcb85a41d106a9e34ed2835992aa8610", + "14000001-15000000.gz:md5,548e5bbf055f74d428538f1ce9a3c041", + "15000001-16000000.gz:md5,6f351d7bfac444405209c703671861f7", + "2000001-3000000.gz:md5,5fa9ad99eb57cabbbda8684df39f4e88", + "3000001-4000000.gz:md5,2cef090c5bb01f68155bb21bc694a323", + "4000001-5000000.gz:md5,beca6d18414146e139e27912458a8dbf", + "5000001-6000000.gz:md5,9d5d0f77c8057074063e59b40f9bea7c", + "6000001-7000000.gz:md5,41f6375102c67e2621f736f94998c037", + "7000001-8000000.gz:md5,926cd39b81e9c98b61afe5eaed6196da", + "8000001-9000000.gz:md5,a9d32d8678153eca5af93e0cc309568b", + "9000001-10000000.gz:md5,6eeb83014cd638a29d03c92dec5407dc" ], [ - "1-1000000.gz:md5,dab3bbb82e7ecc5430319b7723b88436", - "10000001-11000000.gz:md5,a1af0b4ce9c2ff301ac0a935a4189c58", - "1000001-2000000.gz:md5,8a70e4d08b14a4cf19b03a0556a6cae8", - "11000001-12000000.gz:md5,e866bb880cd79e612dc2081635368017", - "12000001-13000000.gz:md5,1b5be2ca310afd8289561331d19ddf07", - "13000001-14000000.gz:md5,907d2bb3f6b9b75fca9e40f1220c0cb4", - "2000001-3000000.gz:md5,783bcc5957ca4853853c5cda0418dbcd", - "3000001-4000000.gz:md5,cb2df81caa4a20215bb793ca2a792e01", - "4000001-5000000.gz:md5,2046030a187c0a86c9be02531aea0ed7", - "5000001-6000000.gz:md5,395a977401540eb90607b31ecc786a0f", - "6000001-7000000.gz:md5,e6a97128bc38649fcfa5dcb0032a570e", - "7000001-8000000.gz:md5,08804df16d4cdeb5a733d2d6b07b058e", - "8000001-9000000.gz:md5,bba084d260c12613403d144073105d9b", - "9000001-10000000.gz:md5,c0775c413018ed7964f3042112fe4e26" + "1-1000000.gz:md5,ea81b2b4955dd33fd770dc8ccc3f0af5", + "10000001-11000000.gz:md5,8c71450edf69cc9eb48aa832726cd986", + "1000001-2000000.gz:md5,3fc788203586e8f22f63b7655a4bcd2f", + "11000001-12000000.gz:md5,acaccb3801da9192cb211817c719c50c", + "12000001-13000000.gz:md5,0707f54bc90449303fa212e2389649b7", + "13000001-14000000.gz:md5,11701639fbdbf22fd0c795a23b995e10", + "2000001-3000000.gz:md5,d53ff5ffaa9bfb772edaf5affdb73beb", + "3000001-4000000.gz:md5,0de451e2296ac119319d0d3cedd4870f", + "4000001-5000000.gz:md5,37c248c0b8488a535bda18c318770dd4", + "5000001-6000000.gz:md5,3a4fb690e809c1fe9fe675bc5d8dc480", + "6000001-7000000.gz:md5,2ff968944165b45475799971da2b2715", + "7000001-8000000.gz:md5,d172ac8248f67a33f18a788c32cf02ab", + "8000001-9000000.gz:md5,a9ecda1e1cb3d81d43b0343169744d5a", + "9000001-10000000.gz:md5,ca8bd58fe35b597709a4de86dbe01c78" ], [ - "1-1000000.gz:md5,710a2c1ad83c3c9751a0f152cd98f02c", - "10000001-11000000.gz:md5,ac93a92e62043bddaa59973e26dac8e0", - "1000001-2000000.gz:md5,232ee5ab6c7295007ffc760f361e4c07", - "11000001-12000000.gz:md5,07e49ac7b78fbc29cd920b11a4d21afc", - "12000001-13000000.gz:md5,7849822cf3df022e9f273fb6a928aa8b", - "13000001-14000000.gz:md5,e3d3f0ee264694c72b3b989a542c5694", - "14000001-15000000.gz:md5,e5771b6c2fefe9f62b23c71ab873f94f", - "15000001-16000000.gz:md5,fa02114035f63a504c48005c498f8ec3", - "16000001-17000000.gz:md5,ef0fd03281afc2e636a64fd61df8c4dc", - "17000001-18000000.gz:md5,4483a6d74a07b1101dccee71a22213ed", - "2000001-3000000.gz:md5,f164cbfdc8bc12efd7c26df3935fe190", - "3000001-4000000.gz:md5,ff05a42801004994a4f30f081bc8945a", - "4000001-5000000.gz:md5,b63f51d54dc3cb4b214b54527dfa4234", - "5000001-6000000.gz:md5,6945f59a1fd50f1dfa8a2f1e55fecc12", - "6000001-7000000.gz:md5,3f27a3cb19ece2a9e87da6fe6476faaa", - "7000001-8000000.gz:md5,05bffc6e8af7a80fdd6cbc53e5512d0c", - "8000001-9000000.gz:md5,8a3594ee1eb15d7aa8edeb325e485dce", - "9000001-10000000.gz:md5,338bce56200690d450d5fcac65a91be7" + "1-1000000.gz:md5,189037eb5ce432a41c198b69fa11dba1", + "10000001-11000000.gz:md5,8cbb19d243093b735f055a7e7d8506b4", + "1000001-2000000.gz:md5,f634365a563f459fd4a91e139a962620", + "11000001-12000000.gz:md5,3d05e3298731cfa83a0c8e7e14708fd5", + "12000001-13000000.gz:md5,2678ad4b5516f90af54e9460bfe9cdf8", + "13000001-14000000.gz:md5,a885dd1cb05d981ddc5f522e0ead4850", + "14000001-15000000.gz:md5,bc540a102a909b80c6e4b1374e1be69e", + "15000001-16000000.gz:md5,a49f32c55dc2dcb36dcdaffe061f6677", + "16000001-17000000.gz:md5,250ca77e8ec4f6c001c4797a8d09d1d5", + "17000001-18000000.gz:md5,4067d8d30595d4700f3eba5aee92b785", + "2000001-3000000.gz:md5,07ecf8c7e69931af567e94f48e51462e", + "3000001-4000000.gz:md5,e1cfaf343f111867baee5b01060f7e22", + "4000001-5000000.gz:md5,de905e75eb386d7a3dcbc76d69a6e439", + "5000001-6000000.gz:md5,36f2fd0fa37f36485dbc90054f3deeee", + "6000001-7000000.gz:md5,b0e1f3179f2a527c3187aa08942246ed", + "7000001-8000000.gz:md5,ea93a4d60f2a538d6e7335b14d09f0b6", + "8000001-9000000.gz:md5,8b0443d2833dacd4f82023b16be84da1", + "9000001-10000000.gz:md5,54eff9f655ae0f1c18ba6efeeefac5e8" ], [ - "1-1000000.gz:md5,779fda1352c0b1d635aa752c185e6ce2" + "1-1000000.gz:md5,64e3e539e8af16775cc4657c605cc585" ], [ - "1-1000000.gz:md5,267b3134411641d12bb6efcfd5e9d48d", - "10000001-11000000.gz:md5,4f7473abf622b57ca3c8d6de098759f7", - "1000001-2000000.gz:md5,5587d56269638b9cc88bdb7ae5dacc58", - "11000001-12000000.gz:md5,3da928f2caf09b9e3df58f9d1be2c541", - "12000001-13000000.gz:md5,eae3125082e1674f40fcfb8bb7da23e3", - "13000001-14000000.gz:md5,6a91eccbe0cf05737e2d2971d5618876", - "14000001-15000000.gz:md5,60c9b08ad4f674c0394a7c16dee2713e", - "15000001-16000000.gz:md5,b36c052923f3d3e3cc8db9c2852e1e16", - "16000001-17000000.gz:md5,0d0d7a8735aadda492912d032fd8733b", - "17000001-18000000.gz:md5,cf57648ef4cbc3325cff87e6b4b89653", - "18000001-19000000.gz:md5,5c649205050bfcbb4414db329659dadc", - "19000001-20000000.gz:md5,48838329ef3e8c26dd8b1ba82f925704", - "20000001-21000000.gz:md5,c7e1643d2880881fe5d44f718b8e6755", - "2000001-3000000.gz:md5,94849146caeca44e256aec58f1a914b8", - "3000001-4000000.gz:md5,4601fbb22fda2cbc4ed397707f8f7afd", - "4000001-5000000.gz:md5,7c8617d40b6d2e9a37802691f64f775e", - "5000001-6000000.gz:md5,0e81ba81f807f8429351e46dd8385e0e", - "6000001-7000000.gz:md5,6e86fccda1dc539e291bd5768ffd0dad", - "7000001-8000000.gz:md5,f0bf0306012d738fc71f7a26d7af2d81", - "8000001-9000000.gz:md5,0f3da0d0c714760bc2c39bc6696b74d1", - "9000001-10000000.gz:md5,4e0e2ba92378f6e1f261d5e59d8e3d9f" + "1-1000000.gz:md5,0874a0bc852217ed68364921662e4b9b", + "10000001-11000000.gz:md5,46eb3254cf0452bcc8fed5d279bcef35", + "1000001-2000000.gz:md5,2d313518641f5efbe09d1ffd4e4523d5", + "11000001-12000000.gz:md5,2f6a28eb26832af84c9d5c40607ffa39", + "12000001-13000000.gz:md5,3dc37f2082fc45663a88aad0f67506e6", + "13000001-14000000.gz:md5,cd5185227b576640454922e060f00525", + "14000001-15000000.gz:md5,af9fe314326ae20b99a89a8aaa45d0d0", + "15000001-16000000.gz:md5,ff02629cfde390e7eed097296cea0ccb", + "16000001-17000000.gz:md5,7cb1e4babe5b867358bf4f49d9a3d58e", + "17000001-18000000.gz:md5,09588f85610505fdb95117932661a5b9", + "18000001-19000000.gz:md5,cba448de43edcee8d423c1278a76c61f", + "19000001-20000000.gz:md5,af1ee9201a78d537e6df555d3690277d", + "20000001-21000000.gz:md5,1a63895964ba6101c0109990213ec17e", + "2000001-3000000.gz:md5,02d0dc41894283e82ce2da023eb81663", + "3000001-4000000.gz:md5,64d9e97703894f5051349da978e0a3cf", + "4000001-5000000.gz:md5,1b69fdb6993a70e8f6688a03b4626a00", + "5000001-6000000.gz:md5,c4b0e3d33aa451e081ccef0dbbfcc1f5", + "6000001-7000000.gz:md5,26425e131cacb5ba8d68f6e9de39094c", + "7000001-8000000.gz:md5,1c0fcee419cccd5b4268329f7d001d2a", + "8000001-9000000.gz:md5,7515ee504db75bccbdd9d282429a999b", + "9000001-10000000.gz:md5,8647b733b4eba24aaf21b3d983461b1b" ], [ - "1-1000000.gz:md5,83a0a200cb053b1f28e41fe62068d49a", - "10000001-11000000.gz:md5,2f84058256242378b7d14ef526ed42ea", - "1000001-2000000.gz:md5,c655f70a1d16eef55a5003cdb63434ab", - "11000001-12000000.gz:md5,6d5c34d7a61fa4764c546d1b46a5c90d", - "12000001-13000000.gz:md5,84fceee383bb28edb8d749c744a10932", - "13000001-14000000.gz:md5,aadd01464ca36c813a831f5c2016ba02", - "14000001-15000000.gz:md5,94a5325ca01192d5eea218b30f933ec4", - "15000001-16000000.gz:md5,de84954b08d570585a448d8831c12e6d", - "16000001-17000000.gz:md5,be4954afe2236d62226307f8c9f95820", - "17000001-18000000.gz:md5,8fdacfb47fc5728eb27b22bbb8c9b301", - "2000001-3000000.gz:md5,83552c17d88c3986c56c681b0b49bb97", - "3000001-4000000.gz:md5,deb3bc27c8d431d60fc89a6fe49bcbc6", - "4000001-5000000.gz:md5,98de5bbb694c73f7ffde16fb92069117", - "5000001-6000000.gz:md5,7c5a116261bf41309b18c22b0cba5f52", - "6000001-7000000.gz:md5,fb0d2dc71bd0c9263ff23825d8a4ef64", - "7000001-8000000.gz:md5,2375dcd7787e7ca5d26442cea0ff6710", - "8000001-9000000.gz:md5,979f986c27b91a62873e639e3ebeae43", - "9000001-10000000.gz:md5,b80f6906a724e4b0d6c21dd4c77663fd" + "1-1000000.gz:md5,a252da6c7c69644ff29276d15796f457", + "10000001-11000000.gz:md5,e7376cbf07ee7fd1fb8214c9bc739e64", + "1000001-2000000.gz:md5,566d7342a45728a784af7ba5c2e630cb", + "11000001-12000000.gz:md5,bf44ab823c1d51cb7841958761a7cd4d", + "12000001-13000000.gz:md5,ec1494ff61067a130c05afabee046164", + "13000001-14000000.gz:md5,2b24e155be6ae36a62e7ea3b1a0a3118", + "14000001-15000000.gz:md5,3215b3d56cd19a305c8d8f2d1f517825", + "15000001-16000000.gz:md5,6fa2abd0ff33750387780798dc6bd821", + "16000001-17000000.gz:md5,c2a1e5012a895ab95662d83d387f641a", + "17000001-18000000.gz:md5,eb398d2f8bc90b519a82588b8dcbad60", + "2000001-3000000.gz:md5,b78320f16b4caafe9708f95b69668265", + "3000001-4000000.gz:md5,e04cd4871f53108aaa780dbb3718b7f7", + "4000001-5000000.gz:md5,47bd8029ef9fffb5ee2ebb0fa8b91110", + "5000001-6000000.gz:md5,a6c404381dab5da8453b265fb0f374c3", + "6000001-7000000.gz:md5,417b7a492977b76f823634128e3ea2da", + "7000001-8000000.gz:md5,d0f9d030f7f4ad834d1538c7aaace5cf", + "8000001-9000000.gz:md5,58b2eca4ddeea8d2746242b18be1dba4", + "9000001-10000000.gz:md5,62cf6898fa164616c36117472ec10ce9" ], - "chr_synonyms.txt:md5,8a6fce00cc7817ec727c49b7954f10bc", + "chr_synonyms.txt:md5,c7df2db509525b8ff0d95ef927882764", "info.txt:md5,33ccb74a030a9a345051628c337cb8af" ] ] @@ -136,135 +136,135 @@ ] ], "1": [ - "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + "versions.yml:md5,e32852e9cba2a298b7518ce610011b14" ], "cache": [ [ { - "id": "111_WBcel235" + "id": "112_WBcel235" }, [ [ [ [ - "1-1000000.gz:md5,4da54db2f781d08975630811fd831585", - "10000001-11000000.gz:md5,7bee73e51d08f5e6de1796614105c5de", - "1000001-2000000.gz:md5,e8beff9020e261d78988c37e804cc89a", - "11000001-12000000.gz:md5,1a31b2dcf58822e837cd91b7a74a8b4f", - "12000001-13000000.gz:md5,34522be2ee5bd3cf51a9b151c877fe35", - "13000001-14000000.gz:md5,4e5a7b604f8aea2ad9de79b75ed89a6b", - "14000001-15000000.gz:md5,65146be110ea58b64ab8518bcbfbde9d", - "15000001-16000000.gz:md5,a39fdb7b0b056c0254574353351722eb", - "2000001-3000000.gz:md5,b72a04531477615dc4d2c530d09e60df", - "3000001-4000000.gz:md5,50dae46f370e1468c8f8f2c97cc75f0b", - "4000001-5000000.gz:md5,e58e124073689212e5311fbd8ccce415", - "5000001-6000000.gz:md5,db27434dc8be9557f97aa09a95126836", - "6000001-7000000.gz:md5,a5131e3ee41b329eb55fb3849ddb1471", - "7000001-8000000.gz:md5,61e1fbe1a82892a0f9f6ee0380fa60bc", - "8000001-9000000.gz:md5,48166dd4518ec21f597b6acca73809bb", - "9000001-10000000.gz:md5,3e416c856f40f36ec0ed3f42a93b2267" + "1-1000000.gz:md5,c7df2324c613caafe70024bb156b077c", + "10000001-11000000.gz:md5,baee612beb1fc7b931d1b4c34df9a366", + "1000001-2000000.gz:md5,4fefec2bbbcdc22022ba22e2b36fe118", + "11000001-12000000.gz:md5,e06df8391870440be75a3a0fed05ad29", + "12000001-13000000.gz:md5,3abd252ef8e0c79d7be07dfe7503c38b", + "13000001-14000000.gz:md5,9b20be645c68c1ef16f0aaadc9d1899d", + "14000001-15000000.gz:md5,c80817caa2a893c8059ad9a66e1c2c1a", + "15000001-16000000.gz:md5,595cf5694cba18c82cff8f0ab882c08a", + "2000001-3000000.gz:md5,b1e24d27d0ef74c85926c1fad795e07b", + "3000001-4000000.gz:md5,ec32b7b8263ee176c97269a34b77232d", + "4000001-5000000.gz:md5,017e3d44b66c6b343c6b9d2265f4a539", + "5000001-6000000.gz:md5,d0723825e78aceac2345548928e3c2b9", + "6000001-7000000.gz:md5,b73797333b2493592b4ebfe72c817c2d", + "7000001-8000000.gz:md5,665647b964cd5a66d8d02aa5104ca3be", + "8000001-9000000.gz:md5,d98e077bf36e071f651c9a5f7661f294", + "9000001-10000000.gz:md5,828987069dd14db0ecf1f18c05b83ea9" ], [ - "1-1000000.gz:md5,06b83c3bd2c651c5a8a96f0865d54a53", - "10000001-11000000.gz:md5,79b3348f860370d1697e6d4de128fca3", - "1000001-2000000.gz:md5,f98e31f3e25c0a419ebeee5b17527b00", - "11000001-12000000.gz:md5,5f23214fdef1f7637f6046dc751155ed", - "12000001-13000000.gz:md5,9a4422905679e543a92d47142b1acba1", - "13000001-14000000.gz:md5,c5db99e7d56f2115f8da8fe3af83314a", - "14000001-15000000.gz:md5,66b65af3732c0495dc74f3071203ac2f", - "15000001-16000000.gz:md5,d4c30dc42925cc92dc594d4145544f33", - "2000001-3000000.gz:md5,ff9b3fd1235468c738e9201e2fa98e08", - "3000001-4000000.gz:md5,c649308c7d3b4891a8c6f95e583f3a08", - "4000001-5000000.gz:md5,c53d2fa6695248d0a725ef70325aae91", - "5000001-6000000.gz:md5,5481fb4b60ebd97256f5d52c42aee0bd", - "6000001-7000000.gz:md5,94b82e096bacb091e0ef55bcd08b8ab8", - "7000001-8000000.gz:md5,83f571dfaf8b891bf27208466e6f7d8c", - "8000001-9000000.gz:md5,4f07e30c7d772544bc6e99bac371b97b", - "9000001-10000000.gz:md5,f1439765f6428ae99516d95dc5df3926" + "1-1000000.gz:md5,f9c71b88d2173861735f6bbb1628fb7b", + "10000001-11000000.gz:md5,caef13b68ca547ed551aef70c6d35045", + "1000001-2000000.gz:md5,493c2f368edeb6bbfe7ad237aff36c4b", + "11000001-12000000.gz:md5,65d6e583c532ac05033663d0fa52952c", + "12000001-13000000.gz:md5,fbba6aa2b41aa4d3e8a5bed643361d47", + "13000001-14000000.gz:md5,dcb85a41d106a9e34ed2835992aa8610", + "14000001-15000000.gz:md5,548e5bbf055f74d428538f1ce9a3c041", + "15000001-16000000.gz:md5,6f351d7bfac444405209c703671861f7", + "2000001-3000000.gz:md5,5fa9ad99eb57cabbbda8684df39f4e88", + "3000001-4000000.gz:md5,2cef090c5bb01f68155bb21bc694a323", + "4000001-5000000.gz:md5,beca6d18414146e139e27912458a8dbf", + "5000001-6000000.gz:md5,9d5d0f77c8057074063e59b40f9bea7c", + "6000001-7000000.gz:md5,41f6375102c67e2621f736f94998c037", + "7000001-8000000.gz:md5,926cd39b81e9c98b61afe5eaed6196da", + "8000001-9000000.gz:md5,a9d32d8678153eca5af93e0cc309568b", + "9000001-10000000.gz:md5,6eeb83014cd638a29d03c92dec5407dc" ], [ - "1-1000000.gz:md5,dab3bbb82e7ecc5430319b7723b88436", - "10000001-11000000.gz:md5,a1af0b4ce9c2ff301ac0a935a4189c58", - "1000001-2000000.gz:md5,8a70e4d08b14a4cf19b03a0556a6cae8", - "11000001-12000000.gz:md5,e866bb880cd79e612dc2081635368017", - "12000001-13000000.gz:md5,1b5be2ca310afd8289561331d19ddf07", - "13000001-14000000.gz:md5,907d2bb3f6b9b75fca9e40f1220c0cb4", - "2000001-3000000.gz:md5,783bcc5957ca4853853c5cda0418dbcd", - "3000001-4000000.gz:md5,cb2df81caa4a20215bb793ca2a792e01", - "4000001-5000000.gz:md5,2046030a187c0a86c9be02531aea0ed7", - "5000001-6000000.gz:md5,395a977401540eb90607b31ecc786a0f", - "6000001-7000000.gz:md5,e6a97128bc38649fcfa5dcb0032a570e", - "7000001-8000000.gz:md5,08804df16d4cdeb5a733d2d6b07b058e", - "8000001-9000000.gz:md5,bba084d260c12613403d144073105d9b", - "9000001-10000000.gz:md5,c0775c413018ed7964f3042112fe4e26" + "1-1000000.gz:md5,ea81b2b4955dd33fd770dc8ccc3f0af5", + "10000001-11000000.gz:md5,8c71450edf69cc9eb48aa832726cd986", + "1000001-2000000.gz:md5,3fc788203586e8f22f63b7655a4bcd2f", + "11000001-12000000.gz:md5,acaccb3801da9192cb211817c719c50c", + "12000001-13000000.gz:md5,0707f54bc90449303fa212e2389649b7", + "13000001-14000000.gz:md5,11701639fbdbf22fd0c795a23b995e10", + "2000001-3000000.gz:md5,d53ff5ffaa9bfb772edaf5affdb73beb", + "3000001-4000000.gz:md5,0de451e2296ac119319d0d3cedd4870f", + "4000001-5000000.gz:md5,37c248c0b8488a535bda18c318770dd4", + "5000001-6000000.gz:md5,3a4fb690e809c1fe9fe675bc5d8dc480", + "6000001-7000000.gz:md5,2ff968944165b45475799971da2b2715", + "7000001-8000000.gz:md5,d172ac8248f67a33f18a788c32cf02ab", + "8000001-9000000.gz:md5,a9ecda1e1cb3d81d43b0343169744d5a", + "9000001-10000000.gz:md5,ca8bd58fe35b597709a4de86dbe01c78" ], [ - "1-1000000.gz:md5,710a2c1ad83c3c9751a0f152cd98f02c", - "10000001-11000000.gz:md5,ac93a92e62043bddaa59973e26dac8e0", - "1000001-2000000.gz:md5,232ee5ab6c7295007ffc760f361e4c07", - "11000001-12000000.gz:md5,07e49ac7b78fbc29cd920b11a4d21afc", - "12000001-13000000.gz:md5,7849822cf3df022e9f273fb6a928aa8b", - "13000001-14000000.gz:md5,e3d3f0ee264694c72b3b989a542c5694", - "14000001-15000000.gz:md5,e5771b6c2fefe9f62b23c71ab873f94f", - "15000001-16000000.gz:md5,fa02114035f63a504c48005c498f8ec3", - "16000001-17000000.gz:md5,ef0fd03281afc2e636a64fd61df8c4dc", - "17000001-18000000.gz:md5,4483a6d74a07b1101dccee71a22213ed", - "2000001-3000000.gz:md5,f164cbfdc8bc12efd7c26df3935fe190", - "3000001-4000000.gz:md5,ff05a42801004994a4f30f081bc8945a", - "4000001-5000000.gz:md5,b63f51d54dc3cb4b214b54527dfa4234", - "5000001-6000000.gz:md5,6945f59a1fd50f1dfa8a2f1e55fecc12", - "6000001-7000000.gz:md5,3f27a3cb19ece2a9e87da6fe6476faaa", - "7000001-8000000.gz:md5,05bffc6e8af7a80fdd6cbc53e5512d0c", - "8000001-9000000.gz:md5,8a3594ee1eb15d7aa8edeb325e485dce", - "9000001-10000000.gz:md5,338bce56200690d450d5fcac65a91be7" + "1-1000000.gz:md5,189037eb5ce432a41c198b69fa11dba1", + "10000001-11000000.gz:md5,8cbb19d243093b735f055a7e7d8506b4", + "1000001-2000000.gz:md5,f634365a563f459fd4a91e139a962620", + "11000001-12000000.gz:md5,3d05e3298731cfa83a0c8e7e14708fd5", + "12000001-13000000.gz:md5,2678ad4b5516f90af54e9460bfe9cdf8", + "13000001-14000000.gz:md5,a885dd1cb05d981ddc5f522e0ead4850", + "14000001-15000000.gz:md5,bc540a102a909b80c6e4b1374e1be69e", + "15000001-16000000.gz:md5,a49f32c55dc2dcb36dcdaffe061f6677", + "16000001-17000000.gz:md5,250ca77e8ec4f6c001c4797a8d09d1d5", + "17000001-18000000.gz:md5,4067d8d30595d4700f3eba5aee92b785", + "2000001-3000000.gz:md5,07ecf8c7e69931af567e94f48e51462e", + "3000001-4000000.gz:md5,e1cfaf343f111867baee5b01060f7e22", + "4000001-5000000.gz:md5,de905e75eb386d7a3dcbc76d69a6e439", + "5000001-6000000.gz:md5,36f2fd0fa37f36485dbc90054f3deeee", + "6000001-7000000.gz:md5,b0e1f3179f2a527c3187aa08942246ed", + "7000001-8000000.gz:md5,ea93a4d60f2a538d6e7335b14d09f0b6", + "8000001-9000000.gz:md5,8b0443d2833dacd4f82023b16be84da1", + "9000001-10000000.gz:md5,54eff9f655ae0f1c18ba6efeeefac5e8" ], [ - "1-1000000.gz:md5,779fda1352c0b1d635aa752c185e6ce2" + "1-1000000.gz:md5,64e3e539e8af16775cc4657c605cc585" ], [ - "1-1000000.gz:md5,267b3134411641d12bb6efcfd5e9d48d", - "10000001-11000000.gz:md5,4f7473abf622b57ca3c8d6de098759f7", - "1000001-2000000.gz:md5,5587d56269638b9cc88bdb7ae5dacc58", - "11000001-12000000.gz:md5,3da928f2caf09b9e3df58f9d1be2c541", - "12000001-13000000.gz:md5,eae3125082e1674f40fcfb8bb7da23e3", - "13000001-14000000.gz:md5,6a91eccbe0cf05737e2d2971d5618876", - "14000001-15000000.gz:md5,60c9b08ad4f674c0394a7c16dee2713e", - "15000001-16000000.gz:md5,b36c052923f3d3e3cc8db9c2852e1e16", - "16000001-17000000.gz:md5,0d0d7a8735aadda492912d032fd8733b", - "17000001-18000000.gz:md5,cf57648ef4cbc3325cff87e6b4b89653", - "18000001-19000000.gz:md5,5c649205050bfcbb4414db329659dadc", - "19000001-20000000.gz:md5,48838329ef3e8c26dd8b1ba82f925704", - "20000001-21000000.gz:md5,c7e1643d2880881fe5d44f718b8e6755", - "2000001-3000000.gz:md5,94849146caeca44e256aec58f1a914b8", - "3000001-4000000.gz:md5,4601fbb22fda2cbc4ed397707f8f7afd", - "4000001-5000000.gz:md5,7c8617d40b6d2e9a37802691f64f775e", - "5000001-6000000.gz:md5,0e81ba81f807f8429351e46dd8385e0e", - "6000001-7000000.gz:md5,6e86fccda1dc539e291bd5768ffd0dad", - "7000001-8000000.gz:md5,f0bf0306012d738fc71f7a26d7af2d81", - "8000001-9000000.gz:md5,0f3da0d0c714760bc2c39bc6696b74d1", - "9000001-10000000.gz:md5,4e0e2ba92378f6e1f261d5e59d8e3d9f" + "1-1000000.gz:md5,0874a0bc852217ed68364921662e4b9b", + "10000001-11000000.gz:md5,46eb3254cf0452bcc8fed5d279bcef35", + "1000001-2000000.gz:md5,2d313518641f5efbe09d1ffd4e4523d5", + "11000001-12000000.gz:md5,2f6a28eb26832af84c9d5c40607ffa39", + "12000001-13000000.gz:md5,3dc37f2082fc45663a88aad0f67506e6", + "13000001-14000000.gz:md5,cd5185227b576640454922e060f00525", + "14000001-15000000.gz:md5,af9fe314326ae20b99a89a8aaa45d0d0", + "15000001-16000000.gz:md5,ff02629cfde390e7eed097296cea0ccb", + "16000001-17000000.gz:md5,7cb1e4babe5b867358bf4f49d9a3d58e", + "17000001-18000000.gz:md5,09588f85610505fdb95117932661a5b9", + "18000001-19000000.gz:md5,cba448de43edcee8d423c1278a76c61f", + "19000001-20000000.gz:md5,af1ee9201a78d537e6df555d3690277d", + "20000001-21000000.gz:md5,1a63895964ba6101c0109990213ec17e", + "2000001-3000000.gz:md5,02d0dc41894283e82ce2da023eb81663", + "3000001-4000000.gz:md5,64d9e97703894f5051349da978e0a3cf", + "4000001-5000000.gz:md5,1b69fdb6993a70e8f6688a03b4626a00", + "5000001-6000000.gz:md5,c4b0e3d33aa451e081ccef0dbbfcc1f5", + "6000001-7000000.gz:md5,26425e131cacb5ba8d68f6e9de39094c", + "7000001-8000000.gz:md5,1c0fcee419cccd5b4268329f7d001d2a", + "8000001-9000000.gz:md5,7515ee504db75bccbdd9d282429a999b", + "9000001-10000000.gz:md5,8647b733b4eba24aaf21b3d983461b1b" ], [ - "1-1000000.gz:md5,83a0a200cb053b1f28e41fe62068d49a", - "10000001-11000000.gz:md5,2f84058256242378b7d14ef526ed42ea", - "1000001-2000000.gz:md5,c655f70a1d16eef55a5003cdb63434ab", - "11000001-12000000.gz:md5,6d5c34d7a61fa4764c546d1b46a5c90d", - "12000001-13000000.gz:md5,84fceee383bb28edb8d749c744a10932", - "13000001-14000000.gz:md5,aadd01464ca36c813a831f5c2016ba02", - "14000001-15000000.gz:md5,94a5325ca01192d5eea218b30f933ec4", - "15000001-16000000.gz:md5,de84954b08d570585a448d8831c12e6d", - "16000001-17000000.gz:md5,be4954afe2236d62226307f8c9f95820", - "17000001-18000000.gz:md5,8fdacfb47fc5728eb27b22bbb8c9b301", - "2000001-3000000.gz:md5,83552c17d88c3986c56c681b0b49bb97", - "3000001-4000000.gz:md5,deb3bc27c8d431d60fc89a6fe49bcbc6", - "4000001-5000000.gz:md5,98de5bbb694c73f7ffde16fb92069117", - "5000001-6000000.gz:md5,7c5a116261bf41309b18c22b0cba5f52", - "6000001-7000000.gz:md5,fb0d2dc71bd0c9263ff23825d8a4ef64", - "7000001-8000000.gz:md5,2375dcd7787e7ca5d26442cea0ff6710", - "8000001-9000000.gz:md5,979f986c27b91a62873e639e3ebeae43", - "9000001-10000000.gz:md5,b80f6906a724e4b0d6c21dd4c77663fd" + "1-1000000.gz:md5,a252da6c7c69644ff29276d15796f457", + "10000001-11000000.gz:md5,e7376cbf07ee7fd1fb8214c9bc739e64", + "1000001-2000000.gz:md5,566d7342a45728a784af7ba5c2e630cb", + "11000001-12000000.gz:md5,bf44ab823c1d51cb7841958761a7cd4d", + "12000001-13000000.gz:md5,ec1494ff61067a130c05afabee046164", + "13000001-14000000.gz:md5,2b24e155be6ae36a62e7ea3b1a0a3118", + "14000001-15000000.gz:md5,3215b3d56cd19a305c8d8f2d1f517825", + "15000001-16000000.gz:md5,6fa2abd0ff33750387780798dc6bd821", + "16000001-17000000.gz:md5,c2a1e5012a895ab95662d83d387f641a", + "17000001-18000000.gz:md5,eb398d2f8bc90b519a82588b8dcbad60", + "2000001-3000000.gz:md5,b78320f16b4caafe9708f95b69668265", + "3000001-4000000.gz:md5,e04cd4871f53108aaa780dbb3718b7f7", + "4000001-5000000.gz:md5,47bd8029ef9fffb5ee2ebb0fa8b91110", + "5000001-6000000.gz:md5,a6c404381dab5da8453b265fb0f374c3", + "6000001-7000000.gz:md5,417b7a492977b76f823634128e3ea2da", + "7000001-8000000.gz:md5,d0f9d030f7f4ad834d1538c7aaace5cf", + "8000001-9000000.gz:md5,58b2eca4ddeea8d2746242b18be1dba4", + "9000001-10000000.gz:md5,62cf6898fa164616c36117472ec10ce9" ], - "chr_synonyms.txt:md5,8a6fce00cc7817ec727c49b7954f10bc", + "chr_synonyms.txt:md5,c7df2db509525b8ff0d95ef927882764", "info.txt:md5,33ccb74a030a9a345051628c337cb8af" ] ] @@ -272,15 +272,15 @@ ] ], "versions": [ - "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + "versions.yml:md5,e32852e9cba2a298b7518ce610011b14" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.4" }, - "timestamp": "2024-04-15T17:20:01.921038" + "timestamp": "2024-09-02T13:19:08.690863" }, "celegans - download - stub": { "content": [ @@ -288,7 +288,7 @@ "0": [ [ { - "id": "111_WBcel235" + "id": "112_WBcel235" }, [ @@ -296,12 +296,12 @@ ] ], "1": [ - "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + "versions.yml:md5,e32852e9cba2a298b7518ce610011b14" ], "cache": [ [ { - "id": "111_WBcel235" + "id": "112_WBcel235" }, [ @@ -309,14 +309,14 @@ ] ], "versions": [ - "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + "versions.yml:md5,e32852e9cba2a298b7518ce610011b14" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.4" }, - "timestamp": "2024-04-15T18:09:54.909036" + "timestamp": "2024-09-02T13:19:23.308683" } } \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/download/tests/nextflow.config b/modules/nf-core/ensemblvep/download/tests/nextflow.config index 882bce41a0..9aa481645e 100644 --- a/modules/nf-core/ensemblvep/download/tests/nextflow.config +++ b/modules/nf-core/ensemblvep/download/tests/nextflow.config @@ -1,5 +1,5 @@ params { - vep_cache_version = "111" + vep_cache_version = "112" vep_genome = "WBcel235" vep_species = "caenorhabditis_elegans" } diff --git a/modules/nf-core/ensemblvep/vep/environment.yml b/modules/nf-core/ensemblvep/vep/environment.yml index 91457c0508..283a45bbdf 100644 --- a/modules/nf-core/ensemblvep/vep/environment.yml +++ b/modules/nf-core/ensemblvep/vep/environment.yml @@ -1,7 +1,5 @@ -name: ensemblvep_vep channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::ensembl-vep=111.0 + - bioconda::ensembl-vep=112.0 diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index e82471aa1d..5f33265b0d 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -4,8 +4,8 @@ process ENSEMBLVEP_VEP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:111.0--pl5321h2a3209d_0' : - 'biocontainers/ensembl-vep:111.0--pl5321h2a3209d_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:112.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:112.0--pl5321h2a3209d_0' }" input: tuple val(meta), path(vcf), path(custom_extra_files) @@ -20,7 +20,7 @@ process ENSEMBLVEP_VEP { tuple val(meta), path("*.vcf.gz") , optional:true, emit: vcf tuple val(meta), path("*.tab.gz") , optional:true, emit: tab tuple val(meta), path("*.json.gz") , optional:true, emit: json - path "*.summary.html" , optional:true, emit: report + path "*.html" , optional:true, emit: report path "versions.yml" , emit: versions when: @@ -60,7 +60,7 @@ process ENSEMBLVEP_VEP { echo "" | gzip > ${prefix}.vcf.gz echo "" | gzip > ${prefix}.tab.gz echo "" | gzip > ${prefix}.json.gz - touch ${prefix}.summary.html + touch ${prefix}_summary.html cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/ensemblvep/vep/meta.yml b/modules/nf-core/ensemblvep/vep/meta.yml index d8ff8d1443..9288a93849 100644 --- a/modules/nf-core/ensemblvep/vep/meta.yml +++ b/modules/nf-core/ensemblvep/vep/meta.yml @@ -1,5 +1,6 @@ name: ensemblvep_vep -description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled through `task.ext.args`. +description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled + through `task.ext.args`. keywords: - annotation - vcf @@ -13,75 +14,96 @@ tools: homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - vcf to annotate - - custom_extra_files: - type: file - description: | - extra sample-specific files to be used with the `--custom` flag to be configured with ext.args - (optional) - - genome: - type: string - description: | - which genome to annotate with - - species: - type: string - description: | - which species to annotate with - - cache_version: - type: integer - description: | - which version of the cache to annotate with - - cache: - type: file - description: | - path to VEP cache (optional) - - meta2: - type: map - description: | - Groovy Map containing fasta reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: | - reference FASTA file (optional) - pattern: "*.{fasta,fa}" - - extra_files: - type: file - description: | - path to file(s) needed for plugins (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - custom_extra_files: + type: file + description: | + extra sample-specific files to be used with the `--custom` flag to be configured with ext.args + (optional) + - - genome: + type: string + description: | + which genome to annotate with + - - species: + type: string + description: | + which species to annotate with + - - cache_version: + type: integer + description: | + which version of the cache to annotate with + - - cache: + type: file + description: | + path to VEP cache (optional) + - - meta2: + type: map + description: | + Groovy Map containing fasta reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: | + reference FASTA file (optional) + pattern: "*.{fasta,fa}" + - - extra_files: + type: file + description: | + path to file(s) needed for plugins (optional) output: - vcf: - type: file - description: | - annotated vcf (optional) - pattern: "*.ann.vcf.gz" + - meta: + type: file + description: | + annotated vcf (optional) + pattern: "*.ann.vcf.gz" + - "*.vcf.gz": + type: file + description: | + annotated vcf (optional) + pattern: "*.ann.vcf.gz" - tab: - type: file - description: | - tab file with annotated variants (optional) - pattern: "*.ann.tab.gz" + - meta: + type: file + description: | + tab file with annotated variants (optional) + pattern: "*.ann.tab.gz" + - "*.tab.gz": + type: file + description: | + tab file with annotated variants (optional) + pattern: "*.ann.tab.gz" - json: - type: file - description: | - json file with annotated variants (optional) - pattern: "*.ann.json.gz" + - meta: + type: file + description: | + json file with annotated variants (optional) + pattern: "*.ann.json.gz" + - "*.json.gz": + type: file + description: | + json file with annotated variants (optional) + pattern: "*.ann.json.gz" - report: - type: file - description: VEP report file - pattern: "*.html" + - "*.html": + type: file + description: VEP report file + pattern: "*.html" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@matthdsm" diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test b/modules/nf-core/ensemblvep/vep/tests/main.nf.test index 4aff84a3c1..e68fff3c0e 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test @@ -21,7 +21,7 @@ nextflow_process { process { """ input[0] = Channel.of([ - [id:"111_WBcel235"], + [id:"112_WBcel235"], params.vep_genome, params.vep_species, params.vep_cache_version @@ -72,7 +72,7 @@ nextflow_process { process { """ input[0] = Channel.of([ - [id:"111_WBcel235"], + [id:"112_WBcel235"], params.vep_genome, params.vep_species, params.vep_cache_version @@ -107,7 +107,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out.versions).match() }, - { assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v111.0") } + { assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v112.0") } ) } } diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap index f937b29949..1c4c0e4e9f 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap @@ -2,25 +2,25 @@ "test_ensemblvep_vep_fasta_tab_gz": { "content": [ [ - "versions.yml:md5,bd2ba1b4741a7d0a224160b50859f4ba" + "versions.yml:md5,d06f1eb60f534489026d682eb3aa5559" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.4" }, - "timestamp": "2024-04-15T17:35:20.694114" + "timestamp": "2024-09-02T10:15:18.228927" }, "test_ensemblvep_vep_fasta_vcf": { "content": [ [ - "versions.yml:md5,bd2ba1b4741a7d0a224160b50859f4ba" + "versions.yml:md5,d06f1eb60f534489026d682eb3aa5559" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.4" }, - "timestamp": "2024-04-15T17:34:41.093843" + "timestamp": "2024-09-02T10:14:50.193861" } } \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/vep/tests/nextflow.config b/modules/nf-core/ensemblvep/vep/tests/nextflow.config index 882bce41a0..9aa481645e 100644 --- a/modules/nf-core/ensemblvep/vep/tests/nextflow.config +++ b/modules/nf-core/ensemblvep/vep/tests/nextflow.config @@ -1,5 +1,5 @@ params { - vep_cache_version = "111" + vep_cache_version = "112" vep_genome = "WBcel235" vep_species = "caenorhabditis_elegans" } diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 70389e664c..26d4aca5dd 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -1,7 +1,5 @@ -name: fastp channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastp=0.23.4 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 4fc19b7443..e1b9f56560 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -10,6 +10,7 @@ process FASTP { input: tuple val(meta), path(reads) path adapter_fasta + val discard_trimmed_pass val save_trimmed_fail val save_merged @@ -18,9 +19,9 @@ process FASTP { tuple val(meta), path('*.json') , emit: json tuple val(meta), path('*.html') , emit: html tuple val(meta), path('*.log') , emit: log - path "versions.yml" , emit: versions tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,6 +31,8 @@ process FASTP { def prefix = task.ext.prefix ?: "${meta.id}" def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" ) + def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz" // Added soft-links to original fastqs for consistent naming in MultiQC // Use single ended for interleaved. Add --interleaved_in in config. if ( task.ext.args?.contains('--interleaved_in') ) { @@ -59,7 +62,7 @@ process FASTP { fastp \\ --in1 ${prefix}.fastq.gz \\ - --out1 ${prefix}.fastp.fastq.gz \\ + $out_fq1 \\ --thread $task.cpus \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ @@ -81,8 +84,8 @@ process FASTP { fastp \\ --in1 ${prefix}_1.fastq.gz \\ --in2 ${prefix}_2.fastq.gz \\ - --out1 ${prefix}_1.fastp.fastq.gz \\ - --out2 ${prefix}_2.fastp.fastq.gz \\ + $out_fq1 \\ + $out_fq2 \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ $adapter_list \\ @@ -103,14 +106,16 @@ process FASTP { stub: def prefix = task.ext.prefix ?: "${meta.id}" def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = is_single_output ? "${prefix}.fastp.fastq.gz" : "${prefix}_1.fastp.fastq.gz ${prefix}_2.fastp.fastq.gz" - def touch_merged = (!is_single_output && save_merged) ? "touch ${prefix}.merged.fastq.gz" : "" + def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" + def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" + def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz" """ - touch $touch_reads + $touch_reads + $touch_fail_fastq + $touch_merged touch "${prefix}.fastp.json" touch "${prefix}.fastp.html" touch "${prefix}.fastp.log" - $touch_merged cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index c22a16abd9..159404d08d 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -11,62 +11,100 @@ tools: documentation: https://github.com/OpenGene/fastp doi: 10.1093/bioinformatics/bty560 licence: ["MIT"] + identifier: biotools:fastp input: - - meta: - type: map - description: | - Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. If you wish to run interleaved paired-end data, supply as single-end data - but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. - - adapter_fasta: - type: file - description: File in FASTA format containing possible adapters to remove. - pattern: "*.{fasta,fna,fas,fa}" - - save_trimmed_fail: - type: boolean - description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` - - save_merged: - type: boolean - description: Specify true to save all merged reads to the a file ending in `*.merged.fastq.gz` + - - meta: + type: map + description: | + Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. If you wish to run interleaved paired-end data, supply as single-end data + but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. + - - adapter_fasta: + type: file + description: File in FASTA format containing possible adapters to remove. + pattern: "*.{fasta,fna,fas,fa}" + - - discard_trimmed_pass: + type: boolean + description: Specify true to not write any reads that pass trimming thresholds. + | This can be used to use fastp for the output report only. + - - save_trimmed_fail: + type: boolean + description: Specify true to save files that failed to pass trimming thresholds + ending in `*.fail.fastq.gz` + - - save_merged: + type: boolean + description: Specify true to save all merged reads to a file ending in `*.merged.fastq.gz` output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - reads: - type: file - description: The trimmed/modified/unmerged fastq reads - pattern: "*fastp.fastq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fastp.fastq.gz": + type: file + description: The trimmed/modified/unmerged fastq reads + pattern: "*fastp.fastq.gz" - json: - type: file - description: Results in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: Results in JSON format + pattern: "*.json" - html: - type: file - description: Results in HTML format - pattern: "*.html" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: Results in HTML format + pattern: "*.html" - log: - type: file - description: fastq log file - pattern: "*.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: fastq log file + pattern: "*.log" - reads_fail: - type: file - description: Reads the failed the preprocessing - pattern: "*fail.fastq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fail.fastq.gz": + type: file + description: Reads the failed the preprocessing + pattern: "*fail.fastq.gz" - reads_merged: - type: file - description: Reads that were successfully merged - pattern: "*.{merged.fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.merged.fastq.gz": + type: file + description: Reads that were successfully merged + pattern: "*.{merged.fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index 6f1f489785..30dbb8aabf 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -10,221 +10,290 @@ nextflow_process { test("test_fastp_single_end") { when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)" ] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end") } + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_single_end-stub") { - - options '-stub' + test("test_fastp_paired_end") { when { - params { - outdir = "$outputDir" - } + process { """ adapter_fasta = [] + save_trimmed_pass = true save_trimmed_fail = false save_merged = false input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + test("fastp test_fastp_interleaved") { + + config './nextflow.interleaved.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end_stub") } + { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() } ) } } - test("test_fastp_paired_end") { + test("test_fastp_single_end_trim_fail") { when { - params { - outdir = "$outputDir" + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_trim_fail") { + + config './nextflow.save_failed.config' + when { process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.json, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_merged") { + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 198'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end") } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() }, ) } } - test("test_fastp_paired_end-stub") { - - options '-stub' + test("test_fastp_paired_end_merged_adapterlist") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("
") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_single_end_qc_only") { + + when { process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + test("test_fastp_paired_end_qc_only") { + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } @@ -232,114 +301,99 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end-stub") } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("fastp test_fastp_interleaved") { + test("test_fastp_single_end - stub") { + + options "-stub" - config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end - stub") { + + options "-stub" + + when { + process { """ adapter_fasta = [] + save_trimmed_pass = true save_trimmed_fail = false save_merged = false input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "paired end (151 cycles + 151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 162"] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("fastp test_fastp_interleaved_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved") } + { assert snapshot(process.out).match() } ) } } - test("fastp test_fastp_interleaved-stub") { + test("fastp - stub test_fastp_interleaved") { - options '-stub' + options "-stub" config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } @@ -347,277 +401,112 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved-stub") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_single_end_trim_fail") { + test("test_fastp_single_end_trim_fail - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { failed_read_lines.each { failed_read_line -> - { assert path(process.out.reads_fail.get(0).get(1)).linesGzip.contains(failed_read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_trim_fail_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_single_end_trim_fail") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_trim_fail") { + test("test_fastp_paired_end_trim_fail - stub") { + + options "-stub" config './nextflow.save_failed.config' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 162'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { failed_read2_lines.each { failed_read2_line -> - { assert path(process.out.reads_fail.get(0).get(1).get(2)).linesGzip.contains(failed_read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_trim_fail") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged") { + test("test_fastp_paired_end_merged - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } then { - def html_text = [ "
"] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683'] - def read1_lines = [ "@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged-stub") { + test("test_fastp_paired_end_merged_adapterlist - stub") { - options '-stub' + options "-stub" when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true """ } } @@ -625,101 +514,63 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_stub") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged_adapterlist") { + test("test_fastp_single_end_qc_only - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - save_trimmed_fail = false - save_merged = true + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_qc_only - stub") { + + options "-stub" + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } then { - def html_text = [ "
"] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683',"--adapter_fasta"] - def read1_lines = ["@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_adapterlist") } + { assert snapshot(process.out).match() } ) } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 3e87628898..54be7e45f7 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,55 +1,178 @@ { - "fastp test_fastp_interleaved_json": { + "test_fastp_single_end_qc_only - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:19:15.063001" + "timestamp": "2024-07-05T14:31:10.841098" }, - "test_fastp_paired_end_merged-for_stub_match": { + "test_fastp_paired_end": { "content": [ [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:10:13.467574" + "timestamp": "2024-07-05T13:43:28.665779" }, - "versions_interleaved": { + "test_fastp_paired_end_merged_adapterlist": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:24.615634793" + "timestamp": "2024-07-05T13:44:18.210375" }, - "test_fastp_single_end_json": { + "test_fastp_single_end_qc_only": { "content": [ [ [ @@ -57,274 +180,1152 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:18:43.526412" - }, - "versions_paired_end": { - "content": [ + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:42.333545689" + "timestamp": "2024-07-05T13:44:27.380974" }, - "test_fastp_paired_end_match": { + "test_fastp_paired_end_trim_fail": { "content": [ [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:03:06.431833729" - }, - "test_fastp_interleaved-_match": { - "content": [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:19:15.111894" - }, - "test_fastp_paired_end_merged_match": { - "content": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:08:44.496251446" - }, - "versions_single_end_stub": { - "content": [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:27.354051299" + "timestamp": "2024-07-05T13:43:58.749589" }, - "versions_interleaved-stub": { + "fastp - stub test_fastp_interleaved": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:46.535528418" + "timestamp": "2024-07-05T13:50:00.270029" }, - "versions_single_end_trim_fail": { + "test_fastp_single_end - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:03.724591407" + "timestamp": "2024-07-05T13:49:42.502789" }, - "test_fastp_paired_end-for_stub_match": { + "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:07:15.398827" + "timestamp": "2024-07-05T13:54:53.458252" }, - "versions_paired_end-stub": { + "test_fastp_paired_end_merged - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:06.50017282" + "timestamp": "2024-07-05T13:50:27.689379" }, - "versions_single_end": { + "test_fastp_paired_end_merged": { "content": [ [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:55:07.67921647" - }, - "versions_paired_end_merged_stub": { - "content": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:47.350653154" + "timestamp": "2024-07-05T13:44:08.68476" }, - "test_fastp_interleaved-for_stub_match": { + "test_fastp_paired_end - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:06.127974" + "timestamp": "2024-07-05T13:49:51.679221" }, - "versions_paired_end_trim_fail": { + "test_fastp_single_end": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:18.140484878" + "timestamp": "2024-07-05T13:43:18.834322" }, - "test_fastp_single_end-for_stub_match": { + "test_fastp_single_end_trim_fail - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:06:00.244202" + "timestamp": "2024-07-05T14:05:36.898142" }, - "test_fastp_single_end-_match": { + "test_fastp_paired_end_trim_fail - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:18:43.580336" + "timestamp": "2024-07-05T14:05:49.212847" }, - "versions_paired_end_merged_adapterlist": { + "fastp test_fastp_interleaved": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T12:05:37.845370554" + "timestamp": "2024-07-05T13:43:38.910832" }, - "versions_paired_end_merged": { + "test_fastp_single_end_trim_fail": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" + ] + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:32.860543858" + "timestamp": "2024-07-05T13:43:48.22378" }, - "test_fastp_single_end_trim_fail_json": { + "test_fastp_paired_end_qc_only": { "content": [ [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:36.334938" + }, + "test_fastp_paired_end_qc_only - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:41.942317" + "timestamp": "2024-07-05T14:31:27.096468" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e06b..4827da7af2 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/environment.yml b/modules/nf-core/fgbio/callmolecularconsensusreads/environment.yml index 1429e478ec..6f3c75600d 100644 --- a/modules/nf-core/fgbio/callmolecularconsensusreads/environment.yml +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/environment.yml @@ -1,7 +1,5 @@ -name: fgbio_callmolecularconsensusreads channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::fgbio=2.0.2 + - bioconda::fgbio=2.2.1 diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/main.nf b/modules/nf-core/fgbio/callmolecularconsensusreads/main.nf index e9f209ef16..8a2cdb247e 100644 --- a/modules/nf-core/fgbio/callmolecularconsensusreads/main.nf +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/main.nf @@ -4,11 +4,13 @@ process FGBIO_CALLMOLECULARCONSENSUSREADS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fgbio:2.0.2--hdfd78af_0' : - 'biocontainers/fgbio:2.0.2--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/fgbio:2.2.1--hdfd78af_0' : + 'biocontainers/fgbio:2.2.1--hdfd78af_0' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(grouped_bam) + val min_reads + val min_baseq output: tuple val(meta), path("*.bam"), emit: bam @@ -19,19 +21,44 @@ process FGBIO_CALLMOLECULARCONSENSUSREADS { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}_consensus_unmapped" + def mem_gb = 8 + if (!task.memory) { + log.info '[fgbio CallMolecularConsensusReads] Available memory not known - defaulting to 8GB. Specify process memory requirements to change this.' + } else { + mem_gb = task.memory.giga + } + if ("$grouped_bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ fgbio \\ + -Xmx${mem_gb}g \\ --tmp-dir=. \\ + --async-io=true \\ + --compression=1 \\ CallMolecularConsensusReads \\ - --input $bam \\ + --input $grouped_bam \\ + --output ${prefix}.bam \\ + --min-reads ${min_reads} \\ + --min-input-base-quality ${min_baseq} \\ --threads ${task.cpus} \\ - $args \\ - --output ${prefix}.bam + $args; cat <<-END_VERSIONS > versions.yml "${task.process}": fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//') END_VERSIONS """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}_consensus_unmapped" + if ("$grouped_bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//') + END_VERSIONS + """ + } diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/meta.yml b/modules/nf-core/fgbio/callmolecularconsensusreads/meta.yml index f4a6ab1bb8..846c297b19 100644 --- a/modules/nf-core/fgbio/callmolecularconsensusreads/meta.yml +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/meta.yml @@ -4,39 +4,47 @@ keywords: - UMIs - consensus sequence - bam - - sam tools: - fgbio: description: Tools for working with genomic and high throughput sequencing data. homepage: https://github.com/fulcrumgenomics/fgbio documentation: http://fulcrumgenomics.github.io/fgbio/ licence: ["MIT"] + identifier: biotools:fgbio input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false, collapse:false ] - - bam: - type: file - description: | - The input SAM or BAM file. - pattern: "*.{bam,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false, collapse:false ] + - grouped_bam: + type: file + description: | + The input SAM or BAM file, grouped by UMIs + pattern: "*.{bam,sam}" + - - min_reads: + type: integer + description: Minimum number of original reads to build each consensus read. + - - min_baseq: + type: integer + description: Ignore bases in raw reads that have Q below this value. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: | - Output SAM or BAM file to write consensus reads. - pattern: "*.{bam,sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: | + Output SAM or BAM file to write consensus reads. + pattern: "*.{bam,sam}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@sruthipsuresh" maintainers: diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test new file mode 100644 index 0000000000..8a90634051 --- /dev/null +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test @@ -0,0 +1,72 @@ +nextflow_process { + + name "Test Process FGBIO_CALLMOLECULARCONSENSUSREADS" + script "../main.nf" + process "FGBIO_CALLMOLECULARCONSENSUSREADS" + + tag "modules" + tag "modules_nfcore" + tag "fgbio" + tag "fgbio/callmolecularconsensusreads" + tag "fgbio/sortbam" + + setup { + + run("FGBIO_SORTBAM") { + script "../../sortbam/main.nf" + config "./sort.config" + process { + """ + input[0] = [[ id:'homo_sapiens_genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) + ] + """ + } + } + } + + test("homo_sapiens - bam") { + + when { + process { + """ + input[0] = FGBIO_SORTBAM.out.bam + input[1] = 1 + input[2] = 20 + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - stub") { + + options "-stub" + + when { + process { + """ + input[0] = FGBIO_SORTBAM.out.bam + input[1] = 1 + input[2] = 20 + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test.snap b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test.snap new file mode 100644 index 0000000000..088f99238c --- /dev/null +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "homo_sapiens - stub": { + "content": [ + { + "0": [ + [ + { + "id": "homo_sapiens_genome" + }, + "homo_sapiens_genome_consensus_unmapped.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,8a39cbc62685ce7afb5ae36609898bde" + ], + "bam": [ + [ + { + "id": "homo_sapiens_genome" + }, + "homo_sapiens_genome_consensus_unmapped.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,8a39cbc62685ce7afb5ae36609898bde" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-17T06:01:29.676084265" + }, + "homo_sapiens - bam": { + "content": [ + { + "0": [ + [ + { + "id": "homo_sapiens_genome" + }, + "homo_sapiens_genome_consensus_unmapped.bam:md5,f56c861f1f604ecc9894dc9182b170f8" + ] + ], + "1": [ + "versions.yml:md5,8a39cbc62685ce7afb5ae36609898bde" + ], + "bam": [ + [ + { + "id": "homo_sapiens_genome" + }, + "homo_sapiens_genome_consensus_unmapped.bam:md5,f56c861f1f604ecc9894dc9182b170f8" + ] + ], + "versions": [ + "versions.yml:md5,8a39cbc62685ce7afb5ae36609898bde" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:34:16.47828891" + } +} \ No newline at end of file diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/tests/sort.config b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/sort.config new file mode 100644 index 0000000000..b205c8f210 --- /dev/null +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/sort.config @@ -0,0 +1,6 @@ +process { + withName: FGBIO_SORTBAM { + ext.args = '-s TemplateCoordinate' + ext.prefix = { "${meta.id}_out" } + } +} diff --git a/modules/nf-core/fgbio/callmolecularconsensusreads/tests/tags.yml b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/tags.yml new file mode 100644 index 0000000000..4f9fcbad0f --- /dev/null +++ b/modules/nf-core/fgbio/callmolecularconsensusreads/tests/tags.yml @@ -0,0 +1,2 @@ +fgbio/callmolecularconsensusreads: + - "modules/nf-core/fgbio/callmolecularconsensusreads/**" diff --git a/modules/nf-core/fgbio/fastqtobam/environment.yml b/modules/nf-core/fgbio/fastqtobam/environment.yml index 4b1b9e6ecf..6f3c75600d 100644 --- a/modules/nf-core/fgbio/fastqtobam/environment.yml +++ b/modules/nf-core/fgbio/fastqtobam/environment.yml @@ -1,7 +1,5 @@ -name: fgbio_fastqtobam channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::fgbio=2.1.0 + - bioconda::fgbio=2.2.1 diff --git a/modules/nf-core/fgbio/fastqtobam/main.nf b/modules/nf-core/fgbio/fastqtobam/main.nf index f50545c442..b1c884e863 100644 --- a/modules/nf-core/fgbio/fastqtobam/main.nf +++ b/modules/nf-core/fgbio/fastqtobam/main.nf @@ -2,12 +2,10 @@ process FGBIO_FASTQTOBAM { tag "$meta.id" label 'process_low' - // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - // --version argument gives the wrong version conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fgbio:2.1.0--hdfd78af_0' : - 'biocontainers/fgbio:2.1.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/fgbio:2.2.1--hdfd78af_0' : + 'biocontainers/fgbio:2.2.1--hdfd78af_0' }" input: tuple val(meta), path(reads) @@ -27,11 +25,22 @@ process FGBIO_FASTQTOBAM { def sample_name = args.contains("--sample") ? "" : "--sample ${prefix}" def library_name = args.contains("--library") ? "" : "--library ${prefix}" - def VERSION = '2.1.0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ + def mem_gb = 8 + if (!task.memory) { + log.info '[fgbio FastqToBam] Available memory not known - defaulting to 8GB. Specify process memory requirements to change this.' + } else if (mem_gb > task.memory.giga) { + if (task.memory.giga < 2) { + mem_gb = 1 + } else { + mem_gb = task.memory.giga - 1 + } + } + """ fgbio \\ + -Xmx${mem_gb}g \\ --tmp-dir=. \\ + --async-io=true \\ FastqToBam \\ ${args} \\ --input ${reads} \\ @@ -41,7 +50,7 @@ process FGBIO_FASTQTOBAM { cat <<-END_VERSIONS > versions.yml "${task.process}": - fgbio: $VERSION + fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//') END_VERSIONS """ @@ -50,14 +59,12 @@ process FGBIO_FASTQTOBAM { def prefix = task.ext.prefix ?: "${meta.id}" def suffix = task.ext.suffix ?: "bam" - def VERSION = '2.1.0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ touch ${prefix}.${suffix} cat <<-END_VERSIONS > versions.yml "${task.process}": - fgbio: $VERSION + fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/fgbio/fastqtobam/meta.yml b/modules/nf-core/fgbio/fastqtobam/meta.yml index f26f29da29..bce76cf8c0 100644 --- a/modules/nf-core/fgbio/fastqtobam/meta.yml +++ b/modules/nf-core/fgbio/fastqtobam/meta.yml @@ -7,34 +7,49 @@ keywords: - cram tools: - fgbio: - description: A set of tools for working with genomic and high throughput sequencing data, including UMIs + description: A set of tools for working with genomic and high throughput sequencing + data, including UMIs homepage: http://fulcrumgenomics.github.io/fgbio/ documentation: http://fulcrumgenomics.github.io/fgbio/tools/latest/ tool_dev_url: https://github.com/fulcrumgenomics/fgbio licence: ["MIT"] + identifier: biotools:fgbio input: - - reads: - type: file - description: pair of reads to be converted into BAM file - pattern: "*.{fastq.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: pair of reads to be converted into BAM file + pattern: "*.{fastq.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - version: - type: file - description: File containing software version - pattern: "*.{version.yml}" - bam: - type: file - description: Unaligned, unsorted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Unaligned, unsorted BAM file + pattern: "*.{bam}" - cram: - type: file - description: Unaligned, unsorted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Unaligned, unsorted CRAM file + pattern: "*.{cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@lescai" - "@matthdsm" diff --git a/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test b/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test index da90b17ce4..d10a005220 100644 --- a/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test +++ b/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test @@ -17,8 +17,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_umi_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz', checkIfExists: true) ] ] """ @@ -47,8 +47,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_umi_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz', checkIfExists: true) ] ] """ @@ -77,8 +77,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_umi_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz', checkIfExists: true) ] ] """ @@ -105,7 +105,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true) + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true) + ] ] """ } @@ -133,8 +135,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_umi_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz', checkIfExists: true) ] ] """ @@ -163,8 +165,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_umi_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz', checkIfExists: true) ] ] """ @@ -193,8 +195,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_umi_1_fastq_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_umi_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz', checkIfExists: true) ] ] """ diff --git a/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test.snap b/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test.snap index 00831f0c5f..fe9c01cdab 100644 --- a/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test.snap +++ b/modules/nf-core/fgbio/fastqtobam/tests/main.nf.test.snap @@ -6,10 +6,14 @@ ], "test.cram", [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:13:21.972159804" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:35:16.955213727" }, "homo_sapiens - fastq1": { "content": [ @@ -18,10 +22,14 @@ ], [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:13:42.872247708" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:35:50.320465546" }, "homo_sapiens - [fastq1, fastq2] - default": { "content": [ @@ -30,10 +38,14 @@ ], [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:13:10.377114559" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:34:53.093519753" }, "homo_sapiens - [fastq1, fastq2] - umi": { "content": [ @@ -42,10 +54,14 @@ ], [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:13:53.4971996" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:36:07.216840033" }, "homo_sapiens - [fastq1, fastq2] - bam": { "content": [ @@ -54,10 +70,14 @@ ], [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:13:32.920615998" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:35:33.666898844" }, "homo_sapiens - [fastq1, fastq2] - custom sample": { "content": [ @@ -66,10 +86,14 @@ ], [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:14:03.897969056" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:36:24.905643178" }, "homo_sapiens - [fastq1, fastq2] - stub": { "content": [ @@ -78,9 +102,13 @@ ], [ - "versions.yml:md5,f4e3de8480e34bd985000ee28a1f2405" + "versions.yml:md5,f6c3db3a20ce5e11c96e0ddd8ccd51de" ] ], - "timestamp": "2023-11-27T14:14:11.765938243" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:36:38.954087571" } } \ No newline at end of file diff --git a/modules/nf-core/fgbio/groupreadsbyumi/environment.yml b/modules/nf-core/fgbio/groupreadsbyumi/environment.yml index 58e37bf6bd..6f3c75600d 100644 --- a/modules/nf-core/fgbio/groupreadsbyumi/environment.yml +++ b/modules/nf-core/fgbio/groupreadsbyumi/environment.yml @@ -1,7 +1,5 @@ -name: fgbio_groupreadsbyumi channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::fgbio=2.0.2 + - bioconda::fgbio=2.2.1 diff --git a/modules/nf-core/fgbio/groupreadsbyumi/main.nf b/modules/nf-core/fgbio/groupreadsbyumi/main.nf index 7179290c91..da9bf80ace 100644 --- a/modules/nf-core/fgbio/groupreadsbyumi/main.nf +++ b/modules/nf-core/fgbio/groupreadsbyumi/main.nf @@ -4,35 +4,60 @@ process FGBIO_GROUPREADSBYUMI { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fgbio:2.0.2--hdfd78af_0' : - 'biocontainers/fgbio:2.0.2--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/fgbio:2.2.1--hdfd78af_0' : + 'biocontainers/fgbio:2.2.1--hdfd78af_0' }" input: - tuple val(meta), path(taggedbam) + tuple val(meta), path(bam) val(strategy) output: - tuple val(meta), path("*_umi-grouped.bam") , emit: bam - tuple val(meta), path("*_umi_histogram.txt"), emit: histogram - path "versions.yml" , emit: versions + tuple val(meta), path("*.bam") , emit: bam + tuple val(meta), path("*histogram.txt"), emit: histogram + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}_umi-grouped" + def mem_gb = 8 + if (!task.memory) { + log.info '[fgbio FilterConsensusReads] Available memory not known - defaulting to 8GB. Specify process memory requirements to change this.' + } else if (mem_gb > task.memory.giga) { + if (task.memory.giga < 2) { + mem_gb = 1 + } else { + mem_gb = task.memory.giga - 1 + } + } - """ + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ fgbio \\ + -Xmx${mem_gb}g \\ --tmp-dir=. \\ GroupReadsByUmi \\ -s $strategy \\ $args \\ - -i $taggedbam \\ - -o ${prefix}_umi-grouped.bam \\ - -f ${prefix}_umi_histogram.txt + -i $bam \\ + -o ${prefix}.bam \\ + -f ${prefix}_histogram.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fgbio: \$( echo \$(fgbio --version 2>&1 | tr -d '[:cntrl:]' ) | sed -e 's/^.*Version: //;s/\\[.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}_umi-grouped" + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.bam + touch ${prefix}_histogram.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fgbio/groupreadsbyumi/meta.yml b/modules/nf-core/fgbio/groupreadsbyumi/meta.yml index 02ca91f19f..3e525fd647 100644 --- a/modules/nf-core/fgbio/groupreadsbyumi/meta.yml +++ b/modules/nf-core/fgbio/groupreadsbyumi/meta.yml @@ -12,45 +12,56 @@ keywords: - fgbio tools: - fgbio: - description: A set of tools for working with genomic and high throughput sequencing data, including UMIs + description: A set of tools for working with genomic and high throughput sequencing + data, including UMIs homepage: http://fulcrumgenomics.github.io/fgbio/ documentation: http://fulcrumgenomics.github.io/fgbio/tools/latest/ tool_dev_url: https://github.com/fulcrumgenomics/fgbio licence: ["MIT"] + identifier: biotools:fgbio input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: | - BAM file. Note: the MQ tag is required on reads with mapped mates (!) - pattern: "*.bam" - - strategy: - type: value - description: | - Reguired argument: defines the UMI assignment strategy. - Must be chosen among: Identity, Edit, Adjacency, Paired. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: | + BAM file. Note: the MQ tag is required on reads with mapped mates (!) + pattern: "*.bam" + - - strategy: + type: string + enum: ["Identity", "Edit", "Adjacency", "Paired"] + description: | + Reguired argument: defines the UMI assignment strategy. + Must be chosen among: Identity, Edit, Adjacency, Paired. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bam: - type: file - description: UMI-grouped BAM - pattern: "*.bam" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: UMI-grouped BAM + pattern: "*.bam" - histogram: - type: file - description: A text file containing the tag family size counts - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*histogram.txt": + type: file + description: A text file containing the tag family size counts + pattern: "*.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@lescai" maintainers: diff --git a/modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test b/modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test new file mode 100644 index 0000000000..a9e8bd256c --- /dev/null +++ b/modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process FGBIO_GROUPREADSBYUMI" + script "../main.nf" + process "FGBIO_GROUPREADSBYUMI" + + tag "modules" + tag "modules_nfcore" + tag "fgbio" + tag "fgbio/groupreadsbyumi" + + test("sarscov2 - bam") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/umi/test.paired_end.unsorted_tagged.bam', checkIfExists: true) + ] + input[1] = "Adjacency" + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/umi/test.paired_end.unsorted_tagged.bam', checkIfExists: true) + ] + input[1] = "Adjacency" + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test.snap b/modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test.snap new file mode 100644 index 0000000000..dc89a622c7 --- /dev/null +++ b/modules/nf-core/fgbio/groupreadsbyumi/tests/main.nf.test.snap @@ -0,0 +1,108 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e293eed3614f921114b3bd5b0e1ada10" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "histogram": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e293eed3614f921114b3bd5b0e1ada10" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:48:29.108067677" + }, + "sarscov2 - bam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped.bam:md5,35bfc992c30d8e3e50816159fa58cb11" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped_histogram.txt:md5,9a0c622b65209afbce0840e2affff983" + ] + ], + "2": [ + "versions.yml:md5,e293eed3614f921114b3bd5b0e1ada10" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped.bam:md5,35bfc992c30d8e3e50816159fa58cb11" + ] + ], + "histogram": [ + [ + { + "id": "test", + "single_end": false + }, + "test_umi-grouped_histogram.txt:md5,9a0c622b65209afbce0840e2affff983" + ] + ], + "versions": [ + "versions.yml:md5,e293eed3614f921114b3bd5b0e1ada10" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-21T10:48:14.269677258" + } +} \ No newline at end of file diff --git a/modules/nf-core/fgbio/groupreadsbyumi/tests/tags.yml b/modules/nf-core/fgbio/groupreadsbyumi/tests/tags.yml new file mode 100644 index 0000000000..83146c4414 --- /dev/null +++ b/modules/nf-core/fgbio/groupreadsbyumi/tests/tags.yml @@ -0,0 +1,2 @@ +fgbio/groupreadsbyumi: + - "modules/nf-core/fgbio/groupreadsbyumi/**" diff --git a/modules/nf-core/freebayes/environment.yml b/modules/nf-core/freebayes/environment.yml index 6846080a2f..3f59369680 100644 --- a/modules/nf-core/freebayes/environment.yml +++ b/modules/nf-core/freebayes/environment.yml @@ -1,7 +1,5 @@ -name: freebayes channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::freebayes=1.3.6 diff --git a/modules/nf-core/freebayes/meta.yml b/modules/nf-core/freebayes/meta.yml index 1803b2b319..45fc61d5bd 100644 --- a/modules/nf-core/freebayes/meta.yml +++ b/modules/nf-core/freebayes/meta.yml @@ -16,95 +16,101 @@ tools: tool_dev_url: https://github.com/freebayes/freebayes doi: "10.48550/arXiv.1207.3907" licence: ["MIT"] + identifier: biotools:freebayes input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_1: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_1_index: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai}" - - input_2: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_2_index: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai}" - - target_bed: - type: file - description: Optional - Limit analysis to targets listed in this BED-format FILE. - pattern: "*.bed" - - ref_meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test_reference' ] - - fasta: - type: file - description: reference fasta file - pattern: ".{fa,fa.gz,fasta,fasta.gz}" - - ref_idx_meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test_reference' ] - - fasta_fai: - type: file - description: reference fasta file index - pattern: "*.{fa,fasta}.fai" - - samples_meta: - type: map - description: | - Groovy Map containing meta information for the samples file. - e.g. [ id:'test_samples' ] - - samples: - type: file - description: Optional - Limit analysis to samples listed (one per line) in the FILE. - pattern: "*.txt" - - populations_meta: - type: map - description: | - Groovy Map containing meta information for the populations file. - e.g. [ id:'test_populations' ] - - populations: - type: file - description: Optional - Each line of FILE should list a sample and a population which it is part of. - pattern: "*.txt" - - cnv_meta: - type: map - description: | - Groovy Map containing meta information for the cnv file. - e.g. [ id:'test_cnv' ] - - cnv: - type: file - description: | - A copy number map BED file, which has either a sample-level ploidy: - sample_name copy_number - or a region-specific format: - seq_name start end sample_name copy_number - pattern: "*.bed" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_1: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_1_index: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai}" + - input_2: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_2_index: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai}" + - target_bed: + type: file + description: Optional - Limit analysis to targets listed in this BED-format + FILE. + pattern: "*.bed" + - - ref_meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test_reference' ] + - fasta: + type: file + description: reference fasta file + pattern: ".{fa,fa.gz,fasta,fasta.gz}" + - - ref_idx_meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test_reference' ] + - fasta_fai: + type: file + description: reference fasta file index + pattern: "*.{fa,fasta}.fai" + - - samples_meta: + type: map + description: | + Groovy Map containing meta information for the samples file. + e.g. [ id:'test_samples' ] + - samples: + type: file + description: Optional - Limit analysis to samples listed (one per line) in the + FILE. + pattern: "*.txt" + - - populations_meta: + type: map + description: | + Groovy Map containing meta information for the populations file. + e.g. [ id:'test_populations' ] + - populations: + type: file + description: Optional - Each line of FILE should list a sample and a population + which it is part of. + pattern: "*.txt" + - - cnv_meta: + type: map + description: | + Groovy Map containing meta information for the cnv file. + e.g. [ id:'test_cnv' ] + - cnv: + type: file + description: | + A copy number map BED file, which has either a sample-level ploidy: + sample_name copy_number + or a region-specific format: + seq_name start end sample_name copy_number + pattern: "*.bed" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software version - pattern: "versions.yml" - vcf: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - versions: + - versions.yml: + type: file + description: File containing software version + pattern: "versions.yml" authors: - "@maxibor" - "@FriederikeHanssen" diff --git a/modules/nf-core/freebayes/tests/main.nf.test b/modules/nf-core/freebayes/tests/main.nf.test index bee25a8e78..eb2d7a8055 100644 --- a/modules/nf-core/freebayes/tests/main.nf.test +++ b/modules/nf-core/freebayes/tests/main.nf.test @@ -15,14 +15,14 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [], [], [] ] - input[1] = [ [ id: 'test_fasta' ], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id: 'test_fai' ], file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) ] + input[1] = [ [ id: 'test_fasta' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id: 'test_fai' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [], [] ] input[4] = [ [], [] ] input[5] = [ [], [] ] @@ -33,10 +33,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Output VCF includes a timestamp, so snapshot not consistent past a day. - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("test.vcf.gz") }, - { assert path(process.out.vcf.get(0).get(1)).linesGzip.toString().contains('MT192765.1\t10214\t.\tATTTAC\tATTAC\t29.8242') }, - { assert snapshot(process.out.versions).match() }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + path(process.out.vcf[0][1]).linesGzip[2..10], + process.out.versions + ).match() + } ) } @@ -49,14 +51,14 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [], [], - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true), ] - input[1] = [ [ id: 'fasta' ], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id: 'fai' ], file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) ] + input[1] = [ [ id: 'fasta' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id: 'fai' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [], [] ] input[4] = [ [], [] ] input[5] = [ [], [] ] @@ -67,9 +69,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Output VCF includes a timestamp, so snapshot not consistent past a day. - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("test.vcf.gz") }, - { assert snapshot(process.out.versions).match() }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + path(process.out.vcf[0][1]).linesGzip[2..10], + process.out.versions + ).match() + } ) } @@ -82,14 +87,14 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), [], [], [], ] - input[1] = [ [ id: 'fasta' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id: 'fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] + input[1] = [ [ id: 'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id: 'fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [], [] ] input[4] = [ [], [] ] input[5] = [ [], [] ] @@ -100,10 +105,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Output VCF includes a timestamp, so snapshot not consistent past a day. - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("test.vcf.gz") }, - { assert path(process.out.vcf.get(0).get(1)).linesGzip.toString().contains("chr22\t1982\t.\tA\tG\t459.724") }, - { assert snapshot(process.out.versions).match() }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + path(process.out.vcf[0][1]).linesGzip[2..10], + process.out.versions + ).match() + } ) } @@ -116,14 +123,14 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam.bai', checkIfExists: true), [], ] - input[1] = [ [ id: 'fasta' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id: 'fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] + input[1] = [ [ id: 'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id: 'fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [], [] ] input[4] = [ [], [] ] input[5] = [ [], [] ] @@ -134,10 +141,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Output VCF includes a timestamp, so snapshot not consistent past a day. - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("test.vcf.gz") }, - { assert path(process.out.vcf.get(0).get(1)).linesGzip.toString().contains("chr22\t1982\t.\tA\tG\t670.615") }, - { assert snapshot(process.out.versions).match() }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + path(process.out.vcf[0][1]).linesGzip[2..10], + process.out.versions + ).match() + } ) } @@ -150,14 +159,14 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_cram_crai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true), ] - input[1] = [ [ id: 'fasta' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id: 'fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] + input[1] = [ [ id: 'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id: 'fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [], [] ] input[4] = [ [], [] ] input[5] = [ [], [] ] @@ -168,10 +177,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Output VCF includes a timestamp, so snapshot not consistent past a day. - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("test.vcf.gz") }, - { assert path(process.out.vcf.get(0).get(1)).linesGzip.toString().contains("chr22\t1982\t.\tA\tG\t670.615") }, - { assert snapshot(process.out.versions).match() }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + path(process.out.vcf[0][1]).linesGzip[2..10], + process.out.versions + ).match() + } ) } diff --git a/modules/nf-core/freebayes/tests/main.nf.test.snap b/modules/nf-core/freebayes/tests/main.nf.test.snap index 9760a680e8..f9f25a2ee2 100644 --- a/modules/nf-core/freebayes/tests/main.nf.test.snap +++ b/modules/nf-core/freebayes/tests/main.nf.test.snap @@ -1,48 +1,122 @@ { "sarscov2 - [ cram, crai, cram, crai, bed ] - fasta - fai": { "content": [ + "test.vcf.gz", + [ + "##source=freeBayes v1.3.6", + "##reference=genome.fasta", + "##contig=", + "##phasing=none", + "##commandline=\"freebayes -f genome.fasta --target genome.bed test.paired_end.sorted.cram test2.paired_end.sorted.cram\"", + "##INFO=", + "##INFO=", + "##INFO=", + "##INFO=" + ], [ "versions.yml:md5,4d24a735eabf2f037ab935511a2bc99c" ] ], - "timestamp": "2023-12-13T12:20:01.263906" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-14T16:16:26.462458" }, "sarscov2 - [ bam, bai ] - fasta - fai": { "content": [ + "test.vcf.gz", + [ + "##source=freeBayes v1.3.6", + "##reference=genome.fasta", + "##contig=", + "##phasing=none", + "##commandline=\"freebayes -f genome.fasta test.paired_end.sorted.bam\"", + "##INFO=", + "##INFO=", + "##INFO=", + "##INFO=" + ], [ "versions.yml:md5,4d24a735eabf2f037ab935511a2bc99c" ] ], - "timestamp": "2023-12-13T12:19:37.06375" - }, - "test.vcf.gz": { - "content": [ - "test.vcf.gz" - ], - "timestamp": "2023-12-13T12:19:37.050165" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-14T16:16:02.547974" }, "sarscov2 - [ cram, crai ] - fasta - fai": { "content": [ + "test.vcf.gz", + [ + "##source=freeBayes v1.3.6", + "##reference=genome.fasta", + "##contig=", + "##phasing=none", + "##commandline=\"freebayes -f genome.fasta test.paired_end.sorted.cram\"", + "##INFO=", + "##INFO=", + "##INFO=", + "##INFO=" + ], [ "versions.yml:md5,4d24a735eabf2f037ab935511a2bc99c" ] ], - "timestamp": "2023-12-13T12:19:48.797103" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-14T16:16:13.594195" }, "sarscov2 - [ bam, bai, bed ] - fasta - fai": { "content": [ + "test.vcf.gz", + [ + "##source=freeBayes v1.3.6", + "##reference=genome.fasta", + "##contig=", + "##phasing=none", + "##commandline=\"freebayes -f genome.fasta --target test.bed test.paired_end.sorted.bam\"", + "##INFO=", + "##INFO=", + "##INFO=", + "##INFO=" + ], [ "versions.yml:md5,4d24a735eabf2f037ab935511a2bc99c" ] ], - "timestamp": "2023-12-13T12:19:43.147912" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-14T16:16:07.514526" }, "sarscov2 - [ bam, bai, bam, bai ] - fasta - fai": { "content": [ + "test.vcf.gz", + [ + "##source=freeBayes v1.3.6", + "##reference=genome.fasta", + "##contig=", + "##phasing=none", + "##commandline=\"freebayes -f genome.fasta test.paired_end.sorted.bam test2.paired_end.sorted.bam\"", + "##INFO=", + "##INFO=", + "##INFO=", + "##INFO=" + ], [ "versions.yml:md5,4d24a735eabf2f037ab935511a2bc99c" ] ], - "timestamp": "2023-12-13T12:19:55.186773" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-14T16:16:20.085987" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/applybqsr/environment.yml b/modules/nf-core/gatk4/applybqsr/environment.yml index 80c811e6c1..55993f440c 100644 --- a/modules/nf-core/gatk4/applybqsr/environment.yml +++ b/modules/nf-core/gatk4/applybqsr/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_applybqsr channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/applybqsr/meta.yml b/modules/nf-core/gatk4/applybqsr/meta.yml index ab9efea3f4..65d9c9e9a8 100644 --- a/modules/nf-core/gatk4/applybqsr/meta.yml +++ b/modules/nf-core/gatk4/applybqsr/meta.yml @@ -16,56 +16,65 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - bqsr_table: - type: file - description: Recalibration table from gatk4_baserecalibrator - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - bqsr_table: + type: file + description: Recalibration table from gatk4_baserecalibrator + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bam: - type: file - description: Recalibrated BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Recalibrated BAM file + pattern: "*.{bam}" - cram: - type: file - description: Recalibrated CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Recalibrated CRAM file + pattern: "*.{cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yocra3" - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4/applyvqsr/environment.yml b/modules/nf-core/gatk4/applyvqsr/environment.yml index c043cd632a..55993f440c 100644 --- a/modules/nf-core/gatk4/applyvqsr/environment.yml +++ b/modules/nf-core/gatk4/applyvqsr/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_applyvqsr channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/applyvqsr/meta.yml b/modules/nf-core/gatk4/applyvqsr/meta.yml index de5d6d067a..ceedff621e 100644 --- a/modules/nf-core/gatk4/applyvqsr/meta.yml +++ b/modules/nf-core/gatk4/applyvqsr/meta.yml @@ -19,57 +19,72 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: file - description: VCF file to be recalibrated, this should be the same file as used for the first stage VariantRecalibrator. - pattern: "*.vcf" - - vcf_tbi: - type: file - description: tabix index for the input vcf file. - pattern: "*.vcf.tbi" - - recal: - type: file - description: Recalibration file produced when the input vcf was run through VariantRecalibrator in stage 1. - pattern: "*.recal" - - recal_index: - type: file - description: Index file for the recalibration file. - pattern: ".recal.idx" - - tranches: - type: file - description: Tranches file produced when the input vcf was run through VariantRecalibrator in stage 1. - pattern: ".tranches" - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: file + description: VCF file to be recalibrated, this should be the same file as used + for the first stage VariantRecalibrator. + pattern: "*.vcf" + - vcf_tbi: + type: file + description: tabix index for the input vcf file. + pattern: "*.vcf.tbi" + - recal: + type: file + description: Recalibration file produced when the input vcf was run through + VariantRecalibrator in stage 1. + pattern: "*.recal" + - recal_index: + type: file + description: Index file for the recalibration file. + pattern: ".recal.idx" + - tranches: + type: file + description: Tranches file produced when the input vcf was run through VariantRecalibrator + in stage 1. + pattern: ".tranches" + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - vcf: - type: file - description: compressed vcf file containing the recalibrated variants. - pattern: "*.vcf.gz" + - meta: + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" - tbi: - type: file - description: Index of recalibrated vcf file. - pattern: "*vcf.gz.tbi" + - meta: + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" + - "*.tbi": + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" - versions: - type: file - description: File containing software versions. - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions. + pattern: "versions.yml" authors: - "@GCJMackenzie" maintainers: diff --git a/modules/nf-core/gatk4/baserecalibrator/environment.yml b/modules/nf-core/gatk4/baserecalibrator/environment.yml index 365e5c6319..55993f440c 100644 --- a/modules/nf-core/gatk4/baserecalibrator/environment.yml +++ b/modules/nf-core/gatk4/baserecalibrator/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_baserecalibrator channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/baserecalibrator/meta.yml b/modules/nf-core/gatk4/baserecalibrator/meta.yml index 8252b8c290..876b796039 100644 --- a/modules/nf-core/gatk4/baserecalibrator/meta.yml +++ b/modules/nf-core/gatk4/baserecalibrator/meta.yml @@ -16,57 +16,60 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - known_sites: - type: file - description: VCF files with known sites for indels / snps (optional) - pattern: "*.vcf.gz" - - known_sites_tbi: - type: file - description: Tabix index of the known_sites (optional) - pattern: "*.vcf.gz.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - - known_sites: + type: file + description: VCF files with known sites for indels / snps (optional) + pattern: "*.vcf.gz" + - - known_sites_tbi: + type: file + description: Tabix index of the known_sites (optional) + pattern: "*.vcf.gz.tbi" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - table: - type: file - description: Recalibration table from BaseRecalibrator - pattern: "*.{table}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.table": + type: file + description: Recalibration table from BaseRecalibrator + pattern: "*.{table}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yocra3" - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4/calculatecontamination/environment.yml b/modules/nf-core/gatk4/calculatecontamination/environment.yml index 5ec9c48293..55993f440c 100644 --- a/modules/nf-core/gatk4/calculatecontamination/environment.yml +++ b/modules/nf-core/gatk4/calculatecontamination/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_calculatecontamination channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/calculatecontamination/meta.yml b/modules/nf-core/gatk4/calculatecontamination/meta.yml index b0ffe814c5..ee90a48252 100644 --- a/modules/nf-core/gatk4/calculatecontamination/meta.yml +++ b/modules/nf-core/gatk4/calculatecontamination/meta.yml @@ -17,33 +17,50 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pileup: - type: file - description: File containing the pileups summary table of a tumor sample to be used to calculate contamination. - pattern: "*.pileups.table" - - matched: - type: file - description: File containing the pileups summary table of a normal sample that matches with the tumor sample specified in pileup argument. This is an optional input. - pattern: "*.pileups.table" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - pileup: + type: file + description: File containing the pileups summary table of a tumor sample to + be used to calculate contamination. + pattern: "*.pileups.table" + - matched: + type: file + description: File containing the pileups summary table of a normal sample that + matches with the tumor sample specified in pileup argument. This is an optional + input. + pattern: "*.pileups.table" output: - contamination: - type: file - description: File containing the contamination table. - pattern: "*.contamination.table" + - meta: + type: file + description: File containing the contamination table. + pattern: "*.contamination.table" + - "*.contamination.table": + type: file + description: File containing the contamination table. + pattern: "*.contamination.table" - segmentation: - type: file - description: output table containing segmentation of tumor minor allele fractions (optional) - pattern: "*.segmentation.table" + - meta: + type: file + description: output table containing segmentation of tumor minor allele fractions + (optional) + pattern: "*.segmentation.table" + - "*.segmentation.table": + type: file + description: output table containing segmentation of tumor minor allele fractions + (optional) + pattern: "*.segmentation.table" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" - "@maxulysse" diff --git a/modules/nf-core/gatk4/cnnscorevariants/meta.yml b/modules/nf-core/gatk4/cnnscorevariants/meta.yml index 8a9d0f51c2..b55c9d9995 100644 --- a/modules/nf-core/gatk4/cnnscorevariants/meta.yml +++ b/modules/nf-core/gatk4/cnnscorevariants/meta.yml @@ -14,65 +14,74 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF file - pattern: "*.vcf.gz" - - tbi: - type: file - description: VCF index file - pattern: "*.vcf.gz.tbi" - - aligned_input: - type: file - description: BAM/CRAM file from alignment (optional) - pattern: "*.{bam,cram}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - architecture: - type: file - description: Neural Net architecture configuration json file (optional) - pattern: "*.json" - - weights: - type: file - description: Keras model HD5 file with neural net weights. (optional) - pattern: "*.hd5" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF file + pattern: "*.vcf.gz" + - tbi: + type: file + description: VCF index file + pattern: "*.vcf.gz.tbi" + - aligned_input: + type: file + description: BAM/CRAM file from alignment (optional) + pattern: "*.{bam,cram}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - - architecture: + type: file + description: Neural Net architecture configuration json file (optional) + pattern: "*.json" + - - weights: + type: file + description: Keras model HD5 file with neural net weights. (optional) + pattern: "*.hd5" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: Annotated VCF file - pattern: "*.vcf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cnn.vcf.gz": + type: file + description: Annotated VCF file + pattern: "*.vcf" - tbi: - type: file - description: VCF index file - pattern: "*.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cnn.vcf.gz.tbi": + type: file + description: VCF index file + pattern: "*.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml index 78822ad03f..55993f440c 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/environment.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_createsequencedictionary channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index f9d70be098..7b5156bb3d 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -15,25 +15,32 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Input fasta file - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" output: - dict: - type: file - description: gatk dictionary file - pattern: "*.{dict}" + - meta: + type: file + description: gatk dictionary file + pattern: "*.{dict}" + - "*.dict": + type: file + description: gatk dictionary file + pattern: "*.{dict}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/estimatelibrarycomplexity/environment.yml b/modules/nf-core/gatk4/estimatelibrarycomplexity/environment.yml index 5fdd85af80..55993f440c 100644 --- a/modules/nf-core/gatk4/estimatelibrarycomplexity/environment.yml +++ b/modules/nf-core/gatk4/estimatelibrarycomplexity/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_estimatelibrarycomplexity channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/estimatelibrarycomplexity/meta.yml b/modules/nf-core/gatk4/estimatelibrarycomplexity/meta.yml index 2d5bddf6c9..4fb06a3a2e 100644 --- a/modules/nf-core/gatk4/estimatelibrarycomplexity/meta.yml +++ b/modules/nf-core/gatk4/estimatelibrarycomplexity/meta.yml @@ -13,42 +13,45 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - metrics: - type: file - description: File containing metrics on the input files - pattern: "*.{metrics}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: File containing metrics on the input files + pattern: "*.{metrics}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" - "@maxulysse" diff --git a/modules/nf-core/gatk4/filtermutectcalls/environment.yml b/modules/nf-core/gatk4/filtermutectcalls/environment.yml index 7494d84dbc..55993f440c 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/environment.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_filtermutectcalls channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/filtermutectcalls/meta.yml b/modules/nf-core/gatk4/filtermutectcalls/meta.yml index 736c838625..9287277eb7 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/meta.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/meta.yml @@ -16,83 +16,103 @@ tools: homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - vcf: - type: file - description: compressed vcf file of mutect2calls - pattern: "*.vcf.gz" - - vcf_tbi: - type: file - description: Tabix index of vcf file - pattern: "*vcf.gz.tbi" - - stats: - type: file - description: Stats file that pairs with output vcf file - pattern: "*vcf.gz.stats" - - orientationbias: - type: file - description: files containing artifact priors for input vcf. Optional input. - pattern: "*.artifact-prior.tar.gz" - - segmentation: - type: file - description: tables containing segmentation information for input vcf. Optional input. - pattern: "*.segmentation.table" - - table: - type: file - description: table(s) containing contamination data for input vcf. Optional input, takes priority over estimate. - pattern: "*.contamination.table" - - estimate: - type: float - description: estimation of contamination value as a double. Optional input, will only be used if table is not specified. - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: compressed vcf file of mutect2calls + pattern: "*.vcf.gz" + - vcf_tbi: + type: file + description: Tabix index of vcf file + pattern: "*vcf.gz.tbi" + - stats: + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" + - orientationbias: + type: file + description: files containing artifact priors for input vcf. Optional input. + pattern: "*.artifact-prior.tar.gz" + - segmentation: + type: file + description: tables containing segmentation information for input vcf. Optional + input. + pattern: "*.segmentation.table" + - table: + type: file + description: table(s) containing contamination data for input vcf. Optional + input, takes priority over estimate. + pattern: "*.contamination.table" + - estimate: + type: float + description: estimation of contamination value as a double. Optional input, + will only be used if table is not specified. + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - vcf: - type: file - description: file containing filtered mutect2 calls. - pattern: "*.vcf.gz" + - meta: + type: file + description: file containing filtered mutect2 calls. + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: file containing filtered mutect2 calls. + pattern: "*.vcf.gz" - tbi: - type: file - description: tbi file that pairs with vcf. - pattern: "*.vcf.gz.tbi" + - meta: + type: file + description: tbi file that pairs with vcf. + pattern: "*.vcf.gz.tbi" + - "*.vcf.gz.tbi": + type: file + description: tbi file that pairs with vcf. + pattern: "*.vcf.gz.tbi" - stats: - type: file - description: file containing statistics of the filtermutectcalls run. - pattern: "*.filteringStats.tsv" + - meta: + type: file + description: file containing statistics of the filtermutectcalls run. + pattern: "*.filteringStats.tsv" + - "*.filteringStats.tsv": + type: file + description: file containing statistics of the filtermutectcalls run. + pattern: "*.filteringStats.tsv" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" - "@maxulysse" diff --git a/modules/nf-core/gatk4/filtervarianttranches/environment.yml b/modules/nf-core/gatk4/filtervarianttranches/environment.yml index 9763cf1eff..55993f440c 100644 --- a/modules/nf-core/gatk4/filtervarianttranches/environment.yml +++ b/modules/nf-core/gatk4/filtervarianttranches/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_filtervarianttranches channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/filtervarianttranches/meta.yml b/modules/nf-core/gatk4/filtervarianttranches/meta.yml index 9346d2b4a4..398bbb07c1 100644 --- a/modules/nf-core/gatk4/filtervarianttranches/meta.yml +++ b/modules/nf-core/gatk4/filtervarianttranches/meta.yml @@ -14,58 +14,72 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360051308071-FilterVariantTranches doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: a VCF file containing variants, must have info key:CNN_2D - pattern: "*.vcf.gz" - - tbi: - type: file - description: tbi file matching with -vcf - pattern: "*.vcf.gz.tbi" - - resources: - type: list - description: resource A VCF containing known SNP and or INDEL sites. Can be supplied as many times as necessary - pattern: "*.vcf.gz" - - resources_index: - type: list - description: Index of resource VCF containing known SNP and or INDEL sites. Can be supplied as many times as necessary - pattern: "*.vcf.gz" - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: ".dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: a VCF file containing variants, must have info key:CNN_2D + pattern: "*.vcf.gz" + - tbi: + type: file + description: tbi file matching with -vcf + pattern: "*.vcf.gz.tbi" + - intervals: + type: file + description: Intervals + - - resources: + type: list + description: resource A VCF containing known SNP and or INDEL sites. Can be + supplied as many times as necessary + pattern: "*.vcf.gz" + - - resources_index: + type: list + description: Index of resource VCF containing known SNP and or INDEL sites. + Can be supplied as many times as necessary + pattern: "*.vcf.gz" + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: ".dict" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: VCF file + pattern: "*.vcf.gz" - tbi: - type: file - description: VCF index file - pattern: "*.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz.tbi": + type: file + description: VCF index file + pattern: "*.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/gatk4/gatherbqsrreports/environment.yml b/modules/nf-core/gatk4/gatherbqsrreports/environment.yml index 4248a29812..55993f440c 100644 --- a/modules/nf-core/gatk4/gatherbqsrreports/environment.yml +++ b/modules/nf-core/gatk4/gatherbqsrreports/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_gatherbqsrreports channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/gatherbqsrreports/meta.yml b/modules/nf-core/gatk4/gatherbqsrreports/meta.yml index b9f5bf5f8b..587175b3a4 100644 --- a/modules/nf-core/gatk4/gatherbqsrreports/meta.yml +++ b/modules/nf-core/gatk4/gatherbqsrreports/meta.yml @@ -13,30 +13,33 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - table: - type: file - description: File(s) containing BQSR table(s) - pattern: "*.table" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - table: + type: file + description: File(s) containing BQSR table(s) + pattern: "*.table" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - table: - type: file - description: File containing joined BQSR table - pattern: "*.table" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.table": + type: file + description: File containing joined BQSR table + pattern: "*.table" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test b/modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test new file mode 100644 index 0000000000..173b149b54 --- /dev/null +++ b/modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test @@ -0,0 +1,60 @@ + +nextflow_process { + + name "Test Process GATK4_GATHERBQSRREPORTS" + script "../main.nf" + process "GATK4_GATHERBQSRREPORTS" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/gatherbqsrreports" + + test("test-gatk4-gatherbqsrreports") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-gatk4-gatherbqsrreports-multiple") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test2.baserecalibrator.table', checkIfExists: true) + ] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test.snap b/modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test.snap new file mode 100644 index 0000000000..bc5d4bd133 --- /dev/null +++ b/modules/nf-core/gatk4/gatherbqsrreports/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "test-gatk4-gatherbqsrreports-multiple": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.table:md5,0c1257eececf95db8ca378272d0f21f9" + ] + ], + "1": [ + "versions.yml:md5,413fc0014d5dc41ab67d65f59f61a4a0" + ], + "table": [ + [ + { + "id": "test", + "single_end": false + }, + "test.table:md5,0c1257eececf95db8ca378272d0f21f9" + ] + ], + "versions": [ + "versions.yml:md5,413fc0014d5dc41ab67d65f59f61a4a0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:22:34.490694" + }, + "test-gatk4-gatherbqsrreports": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.table:md5,9603b69fdc3b5090de2e0dd78bfcc4bf" + ] + ], + "1": [ + "versions.yml:md5,413fc0014d5dc41ab67d65f59f61a4a0" + ], + "table": [ + [ + { + "id": "test", + "single_end": false + }, + "test.table:md5,9603b69fdc3b5090de2e0dd78bfcc4bf" + ] + ], + "versions": [ + "versions.yml:md5,413fc0014d5dc41ab67d65f59f61a4a0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:22:10.552951" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/gatherpileupsummaries/environment.yml b/modules/nf-core/gatk4/gatherpileupsummaries/environment.yml index 217387f9c0..55993f440c 100644 --- a/modules/nf-core/gatk4/gatherpileupsummaries/environment.yml +++ b/modules/nf-core/gatk4/gatherpileupsummaries/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_gatherpileupsummaries channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/gatherpileupsummaries/main.nf b/modules/nf-core/gatk4/gatherpileupsummaries/main.nf index 561e9bb8b8..c784d59ab2 100644 --- a/modules/nf-core/gatk4/gatherpileupsummaries/main.nf +++ b/modules/nf-core/gatk4/gatherpileupsummaries/main.nf @@ -14,7 +14,7 @@ process GATK4_GATHERPILEUPSUMMARIES { output: tuple val(meta), path("*.pileups.table"), emit: table - path "versions.yml" , emit: versions + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/gatk4/gatherpileupsummaries/meta.yml b/modules/nf-core/gatk4/gatherpileupsummaries/meta.yml index 35381a3b51..d8b29d2100 100644 --- a/modules/nf-core/gatk4/gatherpileupsummaries/meta.yml +++ b/modules/nf-core/gatk4/gatherpileupsummaries/meta.yml @@ -12,30 +12,36 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - pileup: - type: file - description: Pileup files from gatk4/getpileupsummaries - pattern: "*.pileups.table" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pileup: + type: file + description: Pileup files from gatk4/getpileupsummaries + pattern: "*.pileups.table" + - - dict: + type: file + description: dictionary output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - table: - type: file - description: pileup summaries table file - pattern: "*.pileups.table" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pileups.table": + type: file + description: pileup summaries table file + pattern: "*.pileups.table" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" - "@maxulysse" diff --git a/modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test b/modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test new file mode 100644 index 0000000000..8497e64db3 --- /dev/null +++ b/modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test @@ -0,0 +1,37 @@ + +nextflow_process { + + name "Test Process GATK4_GATHERPILEUPSUMMARIES" + script "../main.nf" + process "GATK4_GATHERPILEUPSUMMARIES" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/gatherpileupsummaries" + + test("test-gatk4-gatherpileupsummaries") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test.pileups.table', checkIfExists: true) ] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test.snap b/modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test.snap new file mode 100644 index 0000000000..f05a7ef0d1 --- /dev/null +++ b/modules/nf-core/gatk4/gatherpileupsummaries/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "test-gatk4-gatherpileupsummaries": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.pileups.table:md5,8e0ca6f66e112bd2f7ec1d31a2d62469" + ] + ], + "1": [ + "versions.yml:md5,d3772ab0d5963a88a2748fd83af76c02" + ], + "table": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.pileups.table:md5,8e0ca6f66e112bd2f7ec1d31a2d62469" + ] + ], + "versions": [ + "versions.yml:md5,d3772ab0d5963a88a2748fd83af76c02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:18:40.835226" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/gatherpileupsummaries/tests/nextflow.config b/modules/nf-core/gatk4/gatherpileupsummaries/tests/nextflow.config new file mode 100644 index 0000000000..2b49a6fa39 --- /dev/null +++ b/modules/nf-core/gatk4/gatherpileupsummaries/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'GATK4_GATHERPILEUPSUMMARIES' { + ext.prefix = { "${meta.id}.out" } + } +} diff --git a/modules/nf-core/gatk4/genomicsdbimport/environment.yml b/modules/nf-core/gatk4/genomicsdbimport/environment.yml index a3a13636c6..55993f440c 100644 --- a/modules/nf-core/gatk4/genomicsdbimport/environment.yml +++ b/modules/nf-core/gatk4/genomicsdbimport/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_genomicsdbimport channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/genomicsdbimport/meta.yml b/modules/nf-core/gatk4/genomicsdbimport/meta.yml index 11e565b104..174ae2eb0a 100644 --- a/modules/nf-core/gatk4/genomicsdbimport/meta.yml +++ b/modules/nf-core/gatk4/genomicsdbimport/meta.yml @@ -1,5 +1,6 @@ name: gatk4_genomicsdbimport -description: merge GVCFs from multiple samples. For use in joint genotyping or somatic panel of normal creation. +description: merge GVCFs from multiple samples. For use in joint genotyping or somatic + panel of normal creation. keywords: - gatk4 - genomicsdb @@ -15,61 +16,99 @@ tools: homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: list - description: either a list of vcf files to be used to create or update a genomicsdb, or a file that contains a map to vcf files to be used. - pattern: "*.vcf.gz" - - tbi: - type: list - description: list of tbi files that match with the input vcf files - pattern: "*.vcf.gz_tbi" - - wspace: - type: file - description: path to an existing genomicsdb to be used in update db mode or get intervals mode. This WILL NOT specify name of a new genomicsdb in create db mode. - pattern: "/path/to/existing/gendb" - - interval_file: - type: file - description: file containing the intervals to be used when creating the genomicsdb - pattern: "*.interval_list" - - interval_value: - type: string - description: if an intervals file has not been spcified, the value enetered here will be used as an interval via the "-L" argument - pattern: "example: chr1:1000-10000" - - run_intlist: - type: boolean - description: Specify whether to run get interval list mode, this option cannot be specified at the same time as run_updatewspace. - pattern: "true/false" - - run_updatewspace: - type: boolean - description: Specify whether to run update genomicsdb mode, this option takes priority over run_intlist. - pattern: "true/false" - - input_map: - type: boolean - description: Specify whether the vcf input is providing a list of vcf file(s) or a single file containing a map of paths to vcf files to be used to create or update a genomicsdb. - pattern: "*.sample_map" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: either a list of vcf files to be used to create or update a genomicsdb, + or a file that contains a map to vcf files to be used. + pattern: "*.vcf.gz" + - tbi: + type: list + description: list of tbi files that match with the input vcf files + pattern: "*.vcf.gz_tbi" + - interval_file: + type: file + description: file containing the intervals to be used when creating the genomicsdb + pattern: "*.interval_list" + - interval_value: + type: string + description: if an intervals file has not been spcified, the value enetered + here will be used as an interval via the "-L" argument + pattern: "example: chr1:1000-10000" + - wspace: + type: file + description: path to an existing genomicsdb to be used in update db mode or + get intervals mode. This WILL NOT specify name of a new genomicsdb in create + db mode. + pattern: "/path/to/existing/gendb" + - - run_intlist: + type: boolean + description: Specify whether to run get interval list mode, this option cannot + be specified at the same time as run_updatewspace. + pattern: "true/false" + - - run_updatewspace: + type: boolean + description: Specify whether to run update genomicsdb mode, this option takes + priority over run_intlist. + pattern: "true/false" + - - input_map: + type: boolean + description: Specify whether the vcf input is providing a list of vcf file(s) + or a single file containing a map of paths to vcf files to be used to create + or update a genomicsdb. + pattern: "*.sample_map" output: - genomicsdb: - type: directory - description: Directory containing the files that compose the genomicsdb workspace, this is only output for create mode, as update changes an existing db - pattern: "*/$prefix" + - meta: + type: directory + description: Directory containing the files that compose the genomicsdb workspace, + this is only output for create mode, as update changes an existing db + pattern: "*/$prefix" + - $prefix: + type: directory + description: Directory containing the files that compose the genomicsdb workspace, + this is only output for create mode, as update changes an existing db + pattern: "*/$prefix" - updatedb: - type: directory - description: Directory containing the files that compose the updated genomicsdb workspace, this is only output for update mode, and should be the same path as the input wspace. - pattern: "same/path/as/wspace" + - meta: + type: directory + description: Directory containing the files that compose the updated genomicsdb + workspace, this is only output for update mode, and should be the same path + as the input wspace. + pattern: "same/path/as/wspace" + - $updated_db: + type: directory + description: Directory containing the files that compose the updated genomicsdb + workspace, this is only output for update mode, and should be the same path + as the input wspace. + pattern: "same/path/as/wspace" - intervallist: - type: file - description: File containing the intervals used to generate the genomicsdb, only created by get intervals mode. - pattern: "*.interval_list" + - meta: + type: file + description: File containing the intervals used to generate the genomicsdb, + only created by get intervals mode. + pattern: "*.interval_list" + - "*.interval_list": + type: file + description: File containing the intervals used to generate the genomicsdb, + only created by get intervals mode. + pattern: "*.interval_list" + - list: + type: file + description: File containing the intervals used to generate the genomicsdb, + only created by get intervals mode. + pattern: "*.interval_list" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" maintainers: diff --git a/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test b/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test index 9c207b3074..5fef5dd254 100644 --- a/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test +++ b/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test @@ -17,11 +17,11 @@ nextflow_process { """ // [meta, vcf, tbi, interval, interval_value, workspace ] input[0] = [ [ id:'test'], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) , - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true) , - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.interval_list', checkIfExists: true) , - [] , - [] ] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) , + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true) , + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.interval_list', checkIfExists: true) , + [] , + [] ] // run_intlist input[1] = false // run_updatewspace @@ -36,12 +36,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.genomicsdb.get(0).get(1)).list().sort()).match() } //{ assert snapshot(file(process.out.updatedb.get(0).get(1)).list().sort()).match() } //{ assert snapshot(process.out.intervallist.get(0).get(1)).match() } + { assert snapshot( + file(process.out.genomicsdb.get(0).get(1)).list().sort(), + process.out.versions + ).match() } ) } - } test("test_gatk4_genomicsdbimport_get_intervalslist") { @@ -76,10 +78,12 @@ nextflow_process { { assert process.success }, //{ assert snapshot(file(process.out.genomicsdb.get(0).get(1)).list().sort()).match() } //{ assert snapshot(file(process.out.updatedb.get(0).get(1)).list().sort()).match() } - { assert snapshot(process.out.intervallist.get(0).get(1)).match() } + { assert snapshot( + process.out.intervallist.get(0).get(1), + process.out.versions + ).match() } ) } - } test("test_gatk4_genomicsdbimport_update_genomicsdb") { @@ -113,11 +117,13 @@ nextflow_process { assertAll( { assert process.success }, //{ assert snapshot(file(process.out.genomicsdb.get(0).get(1)).list().sort()).match() } - { assert snapshot(file(process.out.updatedb.get(0).get(1)).list().sort()).match() } //{ assert snapshot(process.out.intervallist.get(0).get(1)).match() } + { assert snapshot( + file(process.out.updatedb.get(0).get(1)).list().sort(), + process.out.versions + ).match() } ) } - } test("test_gatk4_genomicsdbimport_stub") { @@ -129,11 +135,11 @@ nextflow_process { """ // [meta, vcf, tbi, interval, interval_value, workspace ] input[0] = [ [ id:'test'], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) , - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true) , - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.interval_list', checkIfExists: true) , - [] , - [] ] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) , + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true) , + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.interval_list', checkIfExists: true) , + [] , + [] ] // run_intlist input[1] = false // run_updatewspace @@ -147,9 +153,8 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert snapshot(process.out).match()} ) } - } - } diff --git a/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test.snap b/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test.snap index a633bbdc16..55ced0d880 100644 --- a/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test.snap +++ b/modules/nf-core/gatk4/genomicsdbimport/tests/main.nf.test.snap @@ -1,40 +1,98 @@ { "test_gatk4_genomicsdbimport_get_intervalslist": { "content": [ - "test.interval_list:md5,4c85812ac15fc1cd29711a851d23c0bf" + "test.interval_list:md5,4c85812ac15fc1cd29711a851d23c0bf", + [ + "versions.yml:md5,c1233a04213021aa66599a36e0fb28cc" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-28T17:55:03.846241" + "timestamp": "2024-07-09T10:42:51.836379" }, "test_gatk4_genomicsdbimport_create_genomicsdb": { "content": [ - "__tiledb_workspace.tdb", - "callset.json", - "chr22$1$40001", - "vcfheader.vcf", - "vidmap.json" + [ + "__tiledb_workspace.tdb", + "callset.json", + "chr22$1$40001", + "vcfheader.vcf", + "vidmap.json" + ], + [ + "versions.yml:md5,c1233a04213021aa66599a36e0fb28cc" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-14T11:22:10.11423157" + "timestamp": "2024-07-09T10:42:36.846239" }, "test_gatk4_genomicsdbimport_update_genomicsdb": { "content": [ - "__tiledb_workspace.tdb", - "callset.json", - "chr22$1$40001", - "vcfheader.vcf", - "vidmap.json" + [ + "__tiledb_workspace.tdb", + "callset.json", + "chr22$1$40001", + "vcfheader.vcf", + "vidmap.json" + ], + [ + "versions.yml:md5,c1233a04213021aa66599a36e0fb28cc" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-14T12:46:42.403794676" + "timestamp": "2024-07-09T10:43:09.00769" + }, + "test_gatk4_genomicsdbimport_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,c1233a04213021aa66599a36e0fb28cc" + ], + "genomicsdb": [ + [ + { + "id": "test" + }, + "test:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "intervallist": [ + + ], + "updatedb": [ + + ], + "versions": [ + "versions.yml:md5,c1233a04213021aa66599a36e0fb28cc" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-09T10:43:20.921712" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/genotypegvcfs/environment.yml b/modules/nf-core/gatk4/genotypegvcfs/environment.yml index 6e1b7c04a0..55993f440c 100644 --- a/modules/nf-core/gatk4/genotypegvcfs/environment.yml +++ b/modules/nf-core/gatk4/genotypegvcfs/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_genotypegvcfs channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/genotypegvcfs/main.nf b/modules/nf-core/gatk4/genotypegvcfs/main.nf index 3a9fbb4e07..f180f74975 100644 --- a/modules/nf-core/gatk4/genotypegvcfs/main.nf +++ b/modules/nf-core/gatk4/genotypegvcfs/main.nf @@ -8,12 +8,12 @@ process GATK4_GENOTYPEGVCFS { 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: - tuple val(meta), path(gvcf), path(gvcf_index), path(intervals), path(intervals_index) - path fasta - path fai - path dict - path dbsnp - path dbsnp_tbi + tuple val(meta), path(input), path(gvcf_index), path(intervals), path(intervals_index) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) + tuple val(meta5), path(dbsnp) + tuple val(meta6), path(dbsnp_tbi) output: tuple val(meta), path("*.vcf.gz"), emit: vcf @@ -26,7 +26,7 @@ process GATK4_GENOTYPEGVCFS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def gvcf_command = gvcf.name.endsWith(".vcf") || gvcf.name.endsWith(".vcf.gz") ? "$gvcf" : "gendb://$gvcf" + def input_command = input.name.endsWith(".vcf") || input.name.endsWith(".vcf.gz") ? "$input" : "gendb://$input" def dbsnp_command = dbsnp ? "--dbsnp $dbsnp" : "" def interval_command = intervals ? "--intervals $intervals" : "" @@ -39,7 +39,7 @@ process GATK4_GENOTYPEGVCFS { """ gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ GenotypeGVCFs \\ - --variant $gvcf_command \\ + --variant $input_command \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ $interval_command \\ @@ -57,7 +57,7 @@ process GATK4_GENOTYPEGVCFS { def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + echo | gzip > ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/gatk4/genotypegvcfs/meta.yml b/modules/nf-core/gatk4/genotypegvcfs/meta.yml index 8f1e377eb9..0c1fe491fe 100644 --- a/modules/nf-core/gatk4/genotypegvcfs/meta.yml +++ b/modules/nf-core/gatk4/genotypegvcfs/meta.yml @@ -14,66 +14,101 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gvcf: - type: file - description: | - gVCF(.gz) file or to a GenomicsDB - pattern: "*.{vcf,vcf.gz}" - - gvcf_index: - type: file - description: | - index of gvcf file, or empty when providing GenomicsDB - pattern: "*.{idx,tbi}" - - intervals: - type: file - description: Interval file with the genomic regions included in the library (optional) - - intervals_index: - type: file - description: Interval index file (optional) - - fasta: - type: file - description: Reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Reference fasta index file - pattern: "*.fai" - - dict: - type: file - description: Reference fasta sequence dict file - pattern: "*.dict" - - dbsnp: - type: file - description: dbSNP VCF file - pattern: "*.vcf.gz" - - dbsnp_tbi: - type: file - description: dbSNP VCF index file - pattern: "*.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: | + gVCF(.gz) file or a GenomicsDB + pattern: "*.{vcf,vcf.gz}" + - gvcf_index: + type: file + description: | + index of gvcf file, or empty when providing GenomicsDB + pattern: "*.{idx,tbi}" + - intervals: + type: file + description: Interval file with the genomic regions included in the library + (optional) + - intervals_index: + type: file + description: Interval index file (optional) + - - meta2: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing fai information + e.g. [ id:'test' ] + - fai: + type: file + description: Reference fasta index file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing dict information + e.g. [ id:'test' ] + - dict: + type: file + description: Reference fasta sequence dict file + pattern: "*.dict" + - - meta5: + type: map + description: | + Groovy Map containing dbsnp information + e.g. [ id:'test' ] + - dbsnp: + type: file + description: dbSNP VCF file + pattern: "*.vcf.gz" + - - meta6: + type: map + description: | + Groovy Map containing dbsnp tbi information + e.g. [ id:'test' ] + - dbsnp_tbi: + type: file + description: dbSNP VCF index file + pattern: "*.tbi" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: Genotyped VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: Genotyped VCF file + pattern: "*.vcf.gz" - tbi: - type: file - description: Tbi index for VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Tbi index for VCF file + pattern: "*.vcf.gz" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@santiagorevale" - "@maxulysse" diff --git a/modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test b/modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test new file mode 100644 index 0000000000..25bc2d3806 --- /dev/null +++ b/modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test @@ -0,0 +1,285 @@ +nextflow_process { + + name "Test Process GATK4_GENOTYPEGVCFS" + script "../main.nf" + process "GATK4_GENOTYPEGVCFS" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/genotypegvcfs" + tag "untar" + + setup { + run("UNTAR") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [id:"test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_genomicsdb.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + test("homo_sapiens - [gvcf, idx, [], []], fasta, fai, dict, [], []") { + + when { + process { + """ + input[0] = [ + [id:"test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [], + [] + ] + input[1] = [ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[2] = [ + [id:"fai"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists:true) + ] + input[3] = [ + [id:"dict"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists:true) + ] + input[4] = [[],[]] + input[5] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { [it[0], path(it[1]).vcf.variantsMD5] }, + process.out.tbi.collect { [it[0], file(it[1]).name] }, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [gvcf_gz, tbi, [], []], fasta, fai, dict, dbsnp, dbsnp_tbi") { + + when { + process { + """ + input[0] = [ + [id:"test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + [], + [] + ] + input[1] = [ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[2] = [ + [id:"fai"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists:true) + ] + input[3] = [ + [id:"dict"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists:true) + ] + input[4] = [ + [id:"dbsnp"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists:true) + ] + input[5] = [ + [id:"dbsnp"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { [it[0], path(it[1]).vcf.variantsMD5] }, + process.out.tbi.collect { [it[0], file(it[1]).name] }, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [gvcf_gz, tbi, bed, []], fasta, fai, dict, [], []") { + + when { + process { + """ + input[0] = [ + [id:"test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists:true), + [] + ] + input[1] = [ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[2] = [ + [id:"fai"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists:true) + ] + input[3] = [ + [id:"dict"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists:true) + ] + input[4] = [[],[]] + input[5] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { [it[0], path(it[1]).vcf.variantsMD5] }, + process.out.tbi.collect { [it[0], file(it[1]).name] }, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [gendb, [], [], []], fasta, fai, dict, [], []") { + + when { + process { + """ + input[0] = UNTAR.out.untar.map { meta, gendb -> [ meta, gendb, [], [], []] } + input[1] = [ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[2] = [ + [id:"fai"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists:true) + ] + input[3] = [ + [id:"dict"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists:true) + ] + input[4] = [[],[]] + input[5] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { [it[0], path(it[1]).vcf.variantsMD5] }, + process.out.tbi.collect { [it[0], file(it[1]).name] }, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [gendb, bed, [], []], fasta, fai, dict, [], []") { + + when { + process { + """ + input[0] = UNTAR.out.untar.map { meta, gendb -> + [ + meta, + gendb, + [], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists:true), + [] + ] + } + input[1] = [ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[2] = [ + [id:"fai"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists:true) + ] + input[3] = [ + [id:"dict"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists:true) + ] + input[4] = [[],[]] + input[5] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { [it[0], path(it[1]).vcf.variantsMD5] }, + process.out.tbi.collect { [it[0], file(it[1]).name] }, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [gvcf, idx, [], []], fasta, fai, dict, [], [] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [id:"test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [], + [] + ] + input[1] = [ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[2] = [ + [id:"fai"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists:true) + ] + input[3] = [ + [id:"dict"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists:true) + ] + input[4] = [[],[]] + input[5] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test.snap b/modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test.snap new file mode 100644 index 0000000000..1621618e7a --- /dev/null +++ b/modules/nf-core/gatk4/genotypegvcfs/tests/main.nf.test.snap @@ -0,0 +1,191 @@ +{ + "homo_sapiens - [gendb, [], [], []], fasta, fai, dict, [], []": { + "content": [ + [ + [ + { + "id": "test" + }, + "1ab95fbc5ec55b208f3001572bec54fa" + ] + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T14:27:24.926097884" + }, + "homo_sapiens - [gvcf, idx, [], []], fasta, fai, dict, [], []": { + "content": [ + [ + [ + { + "id": "test" + }, + "1ab95fbc5ec55b208f3001572bec54fa" + ] + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T14:26:24.426228557" + }, + "homo_sapiens - [gvcf_gz, tbi, bed, []], fasta, fai, dict, [], []": { + "content": [ + [ + [ + { + "id": "test" + }, + "1ab95fbc5ec55b208f3001572bec54fa" + ] + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T14:27:04.179308513" + }, + "homo_sapiens - [gvcf_gz, tbi, [], []], fasta, fai, dict, dbsnp, dbsnp_tbi": { + "content": [ + [ + [ + { + "id": "test" + }, + "9b7d476515e07e5486633c42abd86cc" + ] + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T14:26:43.9088684" + }, + "homo_sapiens - [gvcf, idx, [], []], fasta, fai, dict, [], [] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ], + "tbi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T14:19:57.615552867" + }, + "homo_sapiens - [gendb, bed, [], []], fasta, fai, dict, [], []": { + "content": [ + [ + [ + { + "id": "test" + }, + "1ab95fbc5ec55b208f3001572bec54fa" + ] + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,3c16cbf71737813609ad10d901d92ab3" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T14:27:46.189794941" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/getpileupsummaries/environment.yml b/modules/nf-core/gatk4/getpileupsummaries/environment.yml index b99a28c177..55993f440c 100644 --- a/modules/nf-core/gatk4/getpileupsummaries/environment.yml +++ b/modules/nf-core/gatk4/getpileupsummaries/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_getpileupsummaries channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/getpileupsummaries/meta.yml b/modules/nf-core/gatk4/getpileupsummaries/meta.yml index fab3c1435e..86b851e13a 100644 --- a/modules/nf-core/gatk4/getpileupsummaries/meta.yml +++ b/modules/nf-core/gatk4/getpileupsummaries/meta.yml @@ -16,68 +16,78 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - input: - type: file - description: BAM/CRAM file to be summarised. - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAM/CRAM file index. - pattern: "*.{bai,crai}" - - intervals: - type: file - description: File containing specified sites to be used for the summary. If this option is not specified, variants file is used instead automatically. - pattern: "*.interval_list" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - variants: - type: file - description: Population vcf of germline sequencing, containing allele fractions. Is also used as sites file if no separate sites file is specified. - pattern: "*.vcf.gz" - - variants_tbi: - type: file - description: Index file for the germline resource. - pattern: "*.vcf.gz.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - input: + type: file + description: BAM/CRAM file to be summarised. + pattern: "*.{bam,cram}" + - index: + type: file + description: Index file for the input BAM/CRAM file. + pattern: "*.{bam.bai,cram.crai}" + - intervals: + type: file + description: File containing specified sites to be used for the summary. If + this option is not specified, variants file is used instead automatically. + pattern: "*.interval_list" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - - variants: + type: file + description: Population vcf of germline sequencing, containing allele fractions. + Is also used as sites file if no separate sites file is specified. + pattern: "*.vcf.gz" + - - variants_tbi: + type: file + description: Index file for the germline resource. + pattern: "*.vcf.gz.tbi" output: - - pileup: - type: file - description: File containing the pileup summary table. - pattern: "*.pileups.table" + - table: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.pileups.table": + type: file + description: Table containing read counts for each site. + pattern: "*.pileups.table" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" maintainers: diff --git a/modules/nf-core/gatk4/haplotypecaller/environment.yml b/modules/nf-core/gatk4/haplotypecaller/environment.yml index d4e8d36026..55993f440c 100644 --- a/modules/nf-core/gatk4/haplotypecaller/environment.yml +++ b/modules/nf-core/gatk4/haplotypecaller/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_haplotypecaller channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/haplotypecaller/main.nf b/modules/nf-core/gatk4/haplotypecaller/main.nf index 3043ee07ab..b2aff48969 100644 --- a/modules/nf-core/gatk4/haplotypecaller/main.nf +++ b/modules/nf-core/gatk4/haplotypecaller/main.nf @@ -44,6 +44,7 @@ process GATK4_HAPLOTYPECALLER { --input $input \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ + --native-pair-hmm-threads ${task.cpus} \\ $dbsnp_command \\ $interval_command \\ $dragstr_command \\ diff --git a/modules/nf-core/gatk4/haplotypecaller/meta.yml b/modules/nf-core/gatk4/haplotypecaller/meta.yml index 703b99a098..9d4a05e914 100644 --- a/modules/nf-core/gatk4/haplotypecaller/meta.yml +++ b/modules/nf-core/gatk4/haplotypecaller/meta.yml @@ -14,92 +14,108 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - dragstr_model: - type: file - description: Text file containing the DragSTR model of the used BAM/CRAM file (optional) - pattern: "*.txt" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test_reference' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test_reference' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test_reference' ] - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - meta5: - type: map - description: | - Groovy Map containing dbsnp information - e.g. [ id:'test_dbsnp' ] - - dbsnp: - type: file - description: VCF file containing known sites (optional) - - meta6: - type: map - description: | - Groovy Map containing dbsnp information - e.g. [ id:'test_dbsnp' ] - - dbsnp_tbi: - type: file - description: VCF index of dbsnp (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - dragstr_model: + type: file + description: Text file containing the DragSTR model of the used BAM/CRAM file + (optional) + pattern: "*.txt" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test_reference' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test_reference' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test_reference' ] + - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - - meta5: + type: map + description: | + Groovy Map containing dbsnp information + e.g. [ id:'test_dbsnp' ] + - dbsnp: + type: file + description: VCF file containing known sites (optional) + - - meta6: + type: map + description: | + Groovy Map containing dbsnp information + e.g. [ id:'test_dbsnp' ] + - dbsnp_tbi: + type: file + description: VCF index of dbsnp (optional) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" - tbi: - type: file - description: Index of VCF file - pattern: "*.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Index of VCF file + pattern: "*.vcf.gz.tbi" - bam: - type: file - description: Assembled haplotypes and locally realigned reads - pattern: "*.realigned.bam" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.realigned.bam": + type: file + description: Assembled haplotypes and locally realigned reads + pattern: "*.realigned.bam" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@suzannejin" - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test b/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test index a124bff530..18d35f498c 100644 --- a/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test +++ b/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test @@ -17,14 +17,14 @@ nextflow_process { """ input[0] = [ [ id:'test_bam' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [], [] ] - input[1] = [ [ id:'test_fa' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id:'test_fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] - input[3] = [ [ id:'test_dict' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) ] + input[1] = [ [ id:'test_fa' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'test_fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + input[3] = [ [ id:'test_dict' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) ] input[4] = [ [], [] ] input[5] = [ [], [] ] @@ -35,9 +35,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Unstable hashes - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("gatk_hc_vcf_bam_input") }, - { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match("gatk_hc_vcf_tbi_bam_input") }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + file(process.out.tbi[0][1]).name, + process.out.versions + ).match() + } ) } @@ -50,14 +53,14 @@ nextflow_process { """ input[0] = [ [ id:'test_cram' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), [], [] ] - input[1] = [ [ id:'test_fa' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id:'test_fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] - input[3] = [ [ id:'test_dict' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) ] + input[1] = [ [ id:'test_fa' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'test_fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + input[3] = [ [ id:'test_dict' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) ] input[4] = [ [], [] ] input[5] = [ [], [] ] """ @@ -67,9 +70,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Unstable hashes - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("gatk_hc_vcf_cram_input") }, - { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match("gatk_hc_vcf_tbi_cram_input") }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + file(process.out.tbi[0][1]).name, + process.out.versions + ).match() + } ) } @@ -82,16 +88,16 @@ nextflow_process { """ input[0] = [ [ id:'test_cram_sites' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), [], [] ] - input[1] = [ [ id:'test_fa' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id:'test_fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] - input[3] = [ [ id:'test_dict' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) ] - input[4] = [ [ id:'test_sites' ], file(params.test_data['homo_sapiens']['genome']['dbsnp_146_hg38_vcf_gz'], checkIfExists: true) ] - input[5] = [ [ id:'test_sites_tbi' ], file(params.test_data['homo_sapiens']['genome']['dbsnp_146_hg38_vcf_gz_tbi'], checkIfExists: true) ] + input[1] = [ [ id:'test_fa' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'test_fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + input[3] = [ [ id:'test_dict' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) ] + input[4] = [ [ id:'test_sites' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true) ] + input[5] = [ [ id:'test_sites_tbi' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists: true) ] """ } } @@ -99,9 +105,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Unstable hashes - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("gatk_hc_vcf_cram_input_with_sites") }, - { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match("gatk_hc_vcf_tbi_cram_input_with_sites") }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + file(process.out.tbi[0][1]).name, + process.out.versions + ).match() + } ) } @@ -114,16 +123,16 @@ nextflow_process { """ input[0] = [ [ id:'test_cram_sites_dragstr' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), [], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_dragstrmodel'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_paired_end_sorted_dragstrmodel.txt', checkIfExists: true) ] - input[1] = [ [ id:'test_fa' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) ] - input[2] = [ [ id:'test_fai' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) ] - input[3] = [ [ id:'test_dict' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) ] - input[4] = [ [ id:'test_sites' ], file(params.test_data['homo_sapiens']['genome']['dbsnp_146_hg38_vcf_gz'], checkIfExists: true) ] - input[5] = [ [ id:'test_sites_tbi' ], file(params.test_data['homo_sapiens']['genome']['dbsnp_146_hg38_vcf_gz_tbi'], checkIfExists: true) ] + input[1] = [ [ id:'test_fa' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'test_fai' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + input[3] = [ [ id:'test_dict' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) ] + input[4] = [ [ id:'test_sites' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true) ] + input[5] = [ [ id:'test_sites_tbi' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists: true) ] """ } } @@ -131,9 +140,12 @@ nextflow_process { then { assertAll( { assert process.success }, - // { assert snapshot(process.out).match() }, // Unstable hashes - { assert snapshot(file(process.out.vcf.get(0).get(1)).name).match("gatk_hc_vcf_cram_dragstr_input_with_sites") }, - { assert snapshot(file(process.out.tbi.get(0).get(1)).name).match("gatk_hc_vcf_tbi_cram_dragstr_input_with_sites") }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + file(process.out.tbi[0][1]).name, + process.out.versions + ).match() + } ) } diff --git a/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test.snap b/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test.snap index 375025ee3c..0203fcfcf4 100644 --- a/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test.snap +++ b/modules/nf-core/gatk4/haplotypecaller/tests/main.nf.test.snap @@ -1,82 +1,58 @@ { - "gatk_hc_vcf_cram_dragstr_input_with_sites": { + "homo_sapiens - [cram, crai] - fasta - fai - dict": { "content": [ - "test_cram_sites_dragstr.vcf.gz" + "test_cram.vcf.gz", + "test_cram.vcf.gz.tbi", + [ + "versions.yml:md5,05431a0ab28c85412c8b3582e863a7ab" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.4" }, - "timestamp": "2024-02-20T13:24:45.142682" + "timestamp": "2024-08-14T09:36:54.158605" }, - "gatk_hc_vcf_bam_input": { + "homo_sapiens - [cram, crai] - fasta - fai - dict - sites - sites_tbi": { "content": [ - "test_bam.vcf.gz" + "test_cram_sites.vcf.gz", + "test_cram_sites.vcf.gz.tbi", + [ + "versions.yml:md5,05431a0ab28c85412c8b3582e863a7ab" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.4" }, - "timestamp": "2024-02-20T13:23:19.203837" + "timestamp": "2024-08-14T09:37:13.77024" }, - "gatk_hc_vcf_cram_input": { + "homo_sapiens - [bam, bai] - fasta - fai - dict": { "content": [ - "test_cram.vcf.gz" + "test_bam.vcf.gz", + "test_bam.vcf.gz.tbi", + [ + "versions.yml:md5,05431a0ab28c85412c8b3582e863a7ab" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.4" }, - "timestamp": "2024-02-20T13:23:48.434615" + "timestamp": "2024-08-14T09:36:34.77631" }, - "gatk_hc_vcf_cram_input_with_sites": { + "homo_sapiens - [cram, crai, dragstr_model] - fasta - fai - dict - sites - sites_tbi": { "content": [ - "test_cram_sites.vcf.gz" + "test_cram_sites_dragstr.vcf.gz", + "test_cram_sites_dragstr.vcf.gz.tbi", + [ + "versions.yml:md5,05431a0ab28c85412c8b3582e863a7ab" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.4" }, - "timestamp": "2024-02-20T13:24:17.147745" - }, - "gatk_hc_vcf_tbi_bam_input": { - "content": [ - "test_bam.vcf.gz.tbi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-20T13:23:19.23048" - }, - "gatk_hc_vcf_tbi_cram_input": { - "content": [ - "test_cram.vcf.gz.tbi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-20T13:23:48.45958" - }, - "gatk_hc_vcf_tbi_cram_dragstr_input_with_sites": { - "content": [ - "test_cram_sites_dragstr.vcf.gz.tbi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-20T13:24:45.154818" - }, - "gatk_hc_vcf_tbi_cram_input_with_sites": { - "content": [ - "test_cram_sites.vcf.gz.tbi" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-20T13:24:17.158138" + "timestamp": "2024-08-14T09:37:32.967085" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/intervallisttobed/environment.yml b/modules/nf-core/gatk4/intervallisttobed/environment.yml index d4d2eba24c..55993f440c 100644 --- a/modules/nf-core/gatk4/intervallisttobed/environment.yml +++ b/modules/nf-core/gatk4/intervallisttobed/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_intervallisttobed channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/intervallisttobed/meta.yml b/modules/nf-core/gatk4/intervallisttobed/meta.yml index 28d264dfef..0779fa1822 100644 --- a/modules/nf-core/gatk4/intervallisttobed/meta.yml +++ b/modules/nf-core/gatk4/intervallisttobed/meta.yml @@ -13,30 +13,32 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - interval: - type: file - description: Interval list - pattern: "*.{interval,interval_list}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: IntervalList file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bed: - type: file - description: BED file - pattern: "*.bed" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: BED file + pattern: "*.bed" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/gatk4/learnreadorientationmodel/environment.yml b/modules/nf-core/gatk4/learnreadorientationmodel/environment.yml index a4c2a764dd..55993f440c 100644 --- a/modules/nf-core/gatk4/learnreadorientationmodel/environment.yml +++ b/modules/nf-core/gatk4/learnreadorientationmodel/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_learnreadorientationmodel channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/learnreadorientationmodel/meta.yml b/modules/nf-core/gatk4/learnreadorientationmodel/meta.yml index 4b73a51adb..fde7829c8d 100644 --- a/modules/nf-core/gatk4/learnreadorientationmodel/meta.yml +++ b/modules/nf-core/gatk4/learnreadorientationmodel/meta.yml @@ -16,25 +16,32 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - f1r2: - type: list - description: list of f1r2 files to be used as input. - pattern: "*.f1r2.tar.gz" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - f1r2: + type: list + description: list of f1r2 files to be used as input. + pattern: "*.f1r2.tar.gz" output: - artifactprior: - type: file - description: file containing artifact-priors to be used by filtermutectcalls - pattern: "*.tar.gz" + - meta: + type: file + description: file containing artifact-priors to be used by filtermutectcalls + pattern: "*.tar.gz" + - "*.tar.gz": + type: file + description: file containing artifact-priors to be used by filtermutectcalls + pattern: "*.tar.gz" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" maintainers: diff --git a/modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test b/modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test new file mode 100644 index 0000000000..bffe02e4f6 --- /dev/null +++ b/modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test @@ -0,0 +1,38 @@ + +nextflow_process { + + name "Test Process GATK4_LEARNREADORIENTATIONMODEL" + script "../main.nf" + process "GATK4_LEARNREADORIENTATIONMODEL" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/learnreadorientationmodel" + + test("test-gatk4-learnreadorientationmodel") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.f1r2.tar.gz', checkIfExists: true)] ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.artifactprior[0][1]).linesGzip[3..7], + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test.snap b/modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test.snap new file mode 100644 index 0000000000..b829bd9c4a --- /dev/null +++ b/modules/nf-core/gatk4/learnreadorientationmodel/tests/main.nf.test.snap @@ -0,0 +1,21 @@ +{ + "test-gatk4-learnreadorientationmodel": { + "content": [ + [ + "CTT\tAAG\t2.7114986684474486E-6\t3.2076972826656866E-5\t2.6085822355549755E-6\t0.0\t2.6371799896540086E-6\t3.3869355267901446E-6\t2.6085822355549755E-6\t0.0\t0.9995881552107633\t4.6590850211691583E-5\t2.8848017683240004E-4\t3.0744010710100574E-5\t38334\t116", + "GTT\tAAC\t0.1\t0.1\t0.1\t0.0\t0.1\t0.1\t0.1\t0.0\t0.1\t0.1\t0.1\t0.1\t0\t0", + "TAT\tATA\t0.0\t5.548307163536064E-6\t5.144357865084592E-6\t6.205892051757818E-6\t0.0\t5.907388162200423E-6\t5.176730417709638E-6\t6.083872804985981E-6\t0.9924019419831304\t3.946972069386949E-5\t0.007516612822150651\t7.908925559851714E-6\t19439\t95", + "AAA\tTTT\t0.0\t1.7634470563520664E-6\t2.8327478284981175E-6\t1.8084237600021914E-6\t0.0\t1.7692606885284446E-6\t2.263339968296726E-6\t1.8660094002474611E-6\t0.9990845693211764\t1.8004690536795885E-5\t8.701192700921183E-4\t1.5003489492700572E-5\t56708\t130", + "CAA\tTTG\t0.0\t3.4445551925564533E-6\t3.435193155024585E-6\t5.139879646597498E-6\t0.0\t3.4674461103560476E-6\t3.428570449688764E-6\t6.343168047383713E-6\t0.9945238954147358\t1.3629167993931722E-4\t0.0052793454402581125\t3.5208652465150646E-5\t29263\t197" + ], + [ + "versions.yml:md5,88928ff140a0967e574e66944fd2a2f2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:16:08.296564" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/learnreadorientationmodel/tests/nextflow.config b/modules/nf-core/gatk4/learnreadorientationmodel/tests/nextflow.config new file mode 100644 index 0000000000..79e4f67df3 --- /dev/null +++ b/modules/nf-core/gatk4/learnreadorientationmodel/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_LEARNREADORIENTATIONMODEL { + ext.prefix = { "${meta.id}.artifact-prior" } + } +} diff --git a/modules/nf-core/gatk4/markduplicates/environment.yml b/modules/nf-core/gatk4/markduplicates/environment.yml index 7362eea6f2..3c73c17e43 100644 --- a/modules/nf-core/gatk4/markduplicates/environment.yml +++ b/modules/nf-core/gatk4/markduplicates/environment.yml @@ -1,9 +1,8 @@ -name: gatk4_markduplicates channels: - conda-forge - bioconda - - defaults + dependencies: - bioconda::gatk4=4.5.0.0 - - bioconda::samtools=1.19.2 - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/gatk4/markduplicates/meta.yml b/modules/nf-core/gatk4/markduplicates/meta.yml index b0f09d4b84..4772c5f39a 100644 --- a/modules/nf-core/gatk4/markduplicates/meta.yml +++ b/modules/nf-core/gatk4/markduplicates/meta.yml @@ -1,5 +1,6 @@ name: gatk4_markduplicates -description: This tool locates and tags duplicate reads in a BAM or SAM file, where duplicate reads are defined as originating from a single fragment of DNA. +description: This tool locates and tags duplicate reads in a BAM or SAM file, where + duplicate reads are defined as originating from a single fragment of DNA. keywords: - bam - gatk4 @@ -7,60 +8,90 @@ keywords: - sort tools: - gatk4: - description: Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools with a primary focus on variant discovery and genotyping. Its powerful processing engine and high-performance computing features make it capable of taking on projects of any size. + description: Developed in the Data Sciences Platform at the Broad Institute, the + toolkit offers a wide variety of tools with a primary focus on variant discovery + and genotyping. Its powerful processing engine and high-performance computing + features make it capable of taking on projects of any size. homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard- tool_dev_url: https://github.com/broadinstitute/gatk doi: 10.1158/1538-7445.AM2017-3590 licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" - - fasta: - type: file - description: Fasta file - pattern: "*.{fasta}" - - fasta_fai: - type: file - description: Fasta index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - - fasta: + type: file + description: Fasta file + pattern: "*.{fasta}" + - - fasta_fai: + type: file + description: Fasta index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam: - type: file - description: Marked duplicates BAM file - pattern: "*.{bam}" - cram: - type: file - description: Marked duplicates CRAM file - pattern: "*.{cram}" - - bai: - type: file - description: BAM index file - pattern: "*.{bam.bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*cram": + type: file + description: Marked duplicates CRAM file + pattern: "*.{cram}" + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*bam": + type: file + description: Marked duplicates BAM file + pattern: "*.{bam}" - crai: - type: file - description: CRAM index file - pattern: "*.{cram.crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file + pattern: "*.{cram.crai}" + - bai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM index file + pattern: "*.{bam.bai}" - metrics: - type: file - description: Duplicate metrics file generated by GATK - pattern: "*.{metrics.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: Duplicate metrics file generated by GATK + pattern: "*.{metrics.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ajodeh-juma" - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4/mergemutectstats/environment.yml b/modules/nf-core/gatk4/mergemutectstats/environment.yml index 756d408301..55993f440c 100644 --- a/modules/nf-core/gatk4/mergemutectstats/environment.yml +++ b/modules/nf-core/gatk4/mergemutectstats/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_mergemutectstats channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mergemutectstats/meta.yml b/modules/nf-core/gatk4/mergemutectstats/meta.yml index 1269525657..09c8a54720 100644 --- a/modules/nf-core/gatk4/mergemutectstats/meta.yml +++ b/modules/nf-core/gatk4/mergemutectstats/meta.yml @@ -13,30 +13,33 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - stats: - type: file - description: Stats file - pattern: "*.{stats}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - stats: + type: file + description: Stats file + pattern: "*.{stats}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - stats: - type: file - description: Stats file - pattern: "*.vcf.gz.stats" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz.stats": + type: file + description: Stats file + pattern: "*.vcf.gz.stats" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/gatk4/mergevcfs/environment.yml b/modules/nf-core/gatk4/mergevcfs/environment.yml index efd9faa222..55993f440c 100644 --- a/modules/nf-core/gatk4/mergevcfs/environment.yml +++ b/modules/nf-core/gatk4/mergevcfs/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_mergevcfs channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mergevcfs/meta.yml b/modules/nf-core/gatk4/mergevcfs/meta.yml index 996053fcc6..b4f61d780d 100644 --- a/modules/nf-core/gatk4/mergevcfs/meta.yml +++ b/modules/nf-core/gatk4/mergevcfs/meta.yml @@ -14,38 +14,50 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: list - description: Two or more VCF files - pattern: "*.{vcf,vcf.gz}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - dict: - type: file - description: Optional Sequence Dictionary as input - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: Two or more VCF files + pattern: "*.{vcf,vcf.gz}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - dict: + type: file + description: Optional Sequence Dictionary as input + pattern: "*.dict" output: - vcf: - type: file - description: merged vcf file - pattern: "*.vcf.gz" + - meta: + type: file + description: merged vcf file + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: merged vcf file + pattern: "*.vcf.gz" - tbi: - type: file - description: index files for the merged vcf files - pattern: "*.tbi" + - meta: + type: file + description: index files for the merged vcf files + pattern: "*.tbi" + - "*.tbi": + type: file + description: index files for the merged vcf files + pattern: "*.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" maintainers: diff --git a/modules/nf-core/gatk4/mutect2/environment.yml b/modules/nf-core/gatk4/mutect2/environment.yml index 86f4bfae98..55993f440c 100644 --- a/modules/nf-core/gatk4/mutect2/environment.yml +++ b/modules/nf-core/gatk4/mutect2/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_mutect2 channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mutect2/meta.yml b/modules/nf-core/gatk4/mutect2/meta.yml index 21c928ed96..27fd63a243 100644 --- a/modules/nf-core/gatk4/mutect2/meta.yml +++ b/modules/nf-core/gatk4/mutect2/meta.yml @@ -17,88 +17,113 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - input: - type: list - description: list of BAM files, also able to take CRAM as an input - pattern: "*.{bam/cram}" - - input_index: - type: list - description: list of BAM file indexes, also able to take CRAM indexes as an input - pattern: "*.{bam.bai/cram.crai}" - - intervals: - type: file - description: Specify region the tools is run on. - pattern: ".{bed,interval_list}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - germline_resource: - type: file - description: Population vcf of germline sequencing, containing allele fractions. - pattern: "*.vcf.gz" - - germline_resource_tbi: - type: file - description: Index file for the germline resource. - pattern: "*.vcf.gz.tbi" - - panel_of_normals: - type: file - description: vcf file to be used as a panel of normals. - pattern: "*.vcf.gz" - - panel_of_normals_tbi: - type: file - description: Index for the panel of normals. - pattern: "*.vcf.gz.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - input: + type: list + description: list of BAM files, also able to take CRAM as an input + pattern: "*.{bam/cram}" + - input_index: + type: list + description: list of BAM file indexes, also able to take CRAM indexes as an + input + pattern: "*.{bam.bai/cram.crai}" + - intervals: + type: file + description: Specify region the tools is run on. + pattern: ".{bed,interval_list}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - - germline_resource: + type: file + description: Population vcf of germline sequencing, containing allele fractions. + pattern: "*.vcf.gz" + - - germline_resource_tbi: + type: file + description: Index file for the germline resource. + pattern: "*.vcf.gz.tbi" + - - panel_of_normals: + type: file + description: vcf file to be used as a panel of normals. + pattern: "*.vcf.gz" + - - panel_of_normals_tbi: + type: file + description: Index for the panel of normals. + pattern: "*.vcf.gz.tbi" output: - vcf: - type: file - description: compressed vcf file - pattern: "*.vcf.gz" + - meta: + type: file + description: compressed vcf file + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: compressed vcf file + pattern: "*.vcf.gz" - tbi: - type: file - description: Index of vcf file - pattern: "*vcf.gz.tbi" + - meta: + type: file + description: Index of vcf file + pattern: "*vcf.gz.tbi" + - "*.tbi": + type: file + description: Index of vcf file + pattern: "*vcf.gz.tbi" - stats: - type: file - description: Stats file that pairs with output vcf file - pattern: "*vcf.gz.stats" + - meta: + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" + - "*.stats": + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" - f1r2: - type: file - description: file containing information to be passed to LearnReadOrientationModel (only outputted when tumor_normal_pair mode is run) - pattern: "*.f1r2.tar.gz" + - meta: + type: file + description: file containing information to be passed to LearnReadOrientationModel + (only outputted when tumor_normal_pair mode is run) + pattern: "*.f1r2.tar.gz" + - "*.f1r2.tar.gz": + type: file + description: file containing information to be passed to LearnReadOrientationModel + (only outputted when tumor_normal_pair mode is run) + pattern: "*.f1r2.tar.gz" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/mutect2/tests/main.nf.test b/modules/nf-core/gatk4/mutect2/tests/main.nf.test index d247ee3571..aea8d22694 100644 --- a/modules/nf-core/gatk4/mutect2/tests/main.nf.test +++ b/modules/nf-core/gatk4/mutect2/tests/main.nf.test @@ -21,31 +21,31 @@ nextflow_process { tumor_id:'tumour' ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true) ], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -78,31 +78,31 @@ nextflow_process { tumor_id:'tumour' ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true) ], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -127,26 +127,26 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true)], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -171,26 +171,26 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true)], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -216,21 +216,21 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true)], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] input[4] = [] input[5] = [] @@ -261,21 +261,21 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['mitochon_standin_recalibrated_sorted_bam'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['mitochon_standin_recalibrated_sorted_bam_bai'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/mitochon_standin.recalibrated.sorted.bam', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/mitochon_standin.recalibrated.sorted.bam.bai', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true)] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) ] input[4] = [] input[5] = [] @@ -312,31 +312,31 @@ nextflow_process { tumor_id:'tumour' ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true) ], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } diff --git a/modules/nf-core/gatk4/variantrecalibrator/environment.yml b/modules/nf-core/gatk4/variantrecalibrator/environment.yml index 95b744c46b..55993f440c 100644 --- a/modules/nf-core/gatk4/variantrecalibrator/environment.yml +++ b/modules/nf-core/gatk4/variantrecalibrator/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_variantrecalibrator channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/variantrecalibrator/meta.yml b/modules/nf-core/gatk4/variantrecalibrator/meta.yml index 39a415b61c..72fcfd601c 100644 --- a/modules/nf-core/gatk4/variantrecalibrator/meta.yml +++ b/modules/nf-core/gatk4/variantrecalibrator/meta.yml @@ -18,64 +18,92 @@ tools: homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - vcf: - type: file - description: input vcf file containing the variants to be recalibrated - pattern: "*.vcf.gz" - - tbi: - type: file - description: tbi file matching with -vcf - pattern: "*.vcf.gz.tbi" - - resource_vcf: - type: file - description: all resource vcf files that are used with the corresponding '--resource' label - pattern: "*.vcf.gz" - - resource_tbi: - type: file - description: all resource tbi files that are used with the corresponding '--resource' label - pattern: "*.vcf.gz.tbi" - - labels: - type: string - description: necessary arguments for GATK VariantRecalibrator. Specified to directly match the resources provided. More information can be found at https://gatk.broadinstitute.org/hc/en-us/articles/5358906115227-VariantRecalibrator - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: input vcf file containing the variants to be recalibrated + pattern: "*.vcf.gz" + - tbi: + type: file + description: tbi file matching with -vcf + pattern: "*.vcf.gz.tbi" + - - resource_vcf: + type: file + description: all resource vcf files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz" + - - resource_tbi: + type: file + description: all resource tbi files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz.tbi" + - - labels: + type: string + description: necessary arguments for GATK VariantRecalibrator. Specified to + directly match the resources provided. More information can be found at + https://gatk.broadinstitute.org/hc/en-us/articles/5358906115227-VariantRecalibrator + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - recal: - type: file - description: Output recal file used by ApplyVQSR - pattern: "*.recal" + - meta: + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" + - "*.recal": + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" - idx: - type: file - description: Index file for the recal output file - pattern: "*.idx" + - meta: + type: file + description: Index file for the recal output file + pattern: "*.idx" + - "*.idx": + type: file + description: Index file for the recal output file + pattern: "*.idx" - tranches: - type: file - description: Output tranches file used by ApplyVQSR - pattern: "*.tranches" + - meta: + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" + - "*.tranches": + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" - plots: - type: file - description: Optional output rscript file to aid in visualization of the input data and learned model. - pattern: "*plots.R" - - version: - type: file - description: File containing software versions - pattern: "*.versions.yml" + - meta: + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - "*plots.R": + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" - "@nickhsmith" diff --git a/modules/nf-core/gatk4spark/applybqsr/environment.yml b/modules/nf-core/gatk4spark/applybqsr/environment.yml index de07029794..14075a574a 100644 --- a/modules/nf-core/gatk4spark/applybqsr/environment.yml +++ b/modules/nf-core/gatk4spark/applybqsr/environment.yml @@ -1,7 +1,5 @@ -name: gatk4spark_applybqsr channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4-spark=4.5.0.0 diff --git a/modules/nf-core/gatk4spark/applybqsr/meta.yml b/modules/nf-core/gatk4spark/applybqsr/meta.yml index 4904568d2e..609af2f450 100644 --- a/modules/nf-core/gatk4spark/applybqsr/meta.yml +++ b/modules/nf-core/gatk4spark/applybqsr/meta.yml @@ -16,56 +16,65 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - bqsr_table: - type: file - description: Recalibration table from gatk4_baserecalibrator - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - bqsr_table: + type: file + description: Recalibration table from gatk4_baserecalibrator + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bam: - type: file - description: Recalibrated BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Recalibrated BAM file + pattern: "*.{bam}" - cram: - type: file - description: Recalibrated CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Recalibrated CRAM file + pattern: "*.{cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yocra3" - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4spark/baserecalibrator/environment.yml b/modules/nf-core/gatk4spark/baserecalibrator/environment.yml index 84615886c1..14075a574a 100644 --- a/modules/nf-core/gatk4spark/baserecalibrator/environment.yml +++ b/modules/nf-core/gatk4spark/baserecalibrator/environment.yml @@ -1,7 +1,5 @@ -name: gatk4spark_baserecalibrator channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4-spark=4.5.0.0 diff --git a/modules/nf-core/gatk4spark/baserecalibrator/meta.yml b/modules/nf-core/gatk4spark/baserecalibrator/meta.yml index dd334a225f..abb0e1a65e 100644 --- a/modules/nf-core/gatk4spark/baserecalibrator/meta.yml +++ b/modules/nf-core/gatk4spark/baserecalibrator/meta.yml @@ -16,57 +16,60 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - known_sites: - type: file - description: VCF files with known sites for indels / snps (optional) - pattern: "*.vcf.gz" - - known_sites_tbi: - type: file - description: Tabix index of the known_sites (optional) - pattern: "*.vcf.gz.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - - known_sites: + type: file + description: VCF files with known sites for indels / snps (optional) + pattern: "*.vcf.gz" + - - known_sites_tbi: + type: file + description: Tabix index of the known_sites (optional) + pattern: "*.vcf.gz.tbi" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - table: - type: file - description: Recalibration table from BaseRecalibrator - pattern: "*.{table}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.table": + type: file + description: Recalibration table from BaseRecalibrator + pattern: "*.{table}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yocra3" - "@FriederikeHanssen" diff --git a/modules/nf-core/gatk4spark/markduplicates/environment.yml b/modules/nf-core/gatk4spark/markduplicates/environment.yml index 94dd4a3c68..14075a574a 100644 --- a/modules/nf-core/gatk4spark/markduplicates/environment.yml +++ b/modules/nf-core/gatk4spark/markduplicates/environment.yml @@ -1,7 +1,5 @@ -name: gatk4spark_markduplicates channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4-spark=4.5.0.0 diff --git a/modules/nf-core/gatk4spark/markduplicates/meta.yml b/modules/nf-core/gatk4spark/markduplicates/meta.yml index 016a215b25..fc8dee3dff 100644 --- a/modules/nf-core/gatk4spark/markduplicates/meta.yml +++ b/modules/nf-core/gatk4spark/markduplicates/meta.yml @@ -1,5 +1,6 @@ name: gatk4spark_markduplicates -description: This tool locates and tags duplicate reads in a BAM or SAM file, where duplicate reads are defined as originating from a single fragment of DNA. +description: This tool locates and tags duplicate reads in a BAM or SAM file, where + duplicate reads are defined as originating from a single fragment of DNA. keywords: - bam - gatk4spark @@ -7,52 +8,74 @@ keywords: - sort tools: - gatk4: - description: Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools with a primary focus on variant discovery and genotyping. Its powerful processing engine and high-performance computing features make it capable of taking on projects of any size. + description: Developed in the Data Sciences Platform at the Broad Institute, the + toolkit offers a wide variety of tools with a primary focus on variant discovery + and genotyping. Its powerful processing engine and high-performance computing + features make it capable of taking on projects of any size. homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard- tool_dev_url: https://github.com/broadinstitute/gatk doi: 10.1158/1538-7445.AM2017-3590 licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fasta_fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + - - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - output: - type: file - description: Marked duplicates BAM/CRAM file - pattern: "*.{bam,cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: Marked duplicates BAM/CRAM file + pattern: "*.{bam,cram}" - bam_index: - type: file - description: Optional BAM index file - pattern: "*.bai" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bai: + type: file + description: Optional BAM index file + pattern: "*.bai" + - metrics: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: Metrics file + pattern: "*.metrics" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ajodeh-juma" - "@FriederikeHanssen" diff --git a/modules/nf-core/gawk/environment.yml b/modules/nf-core/gawk/environment.yml index 3d98a08b0c..315f6dc67e 100644 --- a/modules/nf-core/gawk/environment.yml +++ b/modules/nf-core/gawk/environment.yml @@ -1,7 +1,5 @@ -name: gawk channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::gawk=5.3.0 diff --git a/modules/nf-core/gawk/meta.yml b/modules/nf-core/gawk/meta.yml index 2b6033b0b5..051700820d 100644 --- a/modules/nf-core/gawk/meta.yml +++ b/modules/nf-core/gawk/meta.yml @@ -16,34 +16,40 @@ tools: documentation: "https://www.gnu.org/software/gawk/manual/" tool_dev_url: "https://www.gnu.org/prep/ftp.html" licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: The input file - Specify the logic that needs to be executed on this file on the `ext.args2` or in the program file - pattern: "*" - - program_file: - type: file - description: Optional file containing logic for awk to execute. If you don't wish to use a file, you can use `ext.args2` to specify the logic. - pattern: "*" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: The input file - Specify the logic that needs to be executed on + this file on the `ext.args2` or in the program file + pattern: "*" + - - program_file: + type: file + description: Optional file containing logic for awk to execute. If you don't + wish to use a file, you can use `ext.args2` to specify the logic. + pattern: "*" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - output: - type: file - description: The output file - specify the name of this file using `ext.prefix` and the extension using `ext.suffix` - pattern: "*" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${suffix}: + type: file + description: The output file - specify the name of this file using `ext.prefix` + and the extension using `ext.suffix` + pattern: "*" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" maintainers: diff --git a/modules/nf-core/lofreq/callparallel/environment.yml b/modules/nf-core/lofreq/callparallel/environment.yml index 222d145021..011ce6cbda 100644 --- a/modules/nf-core/lofreq/callparallel/environment.yml +++ b/modules/nf-core/lofreq/callparallel/environment.yml @@ -1,7 +1,5 @@ -name: lofreq_callparallel channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::lofreq=2.1.5 diff --git a/modules/nf-core/lofreq/callparallel/meta.yml b/modules/nf-core/lofreq/callparallel/meta.yml index 2884773231..25a33e85c4 100644 --- a/modules/nf-core/lofreq/callparallel/meta.yml +++ b/modules/nf-core/lofreq/callparallel/meta.yml @@ -7,65 +7,76 @@ keywords: - variants tools: - lofreq: - description: Lofreq is a fast and sensitive variant-caller for inferring SNVs and indels from next-generation sequencing data. It's call-parallel programme predicts variants using multiple processors + description: Lofreq is a fast and sensitive variant-caller for inferring SNVs + and indels from next-generation sequencing data. It's call-parallel programme + predicts variants using multiple processors homepage: https://csb5.github.io/lofreq/ documentation: https://csb5.github.io/lofreq/ doi: "10.1093/nar/gks918" licence: ["MIT"] + identifier: biotools:lofreq input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - bam: - type: file - description: Tumor sample sorted BAM file - pattern: "*.{bam}" - - bai: - type: file - description: BAM index file - pattern: "*.{bam.bai}" - - intervals: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - meta2: - type: map - description: | - Groovy Map containing sample information about the reference fasta - e.g. [ id:'reference' ] - - fasta: - type: file - description: Reference genome FASTA file - pattern: "*.{fasta}" - - meta3: - type: map - description: | - Groovy Map containing sample information about the reference fasta fai - e.g. [ id:'reference' ] - - fai: - type: file - description: Reference genome FASTA index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bam: + type: file + description: Tumor sample sorted BAM file + pattern: "*.{bam}" + - bai: + type: file + description: BAM index file + pattern: "*.{bam.bai}" + - intervals: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - - meta2: + type: map + description: | + Groovy Map containing sample information about the reference fasta + e.g. [ id:'reference' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fasta}" + - - meta3: + type: map + description: | + Groovy Map containing sample information about the reference fasta fai + e.g. [ id:'reference' ] + - fai: + type: file + description: Reference genome FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: Predicted variants file - pattern: "*.{vcf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: Predicted variants file + pattern: "*.{vcf}" - tbi: - type: file - description: Index of vcf file - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz.tbi": + type: file + description: Index of vcf file + pattern: "*.{vcf.gz.tbi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kaurravneet4123" - "@bjohnnyd" diff --git a/modules/nf-core/manta/germline/environment.yml b/modules/nf-core/manta/germline/environment.yml index 4a63d3084b..fe5ade5068 100644 --- a/modules/nf-core/manta/germline/environment.yml +++ b/modules/nf-core/manta/germline/environment.yml @@ -1,7 +1,5 @@ -name: manta_germline channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::manta=1.6.0 diff --git a/modules/nf-core/manta/germline/meta.yml b/modules/nf-core/manta/germline/meta.yml index 72ed15f8bc..4072ab8e56 100644 --- a/modules/nf-core/manta/germline/meta.yml +++ b/modules/nf-core/manta/germline/meta.yml @@ -1,5 +1,7 @@ name: manta_germline -description: Manta calls structural variants (SVs) and indels from mapped paired-end sequencing reads. It is optimized for analysis of germline variation in small sets of individuals and somatic variation in tumor/normal sample pairs. +description: Manta calls structural variants (SVs) and indels from mapped paired-end + sequencing reads. It is optimized for analysis of germline variation in small sets + of individuals and somatic variation in tumor/normal sample pairs. keywords: - somatic - wgs @@ -16,84 +18,117 @@ tools: tool_dev_url: https://github.com/Illumina/manta doi: "10.1093/bioinformatics/btv710" licence: ["GPL v3"] + identifier: biotools:manta_sv input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file. For joint calling use a list of files. - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM/CRAM/SAM index file. For joint calling use a list of files. - pattern: "*.{bai,crai,sai}" - - target_bed: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - target_bed_tbi: - type: file - description: Index for BED file containing target regions for variant calling - pattern: "*.{bed.tbi}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Genome reference FASTA file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Genome reference FASTA index file - pattern: "*.{fa.fai,fasta.fai}" - - config: - type: file - description: Manta configuration file - pattern: "*.{ini,conf,config}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file. For joint calling use a list of files. + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM/CRAM/SAM index file. For joint calling use a list of files. + pattern: "*.{bai,crai,sai}" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_tbi: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" + - - config: + type: file + description: Manta configuration file + pattern: "*.{ini,conf,config}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - candidate_small_indels_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_small_indels.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - candidate_small_indels_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_small_indels.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - candidate_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - candidate_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - diploid_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*diploid_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - diploid_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*diploid_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@ramprasadn" diff --git a/modules/nf-core/manta/somatic/environment.yml b/modules/nf-core/manta/somatic/environment.yml index aac8827dfc..fe5ade5068 100644 --- a/modules/nf-core/manta/somatic/environment.yml +++ b/modules/nf-core/manta/somatic/environment.yml @@ -1,7 +1,5 @@ -name: manta_somatic channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::manta=1.6.0 diff --git a/modules/nf-core/manta/somatic/meta.yml b/modules/nf-core/manta/somatic/meta.yml index e658edaaa4..11f1fc1ca0 100644 --- a/modules/nf-core/manta/somatic/meta.yml +++ b/modules/nf-core/manta/somatic/meta.yml @@ -1,5 +1,7 @@ name: manta_somatic -description: Manta calls structural variants (SVs) and indels from mapped paired-end sequencing reads. It is optimized for analysis of germline variation in small sets of individuals and somatic variation in tumor/normal sample pairs. +description: Manta calls structural variants (SVs) and indels from mapped paired-end + sequencing reads. It is optimized for analysis of germline variation in small sets + of individuals and somatic variation in tumor/normal sample pairs. keywords: - somatic - wgs @@ -16,100 +18,145 @@ tools: tool_dev_url: https://github.com/Illumina/manta doi: "10.1093/bioinformatics/btv710" licence: ["GPL v3"] + identifier: biotools:manta_sv input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_normal: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_index_normal: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - input_tumor: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_index_tumor: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - target_bed: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - target_bed_tbi: - type: file - description: Index for BED file containing target regions for variant calling - pattern: "*.{bed.tbi}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Genome reference FASTA file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Genome reference FASTA index file - pattern: "*.{fa.fai,fasta.fai}" - - config: - type: file - description: Manta configuration file - pattern: "*.{ini,conf,config}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_normal: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_index_normal: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - input_tumor: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_index_tumor: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_tbi: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" + - - config: + type: file + description: Manta configuration file + pattern: "*.{ini,conf,config}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - candidate_small_indels_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.candidate_small_indels.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - candidate_small_indels_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.candidate_small_indels.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - candidate_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.candidate_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - candidate_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.candidate_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - diploid_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diploid_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - diploid_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diploid_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - somatic_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.somatic_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - somatic_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.somatic_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" - "@nvnieuwk" diff --git a/modules/nf-core/manta/tumoronly/environment.yml b/modules/nf-core/manta/tumoronly/environment.yml index cf5db361e0..fe5ade5068 100644 --- a/modules/nf-core/manta/tumoronly/environment.yml +++ b/modules/nf-core/manta/tumoronly/environment.yml @@ -1,7 +1,5 @@ -name: manta_tumoronly channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::manta=1.6.0 diff --git a/modules/nf-core/manta/tumoronly/meta.yml b/modules/nf-core/manta/tumoronly/meta.yml index 63556c59b4..6f629b24dc 100644 --- a/modules/nf-core/manta/tumoronly/meta.yml +++ b/modules/nf-core/manta/tumoronly/meta.yml @@ -1,5 +1,7 @@ name: manta_tumoronly -description: Manta calls structural variants (SVs) and indels from mapped paired-end sequencing reads. It is optimized for analysis of germline variation in small sets of individuals and somatic variation in tumor/normal sample pairs. +description: Manta calls structural variants (SVs) and indels from mapped paired-end + sequencing reads. It is optimized for analysis of germline variation in small sets + of individuals and somatic variation in tumor/normal sample pairs. keywords: - somatic - wgs @@ -16,84 +18,117 @@ tools: tool_dev_url: https://github.com/Illumina/manta doi: "10.1093/bioinformatics/btv710" licence: ["GPL v3"] + identifier: biotools:manta_sv input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_index: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - target_bed: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - target_bed_tbi: - type: file - description: Index for BED file containing target regions for variant calling - pattern: "*.{bed.tbi}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Genome reference FASTA file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Genome reference FASTA index file - pattern: "*.{fa.fai,fasta.fai}" - - config: - type: file - description: Manta configuration file - pattern: "*.{ini,conf,config}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_index: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_tbi: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" + - - config: + type: file + description: Manta configuration file + pattern: "*.{ini,conf,config}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - candidate_small_indels_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_small_indels.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - candidate_small_indels_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_small_indels.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - candidate_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - candidate_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*candidate_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - tumor_sv_vcf: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*tumor_sv.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - tumor_sv_vcf_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*tumor_sv.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@nvnieuwk" diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml index bcb9d64a7a..e937987380 100644 --- a/modules/nf-core/mosdepth/environment.yml +++ b/modules/nf-core/mosdepth/environment.yml @@ -1,8 +1,6 @@ -name: mosdepth channels: - conda-forge - bioconda - - defaults dependencies: # renovate: datasource=conda depName=bioconda/mosdepth - mosdepth=0.3.8 diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml index 9caaf2cdbc..dc783c9006 100644 --- a/modules/nf-core/mosdepth/meta.yml +++ b/modules/nf-core/mosdepth/meta.yml @@ -12,91 +12,161 @@ tools: documentation: https://github.com/brentp/mosdepth doi: 10.1093/bioinformatics/btx699 licence: ["MIT"] + identifier: biotools:mosdepth input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Input BAM/CRAM file - pattern: "*.{bam,cram}" - - bai: - type: file - description: Index for BAM/CRAM file - pattern: "*.{bai,crai}" - - bed: - type: file - description: BED file with intersected intervals - pattern: "*.{bed}" - - meta2: - type: map - description: | - Groovy Map containing bed information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference genome FASTA file - pattern: "*.{fa,fasta}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: Index for BAM/CRAM file + pattern: "*.{bai,crai}" + - bed: + type: file + description: BED file with intersected intervals + pattern: "*.{bed}" + - - meta2: + type: map + description: | + Groovy Map containing bed information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - global_txt: - type: file - description: Text file with global cumulative coverage distribution - pattern: "*.{global.dist.txt}" - - regions_txt: - type: file - description: Text file with region cumulative coverage distribution - pattern: "*.{region.dist.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.global.dist.txt": + type: file + description: Text file with global cumulative coverage distribution + pattern: "*.{global.dist.txt}" - summary_txt: - type: file - description: Text file with summary mean depths per chromosome and regions - pattern: "*.{summary.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.summary.txt": + type: file + description: Text file with summary mean depths per chromosome and regions + pattern: "*.{summary.txt}" + - regions_txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.region.dist.txt": + type: file + description: Text file with region cumulative coverage distribution + pattern: "*.{region.dist.txt}" + - per_base_d4: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.per-base.d4": + type: file + description: D4 file with per-base coverage + pattern: "*.{per-base.d4}" - per_base_bed: - type: file - description: BED file with per-base coverage - pattern: "*.{per-base.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.per-base.bed.gz": + type: file + description: BED file with per-base coverage + pattern: "*.{per-base.bed.gz}" - per_base_csi: - type: file - description: Index file for BED file with per-base coverage - pattern: "*.{per-base.bed.gz.csi}" - - per_base_d4: - type: file - description: D4 file with per-base coverage - pattern: "*.{per-base.d4}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.per-base.bed.gz.csi": + type: file + description: Index file for BED file with per-base coverage + pattern: "*.{per-base.bed.gz.csi}" - regions_bed: - type: file - description: BED file with per-region coverage - pattern: "*.{regions.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.regions.bed.gz": + type: file + description: BED file with per-region coverage + pattern: "*.{regions.bed.gz}" - regions_csi: - type: file - description: Index file for BED file with per-region coverage - pattern: "*.{regions.bed.gz.csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.regions.bed.gz.csi": + type: file + description: Index file for BED file with per-region coverage + pattern: "*.{regions.bed.gz.csi}" - quantized_bed: - type: file - description: BED file with binned coverage - pattern: "*.{quantized.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.quantized.bed.gz": + type: file + description: BED file with binned coverage + pattern: "*.{quantized.bed.gz}" - quantized_csi: - type: file - description: Index file for BED file with binned coverage - pattern: "*.{quantized.bed.gz.csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.quantized.bed.gz.csi": + type: file + description: Index file for BED file with binned coverage + pattern: "*.{quantized.bed.gz.csi}" - thresholds_bed: - type: file - description: BED file with the number of bases in each region that are covered at or above each threshold - pattern: "*.{thresholds.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.thresholds.bed.gz": + type: file + description: BED file with the number of bases in each region that are covered + at or above each threshold + pattern: "*.{thresholds.bed.gz}" - thresholds_csi: - type: file - description: Index file for BED file with threshold coverage - pattern: "*.{thresholds.bed.gz.csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.thresholds.bed.gz.csi": + type: file + description: Index file for BED file with threshold coverage + pattern: "*.{thresholds.bed.gz.csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test index 21eebc1fa5..0b3c860d32 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -15,8 +15,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [] ] input[1] = [[],[]] @@ -40,9 +40,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -65,13 +65,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), [] ] input[1] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -93,13 +93,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -122,8 +122,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [] ] input[1] = [[],[]] @@ -148,8 +148,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [] ] input[1] = [[],[]] @@ -174,9 +174,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -200,9 +200,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -225,9 +225,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ diff --git a/modules/nf-core/msisensorpro/msisomatic/environment.yml b/modules/nf-core/msisensorpro/msisomatic/environment.yml index 147a9d6b85..f67b9b733e 100644 --- a/modules/nf-core/msisensorpro/msisomatic/environment.yml +++ b/modules/nf-core/msisensorpro/msisomatic/environment.yml @@ -1,7 +1,5 @@ -name: msisensorpro_msisomatic channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::msisensor-pro=1.2.0 diff --git a/modules/nf-core/msisensorpro/msisomatic/meta.yml b/modules/nf-core/msisensorpro/msisomatic/meta.yml index a6dda66ff2..48daa6cc64 100644 --- a/modules/nf-core/msisensorpro/msisomatic/meta.yml +++ b/modules/nf-core/msisensorpro/msisomatic/meta.yml @@ -1,5 +1,7 @@ name: msisensorpro_msisomatic -description: MSIsensor-pro evaluates Microsatellite Instability (MSI) for cancer patients with next generation sequencing data. It accepts the whole genome sequencing, whole exome sequencing and target region (panel) sequencing data as input +description: MSIsensor-pro evaluates Microsatellite Instability (MSI) for cancer patients + with next generation sequencing data. It accepts the whole genome sequencing, whole + exome sequencing and target region (panel) sequencing data as input keywords: - micro-satellite-scan - msisensor-pro @@ -7,72 +9,91 @@ keywords: - somatic tools: - msisensorpro: - description: Microsatellite Instability (MSI) detection using high-throughput sequencing data. + description: Microsatellite Instability (MSI) detection using high-throughput + sequencing data. homepage: https://github.com/xjtu-omics/msisensor-pro documentation: https://github.com/xjtu-omics/msisensor-pro/wiki tool_dev_url: https://github.com/xjtu-omics/msisensor-pro doi: "10.1016/j.gpb.2020.02.001" licence: ["Custom Licence"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - normal: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - normal_index: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - tumor: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - tumor_index: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - intervals: - type: file - description: bed file containing interval information, optional - pattern: "*.{bed}" - - fasta: - type: file - description: Reference genome - pattern: "*.{fasta}" - - msisensor_scan: - type: file - description: Output from msisensor-pro/scan, conaining list of msi regions - pattern: "*.list" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - normal: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - normal_index: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - tumor: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - tumor_index: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - intervals: + type: file + description: bed file containing interval information, optional + pattern: "*.{bed}" + - - fasta: + type: file + description: Reference genome + pattern: "*.{fasta}" + - - msisensor_scan: + type: file + description: Output from msisensor-pro/scan, containing list of msi regions + pattern: "*.list" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - output_report: - type: file - description: File containing final report with all detected microsatellites, unstable somatic microsatellites, msi score + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: File containing final report with all detected microsatellites, + unstable somatic microsatellites, msi score - output_dis: - type: file - description: File containing distribution results + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}_dis: + type: file + description: File containing distribution results - output_germline: - type: file - description: File containing germline results + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}_germline: + type: file + description: File containing germline results - output_somatic: - type: file - description: File containing somatic results + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}_somatic: + type: file + description: File containing somatic results - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - list: - type: file - description: File containing microsatellite list - pattern: "*.{list}" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/msisensorpro/scan/environment.yml b/modules/nf-core/msisensorpro/scan/environment.yml index 377c28a61b..f67b9b733e 100644 --- a/modules/nf-core/msisensorpro/scan/environment.yml +++ b/modules/nf-core/msisensorpro/scan/environment.yml @@ -1,7 +1,5 @@ -name: msisensorpro_scan channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::msisensor-pro=1.2.0 diff --git a/modules/nf-core/msisensorpro/scan/main.nf b/modules/nf-core/msisensorpro/scan/main.nf index 9c7dce2596..265e6a132a 100644 --- a/modules/nf-core/msisensorpro/scan/main.nf +++ b/modules/nf-core/msisensorpro/scan/main.nf @@ -32,4 +32,15 @@ process MSISENSORPRO_SCAN { msisensor-pro: \$(msisensor-pro 2>&1 | sed -nE 's/Version:\\sv([0-9]\\.[0-9])/\\1/ p') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.msisensor_scan.list + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + msisensor-pro: \$(msisensor-pro 2>&1 | sed -nE 's/Version:\\sv([0-9]\\.[0-9])/\\1/ p') + END_VERSIONS + """ } diff --git a/modules/nf-core/msisensorpro/scan/meta.yml b/modules/nf-core/msisensorpro/scan/meta.yml index aec743ede5..ac9674b838 100644 --- a/modules/nf-core/msisensorpro/scan/meta.yml +++ b/modules/nf-core/msisensorpro/scan/meta.yml @@ -1,41 +1,47 @@ name: msisensorpro_scan -description: MSIsensor-pro evaluates Microsatellite Instability (MSI) for cancer patients with next generation sequencing data. It accepts the whole genome sequencing, whole exome sequencing and target region (panel) sequencing data as input +description: MSIsensor-pro evaluates Microsatellite Instability (MSI) for cancer patients + with next generation sequencing data. It accepts the whole genome sequencing, whole + exome sequencing and target region (panel) sequencing data as input keywords: - micro-satellite-scan - msisensor-pro - scan tools: - msisensorpro: - description: Microsatellite Instability (MSI) detection using high-throughput sequencing data. + description: Microsatellite Instability (MSI) detection using high-throughput + sequencing data. homepage: https://github.com/xjtu-omics/msisensor-pro documentation: https://github.com/xjtu-omics/msisensor-pro/wiki tool_dev_url: https://github.com/xjtu-omics/msisensor-pro doi: "10.1016/j.gpb.2020.02.001" licence: ["Custom Licence"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Reference genome - pattern: "*.{fasta}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome + pattern: "*.{fasta}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - list: - type: file - description: File containing microsatellite list - pattern: "*.{list}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.list": + type: file + description: File containing microsatellite list + pattern: "*.{list}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/msisensorpro/scan/tests/main.nf.test b/modules/nf-core/msisensorpro/scan/tests/main.nf.test new file mode 100644 index 0000000000..38334ac221 --- /dev/null +++ b/modules/nf-core/msisensorpro/scan/tests/main.nf.test @@ -0,0 +1,58 @@ + +nextflow_process { + + name "Test Process MSISENSORPRO_SCAN" + script "../main.nf" + process "MSISENSORPRO_SCAN" + + tag "modules" + tag "modules_nfcore" + tag "msisensorpro" + tag "msisensorpro/scan" + + test("test-msisensorpro-scan") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-msisensorpro-scan-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/msisensorpro/scan/tests/main.nf.test.snap b/modules/nf-core/msisensorpro/scan/tests/main.nf.test.snap new file mode 100644 index 0000000000..f7ea66fc84 --- /dev/null +++ b/modules/nf-core/msisensorpro/scan/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "test-msisensorpro-scan-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.msisensor_scan.list:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,e99820cdb69a600f5919ee1d7d5d1c3f" + ], + "list": [ + [ + { + "id": "test", + "single_end": false + }, + "test.msisensor_scan.list:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e99820cdb69a600f5919ee1d7d5d1c3f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T16:44:21.450285" + }, + "test-msisensorpro-scan": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.msisensor_scan.list:md5,309d41b136993db24a9f3dade877753b" + ] + ], + "1": [ + "versions.yml:md5,e99820cdb69a600f5919ee1d7d5d1c3f" + ], + "list": [ + [ + { + "id": "test", + "single_end": false + }, + "test.msisensor_scan.list:md5,309d41b136993db24a9f3dade877753b" + ] + ], + "versions": [ + "versions.yml:md5,e99820cdb69a600f5919ee1d7d5d1c3f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T16:44:09.684249" + } +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67e2..f1cd99b079 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f94..b9ccebdbbc 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35e1..b16c187923 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + - - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242ef2..33316a7ddb 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd80298..b779e46924 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 0000000000..c537a6a3e7 --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/modules/nf-core/ngscheckmate/ncm/environment.yml b/modules/nf-core/ngscheckmate/ncm/environment.yml index bf185fc23e..117b4e5783 100644 --- a/modules/nf-core/ngscheckmate/ncm/environment.yml +++ b/modules/nf-core/ngscheckmate/ncm/environment.yml @@ -1,7 +1,5 @@ -name: ngscheckmate_ncm channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ngscheckmate=1.0.1 diff --git a/modules/nf-core/ngscheckmate/ncm/meta.yml b/modules/nf-core/ngscheckmate/ncm/meta.yml index 0defad0064..06c131d6b0 100644 --- a/modules/nf-core/ngscheckmate/ncm/meta.yml +++ b/modules/nf-core/ngscheckmate/ncm/meta.yml @@ -1,70 +1,105 @@ name: ngscheckmate_ncm -description: Determining whether sequencing data comes from the same individual by using SNP matching. Designed for humans on vcf or bam files. +description: Determining whether sequencing data comes from the same individual by + using SNP matching. Designed for humans on vcf or bam files. keywords: - ngscheckmate - matching - snp tools: - ngscheckmate: - description: NGSCheckMate is a software package for identifying next generation sequencing (NGS) data files from the same individual, including matching between DNA and RNA. + description: NGSCheckMate is a software package for identifying next generation + sequencing (NGS) data files from the same individual, including matching between + DNA and RNA. homepage: https://github.com/parklab/NGSCheckMate documentation: https://github.com/parklab/NGSCheckMate tool_dev_url: https://github.com/parklab/NGSCheckMate doi: "10.1093/nar/gkx193" licence: ["MIT"] + identifier: biotools:ngscheckmate input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - files: - type: file - description: VCF or BAM files for each sample, in a merged channel (possibly gzipped). BAM files require an index too. - pattern: "*.{vcf,vcf.gz,bam,bai}" - - meta2: - type: map - description: | - Groovy Map containing SNP information - e.g. [ id:'test' ] - - snp_bed: - type: file - description: BED file containing the SNPs to analyse - pattern: "*.{bed}" - - meta3: - type: map - description: | - Groovy Map containing reference fasta index information - e.g. [ id:'test' ] - - fasta: - type: file - description: fasta file for the genome, only used in the bam mode - pattern: "*.{bed}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - files: + type: file + description: VCF or BAM files for each sample, in a merged channel (possibly + gzipped). BAM files require an index too. + pattern: "*.{vcf,vcf.gz,bam,bai}" + - - meta2: + type: map + description: | + Groovy Map containing SNP information + e.g. [ id:'test' ] + - snp_bed: + type: file + description: BED file containing the SNPs to analyse + pattern: "*.{bed}" + - - meta3: + type: map + description: | + Groovy Map containing reference fasta index information + e.g. [ id:'test' ] + - fasta: + type: file + description: fasta file for the genome, only used in the bam mode + pattern: "*.{bed}" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - pdf: - type: file - description: A pdf containing a dendrogram showing how the samples match up - pattern: "*.{pdf}" - corr_matrix: - type: file - description: A text file containing the correlation matrix between each sample - pattern: "*corr_matrix.txt" + - meta: + type: file + description: A text file containing the correlation matrix between each sample + pattern: "*corr_matrix.txt" + - "*_corr_matrix.txt": + type: file + description: A text file containing the correlation matrix between each sample + pattern: "*corr_matrix.txt" - matched: - type: file - description: A txt file containing only the samples that match with each other - pattern: "*matched.txt" + - meta: + type: file + description: A txt file containing only the samples that match with each other + pattern: "*matched.txt" + - "*_matched.txt": + type: file + description: A txt file containing only the samples that match with each other + pattern: "*matched.txt" - all: - type: file - description: A txt file containing all the sample comparisons, whether they match or not - pattern: "*all.txt" + - meta: + type: file + description: A txt file containing all the sample comparisons, whether they + match or not + pattern: "*all.txt" + - "*_all.txt": + type: file + description: A txt file containing all the sample comparisons, whether they + match or not + pattern: "*all.txt" + - pdf: + - meta: + type: file + description: A pdf containing a dendrogram showing how the samples match up + pattern: "*.{pdf}" + - "*.pdf": + type: file + description: A pdf containing a dendrogram showing how the samples match up + pattern: "*.{pdf}" - vcf: - type: file - description: If ran in bam mode, vcf files for each sample giving the SNP calls used - pattern: "*.vcf" + - meta: + type: file + description: If ran in bam mode, vcf files for each sample giving the SNP calls + used + pattern: "*.vcf" + - "*.vcf": + type: file + description: If ran in bam mode, vcf files for each sample giving the SNP calls + used + pattern: "*.vcf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@sppearce" maintainers: diff --git a/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test b/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test index 9dafbdf6df..1263be3583 100644 --- a/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test +++ b/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test @@ -19,8 +19,8 @@ nextflow_process { process { """ input[0] = [ [ id:'test' ], - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] """ } } @@ -30,13 +30,13 @@ nextflow_process { process { """ input[0] = [ - [ id:'test1' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) - ] + [ id:'test1' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] input[1] = [ [ id:'sarscov2' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] input[2] = false """ } @@ -47,13 +47,13 @@ nextflow_process { process { """ input[0] = [ - [ id:'test2' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) - ] + [ id:'test2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] input[1] = [ [ id:'sarscov2' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] input[2] = false """ } @@ -68,16 +68,17 @@ nextflow_process { process { """ input[0] = [ [ id: 'combined_bams' ], - [file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'] , checkIfExists: true ), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'] , checkIfExists: true ), - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'] , checkIfExists: true ), - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam_bai'], checkIfExists: true ) - ] - ] + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', checkIfExists: true) + ] + ] input[1] = BEDTOOLS_MAKEWINDOWS.out.bed input[2] = [ [ id:'sarscov2' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] """ } } @@ -86,9 +87,9 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - process.out.corr_matrix, - process.out.matched, - process.out.all, + file(process.out.corr_matrix[0][1]).name, // Content md5 not stable under conda + file(process.out.matched[0][1]).name, // Content md5 not stable under conda + file(process.out.all[0][1]).name, // Content md5 not stable under conda process.out.versions ).match() } ) @@ -104,8 +105,8 @@ nextflow_process { input[0] = BCFTOOLS_MPILEUP1.out.vcf.combine(BCFTOOLS_MPILEUP2.out.vcf.map{it[1]}).map{meta, one, two -> [meta, [one, two]]}.map{meta, stuff -> [meta, stuff.flatten()]} input[1] = BEDTOOLS_MAKEWINDOWS.out.bed input[2] = [ [ id:'sarscov2' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] """ } } @@ -133,16 +134,17 @@ nextflow_process { process { """ input[0] = [ [ id: 'combined_bams' ], - [file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'] , checkIfExists: true ), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'] , checkIfExists: true ), - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'] , checkIfExists: true ), - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam_bai'], checkIfExists: true ) - ] - ] + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', checkIfExists: true) + ] + ] input[1] = BEDTOOLS_MAKEWINDOWS.out.bed input[2] = [ [ id:'sarscov2' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] """ } } @@ -166,8 +168,8 @@ nextflow_process { input[0] = BCFTOOLS_MPILEUP1.out.vcf.combine(BCFTOOLS_MPILEUP2.out.vcf.map{it[1]}) input[1] = BEDTOOLS_MAKEWINDOWS.out.bed input[2] = [ [ id:'sarscov2' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] """ } } diff --git a/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test.snap b/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test.snap index 46a98ccc98..e78cecc8f5 100644 --- a/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test.snap +++ b/modules/nf-core/ngscheckmate/ncm/tests/main.nf.test.snap @@ -125,39 +125,18 @@ }, "sarscov2 - bam": { "content": [ - [ - [ - { - "id": "combined_bams" - }, - "combined_bams_output_corr_matrix.txt:md5,b8bfd203232680b746ac91ccb290b5e3" - ] - ], - [ - [ - { - "id": "combined_bams" - }, - "combined_bams_matched.txt:md5,14d0b35765e127aab0ffa5ea5406b4ab" - ] - ], - [ - [ - { - "id": "combined_bams" - }, - "combined_bams_all.txt:md5,14d0b35765e127aab0ffa5ea5406b4ab" - ] - ], + "combined_bams_output_corr_matrix.txt", + "combined_bams_matched.txt", + "combined_bams_all.txt", [ "versions.yml:md5,7ac92d9cbf4fc44b3253832f3a8b2a80" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.04.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-05-22T16:04:35.032277154" + "timestamp": "2024-08-06T11:05:56.136156" }, "sarscov2 - vcf - stub": { "content": [ diff --git a/modules/nf-core/samblaster/environment.yml b/modules/nf-core/samblaster/environment.yml index ac83824150..fc8cd9e515 100644 --- a/modules/nf-core/samblaster/environment.yml +++ b/modules/nf-core/samblaster/environment.yml @@ -1,9 +1,6 @@ -name: samblaster - channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samblaster/meta.yml b/modules/nf-core/samblaster/meta.yml index 5c1e5a9700..5faf3a6c3a 100644 --- a/modules/nf-core/samblaster/meta.yml +++ b/modules/nf-core/samblaster/meta.yml @@ -23,30 +23,33 @@ tools: tool_dev_url: https://github.com/GregoryFaust/samblaster doi: "10.1093/bioinformatics/btu314" licence: ["MIT"] + identifier: biotools:samblaster input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.bam" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.bam" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bam: - type: file - description: Tagged or filtered BAM file - pattern: "*.bam" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Tagged or filtered BAM file + pattern: "*.bam" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@lescai" maintainers: diff --git a/modules/nf-core/samblaster/tests/main.nf.test b/modules/nf-core/samblaster/tests/main.nf.test index 0179430715..20d505bbef 100644 --- a/modules/nf-core/samblaster/tests/main.nf.test +++ b/modules/nf-core/samblaster/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_umi_unsorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_unsorted.bam', checkIfExists: true) ] """ } @@ -24,7 +24,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() + } ) } @@ -39,7 +44,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_umi_unsorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_unsorted.bam', checkIfExists: true) ] """ } diff --git a/modules/nf-core/samblaster/tests/main.nf.test.snap b/modules/nf-core/samblaster/tests/main.nf.test.snap index 917c8f1fb1..1a1481a1e3 100644 --- a/modules/nf-core/samblaster/tests/main.nf.test.snap +++ b/modules/nf-core/samblaster/tests/main.nf.test.snap @@ -36,37 +36,16 @@ }, "homo_sapiens-test_paired_end_umi_unsorted_bam": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.bam:md5,634a6bd541478e970f0a4c279f399889" - ] - ], - "1": [ - "versions.yml:md5,8a70467f2dfc2e0d8e81787223d2fc77" - ], - "bam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.bam:md5,634a6bd541478e970f0a4c279f399889" - ] - ], - "versions": [ - "versions.yml:md5,8a70467f2dfc2e0d8e81787223d2fc77" - ] - } + "e21efac7a4734b9b16f7210901cf02af", + "c1b74864f32583faf7d9bcd82217ff4c", + [ + "versions.yml:md5,8a70467f2dfc2e0d8e81787223d2fc77" + ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-02-26T14:04:38.118875" + "timestamp": "2024-07-29T20:15:04.264504" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/bam2fq/environment.yml b/modules/nf-core/samtools/bam2fq/environment.yml index 9c98946adc..b98cbb9909 100644 --- a/modules/nf-core/samtools/bam2fq/environment.yml +++ b/modules/nf-core/samtools/bam2fq/environment.yml @@ -1,8 +1,7 @@ -name: samtools_bam2fq channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/bam2fq/main.nf b/modules/nf-core/samtools/bam2fq/main.nf index a34a13a984..1d3049e565 100644 --- a/modules/nf-core/samtools/bam2fq/main.nf +++ b/modules/nf-core/samtools/bam2fq/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_BAM2FQ { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(inputbam) diff --git a/modules/nf-core/samtools/bam2fq/meta.yml b/modules/nf-core/samtools/bam2fq/meta.yml index 7769046b54..b17ed608d0 100644 --- a/modules/nf-core/samtools/bam2fq/meta.yml +++ b/modules/nf-core/samtools/bam2fq/meta.yml @@ -11,40 +11,43 @@ tools: description: Tools for dealing with SAM, BAM and CRAM files documentation: http://www.htslib.org/doc/1.1/samtools.html licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - inputbam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - split: - type: boolean - description: | - TRUE/FALSE value to indicate if reads should be separated into - /1, /2 and if present other, or singleton. - Note: choosing TRUE will generate 4 different files. - Choosing FALSE will produce a single file, which will be interleaved in case - the input contains paired reads. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - inputbam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - - split: + type: boolean + description: | + TRUE/FALSE value to indicate if reads should be separated into + /1, /2 and if present other, or singleton. + Note: choosing TRUE will generate 4 different files. + Choosing FALSE will produce a single file, which will be interleaved in case + the input contains paired reads. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - reads: - type: file - description: | - FASTQ files, which will be either a group of 4 files (read_1, read_2, other and singleton) - or a single interleaved .fq.gz file if the user chooses not to split the reads. - pattern: "*.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fq.gz": + type: file + description: | + FASTQ files, which will be either a group of 4 files (read_1, read_2, other and singleton) + or a single interleaved .fq.gz file if the user chooses not to split the reads. + pattern: "*.fq.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@lescai" maintainers: diff --git a/modules/nf-core/samtools/bam2fq/tests/main.nf.test.snap b/modules/nf-core/samtools/bam2fq/tests/main.nf.test.snap index aa0f8c34d1..17ea1d4f90 100644 --- a/modules/nf-core/samtools/bam2fq/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/bam2fq/tests/main.nf.test.snap @@ -51,25 +51,25 @@ "bam_versions": { "content": [ [ - "versions.yml:md5,90c1cf8971540ef05e330db5a560195c" + "versions.yml:md5,afea8d3a8a729d71eac7d7e034012aee" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:52.415053401" + "timestamp": "2024-09-16T07:46:07.695175929" }, "bam_split_versions": { "content": [ [ - "versions.yml:md5,90c1cf8971540ef05e330db5a560195c" + "versions.yml:md5,afea8d3a8a729d71eac7d7e034012aee" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:57.740193087" + "timestamp": "2024-09-16T07:46:17.91793415" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/collatefastq/environment.yml b/modules/nf-core/samtools/collatefastq/environment.yml index 93734c5670..b98cbb9909 100644 --- a/modules/nf-core/samtools/collatefastq/environment.yml +++ b/modules/nf-core/samtools/collatefastq/environment.yml @@ -1,8 +1,7 @@ -name: samtools_collatefastq channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/collatefastq/main.nf b/modules/nf-core/samtools/collatefastq/main.nf index a75f56e8c6..8b70ebd345 100644 --- a/modules/nf-core/samtools/collatefastq/main.nf +++ b/modules/nf-core/samtools/collatefastq/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_COLLATEFASTQ { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) @@ -13,11 +13,11 @@ process SAMTOOLS_COLLATEFASTQ { val(interleave) output: - tuple val(meta), path("*_{1,2}.fq.gz") , optional:true, emit: fastq - tuple val(meta), path("*_interleaved.fq.gz") , optional:true, emit: fastq_interleaved - tuple val(meta), path("*_other.fq.gz") , emit: fastq_other - tuple val(meta), path("*_singleton.fq.gz") , optional:true, emit: fastq_singleton - path "versions.yml" , emit: versions + tuple val(meta), path("*_{1,2}.fq.gz") , optional:true, emit: fastq + tuple val(meta), path("*_interleaved.fq") , optional:true, emit: fastq_interleaved + tuple val(meta), path("*_other.fq.gz") , emit: fastq_other + tuple val(meta), path("*_singleton.fq.gz") , optional:true, emit: fastq_singleton + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -27,7 +27,7 @@ process SAMTOOLS_COLLATEFASTQ { def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" - def output = (interleave && ! meta.single_end) ? "> ${prefix}_interleaved.fq.gz" : + def output = (interleave && ! meta.single_end) ? "> ${prefix}_interleaved.fq" : meta.single_end ? "-1 ${prefix}_1.fq.gz -s ${prefix}_singleton.fq.gz" : "-1 ${prefix}_1.fq.gz -2 ${prefix}_2.fq.gz -s ${prefix}_singleton.fq.gz" @@ -52,4 +52,25 @@ process SAMTOOLS_COLLATEFASTQ { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def empty = "echo '' | gzip " + def singletoncommand = "${empty}> ${prefix}_singleton.fq.gz" + def interleavecommand = interleave && !meta.single_end ? "${empty}> ${prefix}_interleaved.fq.gz" : "" + def output1command = !interleave ? "${empty}> ${prefix}_1.fq.gz" : "" + def output2command = !interleave && !meta.single_end ? "${empty}> ${prefix}_2.fq.gz" : "" + + """ + ${output1command} + ${output2command} + ${interleavecommand} + ${singletoncommand} + ${empty}> ${prefix}_other.fq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/samtools/collatefastq/meta.yml b/modules/nf-core/samtools/collatefastq/meta.yml index 898cdbdad7..5bc912496e 100644 --- a/modules/nf-core/samtools/collatefastq/meta.yml +++ b/modules/nf-core/samtools/collatefastq/meta.yml @@ -11,61 +11,90 @@ tools: description: Tools for dealing with SAM, BAM and CRAM files documentation: http://www.htslib.org/doc/1.1/samtools.html licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference genome fasta file - pattern: "*.{fasta,fa}" - - interleave: - type: boolean - description: | - If true, the output is a single interleaved paired-end FASTQ - If false, the output split paired-end FASTQ - default: false + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference genome fasta file + pattern: "*.{fasta,fa}" + - - interleave: + type: boolean + description: | + If true, the output is a single interleaved paired-end FASTQ + If false, the output split paired-end FASTQ + default: false output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - fastq: - type: file - description: | - R1 and R2 FASTQ files - pattern: "*_{1,2}.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_{1,2}.fq.gz" + - "*_{1,2}.fq.gz": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_{1,2}.fq.gz" - fastq_interleaved: - type: file - description: | - Interleaved paired end FASTQ files - pattern: "*_interleaved.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_interleaved.fq.gz" + - "*_interleaved.fq": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_interleaved.fq.gz" - fastq_other: - type: file - description: | - FASTQ files with reads where the READ1 and READ2 FLAG bits set are either both set or both unset. - pattern: "*_other.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_other.fq.gz" + - "*_other.fq.gz": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_other.fq.gz" - fastq_singleton: - type: file - description: | - FASTQ files with singleton reads. - pattern: "*_singleton.fq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_singleton.fq.gz" + - "*_singleton.fq.gz": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*_singleton.fq.gz" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@lescai" - "@maxulysse" diff --git a/modules/nf-core/samtools/collatefastq/tests/main.nf.test b/modules/nf-core/samtools/collatefastq/tests/main.nf.test new file mode 100644 index 0000000000..bc66ebf6e3 --- /dev/null +++ b/modules/nf-core/samtools/collatefastq/tests/main.nf.test @@ -0,0 +1,242 @@ +nextflow_process { + + name "Test Process SAMTOOLS_COLLATEFASTQ" + script "../main.nf" + process "SAMTOOLS_COLLATEFASTQ" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/collatefastq" + + test("human - bam - paired_end") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq, + process.out.versions).match() } + ) + } + + } + + test("human - bam - single_end") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq_other, + process.out.versions).match() } + ) + } + + } + + test("human - cram") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq, + process.out.versions).match() } + ) + } + + } + + test("human - bam - paired_end - interleaved") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq_interleaved, + process.out.fastq_singleton, + process.out.fastq, + process.out.versions).match() } + ) + } + + } + + test("human - bam - paired_end -stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq, + process.out.versions).match() } + ) + } + + } + + test("human - bam - single_end - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq_other, + process.out.versions).match() } + ) + } + + } + + test("human - cram - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq, + process.out.versions).match() } + ) + } + + } + + test("human - bam - paired_end - interleaved - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq_interleaved, + process.out.fastq_singleton, + process.out.fastq, + process.out.versions).match() } + ) + } + + } + + + +} diff --git a/modules/nf-core/samtools/collatefastq/tests/main.nf.test.snap b/modules/nf-core/samtools/collatefastq/tests/main.nf.test.snap new file mode 100644 index 0000000000..26f5293699 --- /dev/null +++ b/modules/nf-core/samtools/collatefastq/tests/main.nf.test.snap @@ -0,0 +1,194 @@ +{ + "human - bam - paired_end - interleaved - stub": { + "content": [ + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_singleton.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + [ + + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:50:35.483719031" + }, + "human - bam - single_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test_other.fq.gz:md5,a6c101a06b5c9d5f8b91c0acd4ac5045" + ] + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:49:31.667042764" + }, + "human - bam - paired_end -stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:50:04.607920717" + }, + "human - cram - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:50:25.354607106" + }, + "human - cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fq.gz:md5,1cf671980643af6c1148ae5e8e94e350", + "test_2.fq.gz:md5,38c1e9829115f9025f95435c5a4373d3" + ] + ] + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:49:43.12646213" + }, + "human - bam - paired_end - interleaved": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_interleaved.fq:md5,4f2b93d492f0442fa89b02532c9b3530" + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:49:53.799565712" + }, + "human - bam - single_end - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test_other.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:50:15.487972669" + }, + "human - bam - paired_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fq.gz:md5,1cf671980643af6c1148ae5e8e94e350", + "test_2.fq.gz:md5,38c1e9829115f9025f95435c5a4373d3" + ] + ] + ], + [ + "versions.yml:md5,6359bf4b480f99e14e14b9e7dcb2fd5a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:49:19.805942524" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/collatefastq/tests/tags.yml b/modules/nf-core/samtools/collatefastq/tests/tags.yml new file mode 100644 index 0000000000..67380776a2 --- /dev/null +++ b/modules/nf-core/samtools/collatefastq/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/collatefastq: + - "modules/nf-core/samtools/collatefastq/**" diff --git a/modules/nf-core/samtools/convert/environment.yml b/modules/nf-core/samtools/convert/environment.yml index 7a95ca614a..b98cbb9909 100644 --- a/modules/nf-core/samtools/convert/environment.yml +++ b/modules/nf-core/samtools/convert/environment.yml @@ -1,8 +1,7 @@ -name: samtools_convert channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf index 03b7b5259d..cf9253d10f 100644 --- a/modules/nf-core/samtools/convert/main.nf +++ b/modules/nf-core/samtools/convert/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_CONVERT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/samtools/convert/meta.yml b/modules/nf-core/samtools/convert/meta.yml index 558289715c..d5bfa161ba 100644 --- a/modules/nf-core/samtools/convert/meta.yml +++ b/modules/nf-core/samtools/convert/meta.yml @@ -15,50 +15,85 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - index: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" - - fasta: - type: file - description: Reference file to create the CRAM file - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference file to create the CRAM file + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: Reference index file to create the CRAM file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: filtered/converted BAM file - pattern: "*{.bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: filtered/converted BAM file + pattern: "*{.bam}" - cram: - type: file - description: filtered/converted CRAM file - pattern: "*{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: filtered/converted CRAM file + pattern: "*{cram}" - bai: - type: file - description: filtered/converted BAM index - pattern: "*{.bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: filtered/converted BAM index + pattern: "*{.bai}" - crai: - type: file - description: filtered/converted CRAM index - pattern: "*{.crai}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: filtered/converted CRAM index + pattern: "*{.crai}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@FriederikeHanssen" - "@maxulysse" diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test.snap b/modules/nf-core/samtools/convert/tests/main.nf.test.snap index 513629022b..a021254e8b 100644 --- a/modules/nf-core/samtools/convert/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/convert/tests/main.nf.test.snap @@ -22,26 +22,26 @@ "cram_to_bam_versions": { "content": [ [ - "versions.yml:md5,b1040cd80ce16abb9b2c2902b62d5fcd" + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:44:34.618037105" + "timestamp": "2024-09-16T07:52:35.516411351" }, "bam_to_cram_versions": { "content": [ [ - "versions.yml:md5,b1040cd80ce16abb9b2c2902b62d5fcd" + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:44:29.165839679" + "timestamp": "2024-09-16T07:52:24.694454205" }, "stub": { "content": [ @@ -71,7 +71,7 @@ ] ], "4": [ - "versions.yml:md5,b1040cd80ce16abb9b2c2902b62d5fcd" + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" ], "bai": [ @@ -98,15 +98,15 @@ ] ], "versions": [ - "versions.yml:md5,b1040cd80ce16abb9b2c2902b62d5fcd" + "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:44:40.258233921" + "timestamp": "2024-09-16T07:52:45.799885099" }, "bam_to_cram_index": { "content": [ diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index f8450fa566..2bcd47ee16 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,10 +1,7 @@ -name: samtools_faidx - channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::htslib=1.20 - - bioconda::samtools=1.20 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index bdcdbc954d..28c0a81cf7 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index f3c25de20f..6721b2cb84 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -14,47 +14,62 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - fa: - type: file - description: FASTA file - pattern: "*.{fa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 3223b72bc6..1bbb3ec2b0 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -18,7 +18,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -36,15 +36,15 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:14.779784761" + "timestamp": "2024-09-16T07:57:47.450887871" }, "test_samtools_faidx_bgzip": { "content": [ @@ -71,7 +71,7 @@ ] ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -95,15 +95,15 @@ ] ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:20.256633877" + "timestamp": "2024-09-16T07:58:04.804905659" }, "test_samtools_faidx_fasta": { "content": [ @@ -124,7 +124,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ [ @@ -142,15 +142,15 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:25.632577273" + "timestamp": "2024-09-16T07:58:23.831268154" }, "test_samtools_faidx_stub_fasta": { "content": [ @@ -171,7 +171,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ [ @@ -189,15 +189,15 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:31.058424849" + "timestamp": "2024-09-16T07:58:35.600243706" }, "test_samtools_faidx_stub_fai": { "content": [ @@ -218,7 +218,7 @@ ], "3": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -236,14 +236,14 @@ ], "versions": [ - "versions.yml:md5,2db78952923a61e05d50b95518b21856" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:36.479929617" + "timestamp": "2024-09-16T07:58:54.705460167" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 260d516be9..b98cbb9909 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -1,8 +1,7 @@ -name: samtools_index channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index b523c21b43..311756102d 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) @@ -35,10 +35,11 @@ process SAMTOOLS_INDEX { """ stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" """ - touch ${input}.bai - touch ${input}.crai - touch ${input}.csi + touch ${input}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 01a4ee03eb..db8df0d505 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -15,38 +15,52 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - csi: - type: file - description: CSI index file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: CSI index file + pattern: "*.{csi}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index bb7756d1ca..ca34fb5cd4 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -9,11 +9,7 @@ nextflow_process { tag "samtools/index" test("bai") { - when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -27,18 +23,13 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.bai).match("bai") }, - { assert snapshot(process.out.versions).match("bai_versions") } + { assert snapshot(process.out).match() } ) } } test("crai") { - when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -52,20 +43,83 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.crai).match("crai") }, - { assert snapshot(process.out.versions).match("crai_versions") } + { assert snapshot(process.out).match() } ) } } test("csi") { - config "./csi.nextflow.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.csi[0][1]).name, + process.out.versions + ).match() } + ) + } + } + + test("bai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("crai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("csi - stub") { + options "-stub" + config "./csi.nextflow.config" + + when { process { """ input[0] = Channel.of([ @@ -79,8 +133,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("csi_versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 52756e85c6..72d65e81af 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,74 +1,250 @@ { - "crai_versions": { + "csi - stub": { "content": [ - [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" - ] + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:04.203740976" + "timestamp": "2024-09-16T08:21:25.261127166" }, - "csi_versions": { + "crai - stub": { "content": [ - [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" - ] + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:09.57475878" + "timestamp": "2024-09-16T08:21:12.653194876" }, - "crai": { + "bai - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] - ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-12T18:41:38.446424" + "timestamp": "2024-09-16T08:21:01.854932651" }, - "bai": { + "csi": { "content": [ + "test.paired_end.sorted.bam.csi", [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" - ] + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-12T18:40:46.579747" + "timestamp": "2024-09-16T08:20:51.485364222" }, - "bai_versions": { + "crai": { "content": [ - [ - "versions.yml:md5,802c9776d9c5e95314e888cf18e96d77" - ] + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:40.518873972" + }, + "bai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:41:57.929287369" + "timestamp": "2024-09-16T08:20:21.184050361" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml index cd366d6de3..b98cbb9909 100644 --- a/modules/nf-core/samtools/merge/environment.yml +++ b/modules/nf-core/samtools/merge/environment.yml @@ -1,8 +1,7 @@ -name: samtools_merge channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index 693b1d80f4..34da4c7c87 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_MERGE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 2e8f3dbbb5..235aa21945 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -15,60 +15,81 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_files: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of the reference file the CRAM was created with (optional) - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of the reference file the CRAM was created with (optional) + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: BAM file + pattern: "*.{bam}" - cram: - type: file - description: CRAM file - pattern: "*.{cram}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: CRAM file + pattern: "*.{cram}" - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" - crai: - type: file - description: CRAM index file (optional) - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@yuukiiwa " diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap index 17bc846fa2..0a41e01af6 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -80,14 +80,14 @@ "bam_versions": { "content": [ [ - "versions.yml:md5,84dab54b9812780df48f5cecef690c34" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:46:35.851936597" + "timestamp": "2024-09-16T09:16:30.476887194" }, "bams_csi": { "content": [ @@ -124,14 +124,14 @@ "bams_stub_versions": { "content": [ [ - "versions.yml:md5,84dab54b9812780df48f5cecef690c34" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:46:41.405707643" + "timestamp": "2024-09-16T09:16:52.203823961" }, "bam_cram": { "content": [ @@ -158,14 +158,14 @@ "bams_versions": { "content": [ [ - "versions.yml:md5,84dab54b9812780df48f5cecef690c34" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:45:51.695689923" + "timestamp": "2024-09-16T08:29:57.524363148" }, "crams_bam": { "content": [ @@ -182,14 +182,14 @@ "crams_versions": { "content": [ [ - "versions.yml:md5,84dab54b9812780df48f5cecef690c34" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:46:30.185392319" + "timestamp": "2024-09-16T09:16:06.977096207" }, "bam_csi": { "content": [ diff --git a/modules/nf-core/samtools/mpileup/environment.yml b/modules/nf-core/samtools/mpileup/environment.yml index add717dafc..b98cbb9909 100644 --- a/modules/nf-core/samtools/mpileup/environment.yml +++ b/modules/nf-core/samtools/mpileup/environment.yml @@ -1,8 +1,7 @@ -name: samtools_mpileup channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/mpileup/main.nf b/modules/nf-core/samtools/mpileup/main.nf index b51f96d369..a45c6045b1 100644 --- a/modules/nf-core/samtools/mpileup/main.nf +++ b/modules/nf-core/samtools/mpileup/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_MPILEUP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(intervals) path fasta diff --git a/modules/nf-core/samtools/mpileup/meta.yml b/modules/nf-core/samtools/mpileup/meta.yml index 13038fbc9b..0655e08727 100644 --- a/modules/nf-core/samtools/mpileup/meta.yml +++ b/modules/nf-core/samtools/mpileup/meta.yml @@ -15,38 +15,41 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - fasta: - type: file - description: FASTA reference file - pattern: "*.{fasta,fa}" - - intervals: - type: file - description: Interval FILE - pattern: "*.bed" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - intervals: + type: file + description: Interval FILE + pattern: "*.bed" + - - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - mpileup: - type: file - description: mpileup file - pattern: "*.{mpileup}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mpileup.gz": + type: file + description: mpileup file + pattern: "*.{mpileup}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@joseespinosa" diff --git a/modules/nf-core/samtools/mpileup/tests/main.nf.test.snap b/modules/nf-core/samtools/mpileup/tests/main.nf.test.snap index 76b2086b40..fb6b6f1b7d 100644 --- a/modules/nf-core/samtools/mpileup/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/mpileup/tests/main.nf.test.snap @@ -2,26 +2,26 @@ "bam_bed_versions": { "content": [ [ - "versions.yml:md5,449485eab74a465dc9023760be2c12a1" + "versions.yml:md5,0ad5d578348ec8f358197302530db925" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:41.535946155" + "timestamp": "2024-09-16T09:20:04.969588285" }, "bam_bed_fasta_versions": { "content": [ [ - "versions.yml:md5,449485eab74a465dc9023760be2c12a1" + "versions.yml:md5,0ad5d578348ec8f358197302530db925" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:46.787790118" + "timestamp": "2024-09-16T09:20:30.887599345" }, "bam_bed_mpileup": { "content": [ diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index 1cc83bd954..b98cbb9909 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -1,8 +1,7 @@ -name: samtools_stats channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 982bc28e7f..493525a9e0 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_STATS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 735ff8122a..77b020f76e 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -16,43 +16,46 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - stats: - type: file - description: File containing samtools stats output - pattern: "*.{stats}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.stats": + type: file + description: File containing samtools stats output + pattern: "*.{stats}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@FriederikeHanssen" diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test index e3d5cb14ce..5bc8930959 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_process { name "Test Process SAMTOOLS_STATS" script "../main.nf" process "SAMTOOLS_STATS" + tag "modules" tag "modules_nfcore" tag "samtools" @@ -11,9 +12,6 @@ nextflow_process { test("bam") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -37,9 +35,59 @@ nextflow_process { test("cram") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ]) + """ } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("cram - stub") { + + options "-stub" + + when { process { """ input[0] = Channel.of([ @@ -49,7 +97,7 @@ nextflow_process { ]) input[1] = Channel.of([ [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ]) """ } diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap index 2747fd6c61..df507be7a3 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -8,11 +8,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,c9d39b38c22de2057fc2f89949090975" + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" ] ], "1": [ - "versions.yml:md5,b3b70b126f867fdbb7dcea5e36e49d4a" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ], "stats": [ [ @@ -20,19 +20,89 @@ "id": "test", "single_end": false }, - "test.stats:md5,c9d39b38c22de2057fc2f89949090975" + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" ] ], "versions": [ - "versions.yml:md5,b3b70b126f867fdbb7dcea5e36e49d4a" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:45:24.403941966" + "timestamp": "2024-09-16T09:29:16.767396182" + }, + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:29.721580274" + }, + "cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:53.567964304" }, "bam": { "content": [ @@ -43,11 +113,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,d522a1fa016b259d6a55620ae53dcd63" + "test.stats:md5,d53a2584376d78942839e9933a34d11b" ] ], "1": [ - "versions.yml:md5,b3b70b126f867fdbb7dcea5e36e49d4a" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ], "stats": [ [ @@ -55,18 +125,18 @@ "id": "test", "single_end": false }, - "test.stats:md5,d522a1fa016b259d6a55620ae53dcd63" + "test.stats:md5,d53a2584376d78942839e9933a34d11b" ] ], "versions": [ - "versions.yml:md5,b3b70b126f867fdbb7dcea5e36e49d4a" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:45:06.711251947" + "timestamp": "2024-09-16T09:28:50.73610604" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index 150c377771..b98cbb9909 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -1,8 +1,7 @@ -name: samtools_view channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.20 - bioconda::htslib=1.20 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 38df857604..37e05cec88 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) @@ -13,13 +13,15 @@ process SAMTOOLS_VIEW { path qname output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.sam"), emit: sam, optional: true - tuple val(meta), path("*.bai"), emit: bai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${file_type}.bai"), emit: bai, optional: true + tuple val(meta), path("${prefix}.${file_type}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${file_type}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}"), emit: unselected, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}.{bai,csi,crsi}"), emit: unselected_index, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -27,13 +29,13 @@ process SAMTOOLS_VIEW { script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" - def readnames = qname ? "--qname-file ${qname}": "" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + readnames = qname ? "--qname-file ${qname} --output-unselected ${prefix}.unselected.${file_type}": "" if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ samtools \\ @@ -54,14 +56,14 @@ process SAMTOOLS_VIEW { stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + prefix = task.ext.prefix ?: "${meta.id}" + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - def index = args.contains("--write-index") ? "touch ${prefix}.csi" : "" + def index = args.contains("--write-index") ? "touch ${prefix}.${file_type}.csi" : "" """ touch ${prefix}.${file_type} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 3dadafae75..caa7b0150d 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -15,68 +15,120 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) - pattern: "*.{.bai,.csi,.crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - qname: - type: file - description: Optional file with read names to output only select alignments - pattern: "*.{txt,list}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) + pattern: "*.{.bai,.csi,.crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - qname: + type: file + description: Optional file with read names to output only select alignments + pattern: "*.{txt,list}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: optional filtered/converted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: optional filtered/converted BAM file + pattern: "*.{bam}" - cram: - type: file - description: optional filtered/converted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: optional filtered/converted CRAM file + pattern: "*.{cram}" - sam: - type: file - description: optional filtered/converted SAM file - pattern: "*.{sam}" - # bai, csi, and crai are created with `--write-index` + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.sam: + type: file + description: optional filtered/converted SAM file + pattern: "*.{sam}" - bai: - type: file - description: optional BAM file index - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.bai: + type: file + description: optional BAM file index + pattern: "*.{bai}" - csi: - type: file - description: optional tabix BAM file index - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.csi: + type: file + description: optional tabix BAM file index + pattern: "*.{csi}" - crai: - type: file - description: optional CRAM file index - pattern: "*.{crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.crai: + type: file + description: optional CRAM file index + pattern: "*.{crai}" + - unselected: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}: + type: file + description: optional file with unselected alignments + pattern: "*.unselected.{bam,cram,sam}" + - unselected_index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}.{bai,csi,crsi}: + type: file + description: index for the "unselected" file + pattern: "*.unselected.{bai,csi,crai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@joseespinosa" diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test index 45a0defbae..37b81a9163 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -172,6 +172,8 @@ nextflow_process { { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, + { assert snapshot(file(process.out.unselected[0][1]).name).match("cram_to_bam_index_qname_unselected") }, + { assert snapshot(file(process.out.unselected_index[0][1]).name).match("cram_to_bam_index_qname_unselected_csi") }, { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } ) } diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap index eb0c577c90..63849b037b 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -56,14 +56,14 @@ "bam_stub_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:20.390692583" + "timestamp": "2024-09-16T09:26:24.461775464" }, "cram_to_bam_index_cram": { "content": [ @@ -169,6 +169,16 @@ }, "timestamp": "2024-02-12T19:37:56.490286" }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, "bam_csi": { "content": [ [ @@ -208,14 +218,14 @@ "cram_to_bam_index_qname_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:15.007493874" + "timestamp": "2024-09-16T09:25:51.953436682" }, "cram_to_bam_bam": { "content": [ @@ -240,14 +250,14 @@ "cram_to_bam_index_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:09.472376824" + "timestamp": "2024-09-16T09:25:14.475388399" }, "cram_to_bam_bai": { "content": [ @@ -264,14 +274,14 @@ "cram_to_bam_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:43:04.080050906" + "timestamp": "2024-09-16T09:24:49.673441798" }, "cram_bam": { "content": [ @@ -355,17 +365,37 @@ }, "timestamp": "2024-02-12T19:38:23.322874" }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, "bam_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-28T15:42:52.978954857" + "timestamp": "2024-09-16T09:23:27.151650338" }, "cram_to_bam_index_qname_cram": { "content": [ @@ -430,14 +460,24 @@ "cram_versions": { "content": [ [ - "versions.yml:md5,6cd41a9a3b4a95271ec011ea990a2838" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:24:12.95416913" + }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "23.04.3" }, - "timestamp": "2024-05-28T15:42:58.400776109" + "timestamp": "2024-02-12T19:38:23.322874" }, "bam_sam": { "content": [ @@ -477,7 +517,7 @@ }, "bam_stub_csi": { "content": [ - "test.csi" + "test.bam.csi" ], "meta": { "nf-test": "0.8.4", diff --git a/modules/nf-core/sentieon/applyvarcal/environment.yml b/modules/nf-core/sentieon/applyvarcal/environment.yml index 0af79bedcd..185d95bde8 100644 --- a/modules/nf-core/sentieon/applyvarcal/environment.yml +++ b/modules/nf-core/sentieon/applyvarcal/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_applyvarcal channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/applyvarcal/main.nf b/modules/nf-core/sentieon/applyvarcal/main.nf index 6e5e863c51..9f64f5a2f3 100644 --- a/modules/nf-core/sentieon/applyvarcal/main.nf +++ b/modules/nf-core/sentieon/applyvarcal/main.nf @@ -3,12 +3,10 @@ process SENTIEON_APPLYVARCAL { label 'process_low' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(vcf), path(vcf_tbi), path(recal), path(recal_index), path(tranches) @@ -24,38 +22,13 @@ process SENTIEON_APPLYVARCAL { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' - + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver -r ${fasta} --algo ApplyVarCal \\ -v $vcf \\ @@ -71,19 +44,8 @@ process SENTIEON_APPLYVARCAL { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - touch ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi diff --git a/modules/nf-core/sentieon/applyvarcal/meta.yml b/modules/nf-core/sentieon/applyvarcal/meta.yml index da92ce3436..e8505a2ae5 100644 --- a/modules/nf-core/sentieon/applyvarcal/meta.yml +++ b/modules/nf-core/sentieon/applyvarcal/meta.yml @@ -17,68 +17,80 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: file - description: VCF file to be recalibrated, this should be the same file as used for the first stage VariantRecalibrator. - pattern: "*.vcf" - - vcf_tbi: - type: file - description: tabix index for the input vcf file. - pattern: "*.vcf.tbi" - - recal: - type: file - description: Recalibration file produced when the input vcf was run through VariantRecalibrator in stage 1. - pattern: "*.recal" - - recal_index: - type: file - description: Index file for the recalibration file. - pattern: ".recal.idx" - - tranches: - type: file - description: Tranches file produced when the input vcf was run through VariantRecalibrator in stage 1. - pattern: ".tranches" - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - meta3: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fasta.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: file + description: VCF file to be recalibrated, this should be the same file as used + for the first stage VariantRecalibrator. + pattern: "*.vcf" + - vcf_tbi: + type: file + description: tabix index for the input vcf file. + pattern: "*.vcf.tbi" + - recal: + type: file + description: Recalibration file produced when the input vcf was run through + VariantRecalibrator in stage 1. + pattern: "*.recal" + - recal_index: + type: file + description: Index file for the recalibration file. + pattern: ".recal.idx" + - tranches: + type: file + description: Tranches file produced when the input vcf was run through VariantRecalibrator + in stage 1. + pattern: ".tranches" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - vcf: - type: file - description: compressed vcf file containing the recalibrated variants. - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - "*.vcf.gz": + type: file + description: compressed vcf file containing the recalibrated variants. + pattern: "*.vcf.gz" - tbi: - type: file - description: Index of recalibrated vcf file. - pattern: "*vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - "*.tbi": + type: file + description: Index of recalibrated vcf file. + pattern: "*vcf.gz.tbi" - versions: - type: file - description: File containing software versions. - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions. + pattern: "versions.yml" authors: - "@assp8200" maintainers: diff --git a/modules/nf-core/sentieon/bwamem/environment.yml b/modules/nf-core/sentieon/bwamem/environment.yml index f03db6f8a3..185d95bde8 100644 --- a/modules/nf-core/sentieon/bwamem/environment.yml +++ b/modules/nf-core/sentieon/bwamem/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_bwamem channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index 62693851c3..76e364deca 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -3,12 +3,10 @@ process SENTIEON_BWAMEM { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(reads) @@ -17,45 +15,22 @@ process SENTIEON_BWAMEM { tuple val(meta4), path(fasta_fai) output: - tuple val(meta), path("*.bam"), path("*.bai"), emit: bam_and_bai + tuple val(meta), path("${prefix}"), path("${prefix}.{bai,crai}"), emit: bam_and_bai path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + prefix = task.ext.prefix ?: "${meta.id}.bam" + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense + export bwt_max_mem="${(task.memory * 0.9).toGiga()}G" INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` @@ -64,7 +39,12 @@ process SENTIEON_BWAMEM { -t $task.cpus \\ \$INDEX \\ $reads \\ - | sentieon util sort -r $fasta -t $task.cpus -o ${prefix}.bam --sam2bam - + | sentieon util sort -r $fasta -t $task.cpus -o ${prefix} --sam2bam - + + # Delete *.bai file if prefix ends with .cram + if [[ "${prefix}" == *.cram ]]; then + rm -f "${prefix}.bai" + fi cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -74,21 +54,12 @@ process SENTIEON_BWAMEM { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } + prefix = task.ext.prefix ?: "${meta.id}.bam" + index = prefix.tokenize('.')[-1] == "bam" ? "bai" : "crai" - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - - touch ${prefix}.bam - touch ${prefix}.bam.bai + touch ${prefix} + touch ${prefix}.${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/sentieon/bwamem/meta.yml b/modules/nf-core/sentieon/bwamem/meta.yml index 0859a923ca..b27dd4877f 100644 --- a/modules/nf-core/sentieon/bwamem/meta.yml +++ b/modules/nf-core/sentieon/bwamem/meta.yml @@ -15,61 +15,65 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: Genome fastq files (single-end or paired-end) - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - index: - type: file - description: BWA genome index files - pattern: "*.{amb,ann,bwt,pac,sa}" - - meta3: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - meta4: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta_fai: - type: file - description: The index of the FASTA reference. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Genome fastq files (single-end or paired-end) + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta4: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta_fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file. - pattern: "*.bam" - - bai: - type: file - description: BAI file - pattern: "*.bai" + - bam_and_bai: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: BAM file with corresponding index. + pattern: "*.{bam,bai}" + - ${prefix}.{bai,crai}: + type: file + description: BAM file with corresponding index. + pattern: "*.{bam,bai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: - "@asp8200" + - "@DonFreed" diff --git a/modules/nf-core/sentieon/bwamem/tests/main.nf.test b/modules/nf-core/sentieon/bwamem/tests/main.nf.test new file mode 100644 index 0000000000..074722882c --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/main.nf.test @@ -0,0 +1,262 @@ +nextflow_process { + + name "Test Process SENTIEON_BWAMEM" + tag "modules_nfcore" + tag "modules" + tag "sentieon" + tag "bwamem" + tag "bwaindex" + tag "sentieon/bwaindex" + tag "sentieon/bwamem" + + script "../main.nf" + process "SENTIEON_BWAMEM" + + test("Single-End") { + config "./nextflow.config" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Single-End Output CRAM") { + config "./nextflow_out_cram.config" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Paired-End") { + config "./nextflow.config" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("Single-End - stub") { + config "./nextflow.config" + options "-stub" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Paired-End - stub") { + config "./nextflow.config" + options "-stub" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + +} diff --git a/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap b/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap new file mode 100644 index 0000000000..0dc67a9a5b --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap @@ -0,0 +1,187 @@ +{ + "Single-End": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,58bc2194d084cf8462a3a7f6114c303a", + "test.bam.bai:md5,4fd9b026ff2306cc292cd695e11d5628" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,58bc2194d084cf8462a3a7f6114c303a", + "test.bam.bai:md5,4fd9b026ff2306cc292cd695e11d5628" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:58:40.112926615" + }, + "Paired-End - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:59:20.476791905" + }, + "Paired-End": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,3418d864f42215d1c0c8d604d9571b0d", + "test.bam.bai:md5,be4ad85790468042f7fc01ca2e36a919" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,3418d864f42215d1c0c8d604d9571b0d", + "test.bam.bai:md5,be4ad85790468042f7fc01ca2e36a919" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:59:00.346034062" + }, + "Single-End - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:59:10.054146084" + }, + "Single-End Output CRAM": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.cram:md5,04d88bd709dc0bc27ca81a09e80d4a1b", + "test.cram.crai:md5,ac34c713fe95aa8a1fd6291bdbb76dcf" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.cram:md5,04d88bd709dc0bc27ca81a09e80d4a1b", + "test.cram.crai:md5,ac34c713fe95aa8a1fd6291bdbb76dcf" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:58:49.962693499" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/bwamem/tests/nextflow.config b/modules/nf-core/sentieon/bwamem/tests/nextflow.config new file mode 100644 index 0000000000..717fb52c7a --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/nextflow.config @@ -0,0 +1,15 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_BWAMEM' { + ext.args = "-R \"@RG\\tID:sample_lane\\tPU:lane\\tSM:patient_sample\\tLB:sample\\tDS:fasta\\tPL:seqplatform\"" + } +} diff --git a/modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config b/modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config new file mode 100644 index 0000000000..07ae63d98e --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config @@ -0,0 +1,16 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_BWAMEM' { + ext.args = "-R \"@RG\\tID:sample_lane\\tPU:lane\\tSM:patient_sample\\tLB:sample\\tDS:fasta\\tPL:seqplatform\"" + ext.prefix = { "${meta.id}.cram" } + } +} diff --git a/modules/nf-core/sentieon/bwamem/tests/tags.yml b/modules/nf-core/sentieon/bwamem/tests/tags.yml new file mode 100644 index 0000000000..fbc2bb3cc2 --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/tags.yml @@ -0,0 +1,2 @@ +sentieon/bwamem: + - "modules/nf-core/sentieon/bwamem/**" diff --git a/modules/nf-core/sentieon/dedup/environment.yml b/modules/nf-core/sentieon/dedup/environment.yml index e29cfff3e4..185d95bde8 100644 --- a/modules/nf-core/sentieon/dedup/environment.yml +++ b/modules/nf-core/sentieon/dedup/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_dedup channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf index 5f19ab56d8..f0b387f64f 100644 --- a/modules/nf-core/sentieon/dedup/main.nf +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -3,12 +3,10 @@ process SENTIEON_DEDUP { label 'process_medium' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(bam), path(bai) @@ -29,47 +27,23 @@ process SENTIEON_DEDUP { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def args3 = task.ext.args3 ?: '' def args4 = task.ext.args4 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = task.ext.suffix ?: ".cram" // The suffix should be either ".cram" or ".bam". - def metrics = task.ext.metrics ?: "${prefix}${suffix}.metrics" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}.cram" + def metrics = task.ext.metrics ?: "${prefix}.metrics" def input_list = bam.collect{"-i $it"}.join(' ') - + def prefix_basename = prefix.substring(0, prefix.lastIndexOf(".")) + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi + $sentieonLicense - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi + sentieon driver $args -t $task.cpus $input_list -r ${fasta} --algo LocusCollector $args2 --fun score_info ${prefix_basename}.score + sentieon driver $args3 -t $task.cpus $input_list -r ${fasta} --algo Dedup $args4 --score_info ${prefix_basename}.score --metrics ${metrics} ${prefix} - $fix_ld_library_path - - sentieon driver $args $input_list -r ${fasta} --algo LocusCollector $args2 --fun score_info ${prefix}.score - sentieon driver $args3 -t $task.cpus $input_list -r ${fasta} --algo Dedup $args4 --score_info ${prefix}.score --metrics ${metrics} ${prefix}${suffix} # This following tsv-file is produced in order to get a proper tsv-file with Dedup-metrics for importing in MultiQC as "custom content". # It should be removed once MultiQC has a module for displaying Dedup-metrics. head -3 ${metrics} > ${metrics}.multiqc.tsv @@ -81,25 +55,17 @@ process SENTIEON_DEDUP { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = task.ext.suffix ?: ".cram" // The suffix should be either ".cram" or ".bam". - def metrics = task.ext.metrics ?: "${prefix}${suffix}.metrics" - """ - $fix_ld_library_path + def prefix = task.ext.prefix ?: "${meta.id}.cram" + def metrics = task.ext.metrics ?: "${prefix}.metrics" + def prefix_basename = prefix.substring(0, prefix.lastIndexOf(".")) - touch "${prefix}${suffix}" - touch "${prefix}${suffix}\$(echo ${suffix} | sed 's/m\$/i/')" + """ + touch "${prefix}" + touch "${prefix}.crai" + touch "${prefix}.bai" touch "${metrics}" touch "${metrics}.multiqc.tsv" - touch "${prefix}.score" + touch "${prefix_basename}.score" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/sentieon/dedup/meta.yml b/modules/nf-core/sentieon/dedup/meta.yml index 0efbb96c22..003d74befe 100644 --- a/modules/nf-core/sentieon/dedup/meta.yml +++ b/modules/nf-core/sentieon/dedup/meta.yml @@ -1,5 +1,7 @@ name: sentieon_dedup -description: Runs the sentieon tool LocusCollector followed by Dedup. LocusCollector collects read information that is used by Dedup which in turn marks or removes duplicate reads. +description: Runs the sentieon tool LocusCollector followed by Dedup. LocusCollector + collects read information that is used by Dedup which in turn marks or removes duplicate + reads. keywords: - mem - dedup @@ -14,76 +16,116 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file. - pattern: "*.bam" - - bai: - type: file - description: BAI file - pattern: "*.bai" - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta_fai: - type: file - description: The index of the FASTA reference. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta_fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - cram: - type: file - description: CRAM file - pattern: "*.cram" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: CRAM file + pattern: "*.cram" - crai: - type: file - description: CRAM index file - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file + pattern: "*.crai" - bam: - type: file - description: BAM file. - pattern: "*.bam" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file. + pattern: "*.bam" - bai: - type: file - description: BAI file - pattern: "*.bai" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAI file + pattern: "*.bai" - score: - type: file - description: The score file indicates which reads LocusCollector finds are likely duplicates. - pattern: "*.score" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.score": + type: file + description: The score file indicates which reads LocusCollector finds are likely + duplicates. + pattern: "*.score" - metrics: - type: file - description: Output file containing Dedup metrics incl. histogram data. - pattern: "*.metrics" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: Output file containing Dedup metrics incl. histogram data. + pattern: "*.metrics" - metrics_multiqc_tsv: - type: file - description: Output tsv-file containing Dedup metrics excl. histogram data. - pattern: "*.metrics.multiqc.tsv" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.metrics.multiqc.tsv": + type: file + description: Output tsv-file containing Dedup metrics excl. histogram data. + pattern: "*.metrics.multiqc.tsv" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: diff --git a/modules/nf-core/sentieon/dedup/tests/main.nf.test b/modules/nf-core/sentieon/dedup/tests/main.nf.test new file mode 100644 index 0000000000..c842a4a00c --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/main.nf.test @@ -0,0 +1,90 @@ +nextflow_process { + + name "Test Process SENTIEON_DEDUP" + tag "modules_nfcore" + tag "modules" + tag "sentieon" + tag "dedup" + tag "sentieon/dedup" + + script "../main.nf" + process "SENTIEON_DEDUP" + + test("Test marking duplicates") { + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Test removing duplicates") { + config "./nextflow_rmdup.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Test stub") { + config "./nextflow.config" + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) ] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap b/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap new file mode 100644 index 0000000000..c1cd83ec34 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap @@ -0,0 +1,359 @@ +{ + "Test marking duplicates": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,d2993113f4614f5196fc74d489412fc4" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,4b7b2152b33c5334f9477cc3650f8c91" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,889503338dc569b24e44e5e3aec815ea" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "7": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ], + "bai": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,889503338dc569b24e44e5e3aec815ea" + ] + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,4b7b2152b33c5334f9477cc3650f8c91" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d2993113f4614f5196fc74d489412fc4" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "metrics_multiqc_tsv": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "score": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "versions": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-26T13:02:23.640202" + }, + "Test removing duplicates": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,e67398ab64430191f9d15cb8a8f425c7" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,c617398ead281c1339d78d5df0d606e9" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,a1ea729eca4732ca3a5dee946a70fbc8" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "7": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ], + "bai": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,a1ea729eca4732ca3a5dee946a70fbc8" + ] + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,c617398ead281c1339d78d5df0d606e9" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,e67398ab64430191f9d15cb8a8f425c7" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "metrics_multiqc_tsv": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "score": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "versions": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-26T13:02:33.698037" + }, + "Test stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.score:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ], + "bai": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics_multiqc_tsv": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "score": [ + [ + { + "id": "test" + }, + "test.score:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-26T13:02:41.360148" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/dedup/tests/nextflow.config b/modules/nf-core/sentieon/dedup/tests/nextflow.config new file mode 100644 index 0000000000..09a068ee62 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/nextflow.config @@ -0,0 +1,9 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} diff --git a/modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config b/modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config new file mode 100644 index 0000000000..21e7b945d2 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config @@ -0,0 +1,15 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_DEDUP' { + ext.args4 = '--rmdup' + } +} diff --git a/modules/nf-core/sentieon/dnamodelapply/environment.yml b/modules/nf-core/sentieon/dnamodelapply/environment.yml index a2f8819313..185d95bde8 100644 --- a/modules/nf-core/sentieon/dnamodelapply/environment.yml +++ b/modules/nf-core/sentieon/dnamodelapply/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_dnamodelapply channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf index 9a0c70dc22..b4b10ce4d0 100644 --- a/modules/nf-core/sentieon/dnamodelapply/main.nf +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -3,12 +3,10 @@ process SENTIEON_DNAMODELAPPLY { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(vcf), path(idx) @@ -25,38 +23,13 @@ process SENTIEON_DNAMODELAPPLY { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' - + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver \\ -t $task.cpus \\ @@ -74,20 +47,8 @@ process SENTIEON_DNAMODELAPPLY { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - """ - $fix_ld_library_path - touch ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi diff --git a/modules/nf-core/sentieon/dnamodelapply/meta.yml b/modules/nf-core/sentieon/dnamodelapply/meta.yml index 2507654577..2505aff74e 100644 --- a/modules/nf-core/sentieon/dnamodelapply/meta.yml +++ b/modules/nf-core/sentieon/dnamodelapply/meta.yml @@ -12,65 +12,74 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. `[ id:'test' ]` - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. `[ id:'test' ]` - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. `[ id:'test' ]` - - vcf: - type: file - description: INPUT VCF file - pattern: "*.{vcf,vcf.gz}" - - idx: - type: file - description: Index of the input VCF file - pattern: "*.{tbi}" - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: Index of the genome fasta file - pattern: "*.fai" - - ml_model: - type: file - description: machine learning model file - pattern: "*.model" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - vcf: + type: file + description: INPUT VCF file + pattern: "*.{vcf,vcf.gz}" + - idx: + type: file + description: Index of the input VCF file + pattern: "*.{tbi}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - ml_model: + type: file + description: machine learning model file + pattern: "*.model" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: INPUT VCF file - pattern: "*.{vcf,vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.vcf.gz": + type: file + description: INPUT VCF file + pattern: "*.{vcf,vcf.gz}" - index: - type: file - description: Index of the input VCF file - pattern: "*.{tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.vcf.gz.tbi": + type: file + description: Index of the input VCF file + pattern: "*.{tbi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/sentieon/dnascope/environment.yml b/modules/nf-core/sentieon/dnascope/environment.yml index e6da2dde3e..185d95bde8 100644 --- a/modules/nf-core/sentieon/dnascope/environment.yml +++ b/modules/nf-core/sentieon/dnascope/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_dnascope channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index 0671307ba0..63d7d23b8a 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -3,12 +3,10 @@ process SENTIEON_DNASCOPE { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(bam), path(bai), path(intervals) @@ -32,15 +30,6 @@ process SENTIEON_DNASCOPE { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' // options for the driver def args2 = task.ext.args2 ?: '' // options for the vcf generation def args3 = task.ext.args3 ?: '' // options for the gvcf generation @@ -49,8 +38,6 @@ process SENTIEON_DNASCOPE { def model_cmd = ml_model ? " --model ${ml_model}" : '' def pcr_indel_model_cmd = pcr_indel_model ? " --pcr_indel_model ${pcr_indel_model}" : '' def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' def vcf_cmd = "" def gvcf_cmd = "" def base_cmd = '--algo DNAscope ' + dbsnp_cmd + ' ' @@ -63,24 +50,11 @@ process SENTIEON_DNASCOPE { gvcf_cmd = base_cmd + args3 + ' ' + model_cmd + pcr_indel_model_cmd + ' --emit_mode gvcf ' + prefix + '.g.vcf.gz' } + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver $args -r $fasta -t $task.cpus -i $bam $interval $vcf_cmd $gvcf_cmd @@ -91,20 +65,8 @@ process SENTIEON_DNASCOPE { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - """ - $fix_ld_library_path - touch ${prefix}.unfiltered.vcf.gz touch ${prefix}.unfiltered.vcf.gz.tbi touch ${prefix}.g.vcf.gz diff --git a/modules/nf-core/sentieon/dnascope/meta.yml b/modules/nf-core/sentieon/dnascope/meta.yml index 6b61cee828..e3e0eba8c8 100644 --- a/modules/nf-core/sentieon/dnascope/meta.yml +++ b/modules/nf-core/sentieon/dnascope/meta.yml @@ -1,5 +1,6 @@ name: sentieon_dnascope -description: DNAscope algorithm performs an improved version of Haplotype variant calling. +description: DNAscope algorithm performs an improved version of Haplotype variant + calling. keywords: - dnascope - sentieon @@ -11,109 +12,127 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information. - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file. - pattern: "*.bam" - - bai: - type: file - description: BAI file - pattern: "*.bai" - - intervals: - type: file - description: bed or interval_list file containing interval in the reference that will be used in the analysis - pattern: "*.{bed,interval_list}" - - meta2: - type: map - description: | - Groovy Map containing meta information for fasta. - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing meta information for fasta index. - - fai: - type: file - description: Index of the genome fasta file - pattern: "*.fai" - - meta4: - type: map - description: | - Groovy Map containing meta information for dbsnp. - - dbsnp: - type: file - description: Single Nucleotide Polymorphism database (dbSNP) file - pattern: "*.vcf.gz" - - meta5: - type: map - description: | - Groovy Map containing meta information for dbsnp_tbi. - - dbsnp_tbi: - type: file - description: Index of the Single Nucleotide Polymorphism database (dbSNP) file - pattern: "*.vcf.gz.tbi" - - meta6: - type: map - description: | - Groovy Map containing meta information for machine learning model for Dnascope. - - ml_model: - type: file - description: machine learning model file - pattern: "*.model" - - ml_model: - type: file - description: machine learning model file - pattern: "*.model" - - pcr_indel_model: - type: string - description: | - Controls the option pcr_indel_model for Dnascope. - The possible options are "NONE" (used for PCR free samples), and "HOSTILE", "AGGRESSIVE" and "CONSERVATIVE". - See Sentieons documentation for further explanation. - - emit_vcf: - type: string - description: | - Controls the vcf output from Dnascope. - Possible options are "all", "confident" and "variant". - See Sentieons documentation for further explanation. - - emit_gvcf: - type: boolean - description: If true, the haplotyper will output a gvcf + - - meta: + type: map + description: | + Groovy Map containing sample information. + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - intervals: + type: file + description: bed or interval_list file containing interval in the reference + that will be used in the analysis + pattern: "*.{bed,interval_list}" + - - meta2: + type: map + description: | + Groovy Map containing meta information for fasta. + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing meta information for fasta index. + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing meta information for dbsnp. + - dbsnp: + type: file + description: Single Nucleotide Polymorphism database (dbSNP) file + pattern: "*.vcf.gz" + - - meta5: + type: map + description: | + Groovy Map containing meta information for dbsnp_tbi. + - dbsnp_tbi: + type: file + description: Index of the Single Nucleotide Polymorphism database (dbSNP) file + pattern: "*.vcf.gz.tbi" + - - meta6: + type: map + description: | + Groovy Map containing meta information for machine learning model for Dnascope. + - ml_model: + type: file + description: machine learning model file + pattern: "*.model" + - - pcr_indel_model: + type: string + description: | + Controls the option pcr_indel_model for Dnascope. + The possible options are "NONE" (used for PCR free samples), and "HOSTILE", "AGGRESSIVE" and "CONSERVATIVE". + See Sentieons documentation for further explanation. + - - emit_vcf: + type: string + description: | + Controls the vcf output from Dnascope. + Possible options are "all", "confident" and "variant". + See Sentieons documentation for further explanation. + - - emit_gvcf: + type: boolean + description: If true, the haplotyper will output a gvcf output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: Compressed VCF file - pattern: "*.unfiltered.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.unfiltered.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.unfiltered.vcf.gz" - vcf_tbi: - type: file - description: Index of VCF file - pattern: "*.unfiltered.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.unfiltered.vcf.gz.tbi": + type: file + description: Index of VCF file + pattern: "*.unfiltered.vcf.gz.tbi" - gvcf: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.g.vcf.gz": + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" - gvcf_tbi: - type: file - description: Index of GVCF file - pattern: "*.g.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.g.vcf.gz.tbi": + type: file + description: Index of GVCF file + pattern: "*.g.vcf.gz.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/sentieon/gvcftyper/environment.yml b/modules/nf-core/sentieon/gvcftyper/environment.yml index 732e2ca846..185d95bde8 100644 --- a/modules/nf-core/sentieon/gvcftyper/environment.yml +++ b/modules/nf-core/sentieon/gvcftyper/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_gvcftyper channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/gvcftyper/main.nf b/modules/nf-core/sentieon/gvcftyper/main.nf index 7539214507..e2e5d2434d 100644 --- a/modules/nf-core/sentieon/gvcftyper/main.nf +++ b/modules/nf-core/sentieon/gvcftyper/main.nf @@ -3,19 +3,17 @@ process SENTIEON_GVCFTYPER { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(gvcfs), path(tbis), path(intervals) - path fasta - path fai - path dbsnp - path dbsnp_tbi + tuple val(meta1), path(fasta) + tuple val(meta2), path(fai) + tuple val(meta3), path(dbsnp) + tuple val(meta4), path(dbsnp_tbi) output: tuple val(meta), path("*.vcf.gz") , emit: vcf_gz @@ -26,39 +24,14 @@ process SENTIEON_GVCFTYPER { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' def gvcfs_input = '-v ' + gvcfs.join(' -v ') def dbsnp_cmd = dbsnp ? "--dbsnp $dbsnp" : "" - + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver -r ${fasta} --algo GVCFtyper ${gvcfs_input} ${dbsnp_cmd} ${prefix}.vcf.gz @@ -69,21 +42,9 @@ process SENTIEON_GVCFTYPER { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - """ - $fix_ld_library_path - - touch ${prefix}.vcf.gz + echo "" | gzip >${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/sentieon/gvcftyper/meta.yml b/modules/nf-core/sentieon/gvcftyper/meta.yml index 5a83eb0308..f022553711 100644 --- a/modules/nf-core/sentieon/gvcftyper/meta.yml +++ b/modules/nf-core/sentieon/gvcftyper/meta.yml @@ -12,59 +12,89 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gvcfs: - type: file - description: | - gVCF(.gz) file - pattern: "*.{vcf,vcf.gz}" - - tbis: - type: file - description: | - index of gvcf file - pattern: "*.tbi" - - intervals: - type: file - description: Interval file with the genomic regions included in the library (optional) - - fasta: - type: file - description: Reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Reference fasta index file - pattern: "*.fai" - - dbsnp: - type: file - description: dbSNP VCF file - pattern: "*.vcf.gz" - - dbsnp_tbi: - type: file - description: dbSNP VCF index file - pattern: "*.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gvcfs: + type: file + description: | + gVCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - tbis: + type: file + description: | + index of gvcf file + pattern: "*.tbi" + - intervals: + type: file + description: Interval file with the genomic regions included in the library + (optional) + - - meta1: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference fasta file + pattern: "*.fasta" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: Reference fasta index file + pattern: "*.fai" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - dbsnp: + type: file + description: dbSNP VCF file + pattern: "*.vcf.gz" + - - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - dbsnp_tbi: + type: file + description: dbSNP VCF index file + pattern: "*.tbi" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Genotyped VCF file - pattern: "*.vcf.gz" - - tbi: - type: file - description: Tbi index for VCF file - pattern: "*.vcf.gz" + - vcf_gz: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: VCF file + pattern: "*.vcf.gz" + - vcf_gz_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz.tbi": + type: file + description: VCF index file + pattern: "*.vcf.gz.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: diff --git a/modules/nf-core/sentieon/gvcftyper/tests/main.nf.test b/modules/nf-core/sentieon/gvcftyper/tests/main.nf.test new file mode 100644 index 0000000000..0f66feb681 --- /dev/null +++ b/modules/nf-core/sentieon/gvcftyper/tests/main.nf.test @@ -0,0 +1,212 @@ +nextflow_process { + + name "Test Process SENTIEON_GVCFTYPER" + script "../main.nf" + process "SENTIEON_GVCFTYPER" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "sentieon" + tag "sentieon/gvcftyper" + + test("sentieon gvcftyper vcf") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics//homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true), + [] + ] + + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:], []] + input[4] = [[:], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_gz_tbi.get(0).get(1)).name, + path(process.out.vcf_gz[0][1]).vcf.variantsMD5 + ).match() + } + + ) + } + + } + + test("sentieon gvcftyper vcf.gz") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics//homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + [] + ] + + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:], []] + input[4] = [[:], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_gz_tbi.get(0).get(1)).name, + path(process.out.vcf_gz[0][1]).vcf.variantsMD5 + ).match() + } + + ) + } + + } + + test("sentieon gvcftyper dbsnp") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics//homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + [] + ] + + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true)] + input[4] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_gz_tbi.get(0).get(1)).name, + path(process.out.vcf_gz[0][1]).vcf.variantsMD5 + ).match() + } + + ) + } + + } + + test("sentieon gvcftyper intervals") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics//homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:], []] + input[4] = [[:], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_gz_tbi.get(0).get(1)).name, + path(process.out.vcf_gz[0][1]).vcf.variantsMD5 + ).match() + } + + ) + } + + } + + test("sentieon gvcftyper dbsnp intervals") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics//homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true)] + input[4] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_gz_tbi.get(0).get(1)).name, + path(process.out.vcf_gz[0][1]).vcf.variantsMD5 + ).match() + } + + ) + } + + } + + test("sentieon gvcftyper - stub") { + + options "-stub" + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [] // no intervals + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + """ + } + } + + then { + + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + + } + } + +} diff --git a/modules/nf-core/sentieon/gvcftyper/tests/main.nf.test.snap b/modules/nf-core/sentieon/gvcftyper/tests/main.nf.test.snap new file mode 100644 index 0000000000..5e7e40fb6b --- /dev/null +++ b/modules/nf-core/sentieon/gvcftyper/tests/main.nf.test.snap @@ -0,0 +1,121 @@ +{ + "sentieon gvcftyper dbsnp": { + "content": [ + [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ], + "test.genotyped.vcf.gz.tbi", + "21606383c760bf676d4c1f747b97d118" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T14:12:47.508154" + }, + "sentieon gvcftyper dbsnp intervals": { + "content": [ + [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ], + "test.genotyped.vcf.gz.tbi", + "21606383c760bf676d4c1f747b97d118" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T14:13:05.636172" + }, + "sentieon gvcftyper vcf.gz": { + "content": [ + [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ], + "test.genotyped.vcf.gz.tbi", + "d13216836f1452e200b215b796606671" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T14:12:38.720056" + }, + "sentieon gvcftyper intervals": { + "content": [ + [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ], + "test.genotyped.vcf.gz.tbi", + "d13216836f1452e200b215b796606671" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T14:12:56.700687" + }, + "sentieon gvcftyper - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.genotyped.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.genotyped.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ], + "vcf_gz": [ + [ + { + "id": "test" + }, + "test.genotyped.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "vcf_gz_tbi": [ + [ + { + "id": "test" + }, + "test.genotyped.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T14:03:46.379477" + }, + "sentieon gvcftyper vcf": { + "content": [ + [ + "versions.yml:md5,bc9039ece9061340830a80ac2b171f3b" + ], + "test.genotyped.vcf.gz.tbi", + "d13216836f1452e200b215b796606671" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T14:12:29.24482" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/gvcftyper/tests/nextflow.config b/modules/nf-core/sentieon/gvcftyper/tests/nextflow.config new file mode 100644 index 0000000000..1561a7c4d2 --- /dev/null +++ b/modules/nf-core/sentieon/gvcftyper/tests/nextflow.config @@ -0,0 +1,15 @@ +env { + // NOTE This is how pipeline users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how pipepline users will test out Sentieon with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: SENTIEON_GVCFTYPER { + ext.prefix = { "${meta.id}.genotyped" } + } +} diff --git a/modules/nf-core/sentieon/haplotyper/environment.yml b/modules/nf-core/sentieon/haplotyper/environment.yml index 89108f8e8b..185d95bde8 100644 --- a/modules/nf-core/sentieon/haplotyper/environment.yml +++ b/modules/nf-core/sentieon/haplotyper/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_haplotyper channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/haplotyper/main.nf b/modules/nf-core/sentieon/haplotyper/main.nf index 16eb775744..33122d86b2 100644 --- a/modules/nf-core/sentieon/haplotyper/main.nf +++ b/modules/nf-core/sentieon/haplotyper/main.nf @@ -3,19 +3,17 @@ process SENTIEON_HAPLOTYPER { label 'process_medium' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: - tuple val(meta), path(input), path(input_index), path(intervals) - path fasta - path fai - path dbsnp - path dbsnp_tbi + tuple val(meta), path(input), path(input_index), path(intervals), path(recal_table) + tuple val(meta1), path(fasta) + tuple val(meta2), path(fai) + tuple val(meta3), path(dbsnp) + tuple val(meta4), path(dbsnp_tbi) val(emit_vcf) val(emit_gvcf) @@ -30,55 +28,46 @@ process SENTIEON_HAPLOTYPER { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' // options for the driver def args2 = task.ext.args2 ?: '' // options for the vcf generation def args3 = task.ext.args3 ?: '' // options for the gvcf generation def prefix = task.ext.prefix ?: "${meta.id}" - def dbsnp_command = dbsnp ? "-d $dbsnp " : "" - def interval_command = intervals ? "--interval $intervals" : "" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' - def vcf_cmd = "" - def gvcf_cmd = "" + def input_list = input instanceof List ? input.collect{"-i $it"}.join(' ') : "-i $input" + def dbsnp_command = dbsnp ? "-d $dbsnp " : "" + def interval_command = intervals ? "--interval $intervals" : "" + def recal_table_command = recal_table ? "-q $recal_table" : "" def base_cmd = '--algo Haplotyper ' + dbsnp_command - if (emit_vcf) { // emit_vcf can be the empty string, 'variant', 'confident' or 'all' but NOT 'gvcf' - vcf_cmd = base_cmd + args2 + ' --emit_mode ' + emit_vcf + ' ' + prefix + '.unfiltered.vcf.gz' - } - - if (emit_gvcf) { // emit_gvcf can be either true or false - gvcf_cmd = base_cmd + args3 + ' --emit_mode gvcf ' + prefix + '.g.vcf.gz' - } - - """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi + // The Sentieon --algo Haplotyper can create a VCF or gVCF but not both + // Luckily, we can run it twice while reading the BAM once, therefore we construct the two separate commands + // and run them twice while using the sentieon driver once. This allows us to create both types of VCF indels + // one process - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi + // Create VCF command to export a VCF + def vcf_cmd = emit_vcf ? + base_cmd + args2 + ' --emit_mode ' + emit_vcf + ' ' + prefix + '.unfiltered.vcf.gz' : + "" - $fix_ld_library_path + // Create a gVCF command to export a gVCF + def gvcf_cmd = emit_gvcf ? + gvcf_cmd = base_cmd + args3 + ' --emit_mode gvcf ' + prefix + '.g.vcf.gz' : + "" - sentieon driver $args -r $fasta -t $task.cpus -i $input $interval_command $vcf_cmd $gvcf_cmd + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" + """ + $sentieonLicense + + sentieon driver \\ + $args \\ + -r $fasta \\ + -t $task.cpus \\ + $interval_command \\ + ${input_list} \\ + $recal_table_command \\ + $vcf_cmd \\ + $gvcf_cmd cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -87,22 +76,11 @@ process SENTIEON_HAPLOTYPER { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - - touch ${prefix}.unfiltered.vcf.gz + echo "" | gzip > ${prefix}.unfiltered.vcf.gz touch ${prefix}.unfiltered.vcf.gz.tbi - touch ${prefix}.g.vcf.gz + echo "" | gzip > ${prefix}.g.vcf.gz touch ${prefix}.g.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/sentieon/haplotyper/meta.yml b/modules/nf-core/sentieon/haplotyper/meta.yml index c248db3fca..ee0e6152f0 100644 --- a/modules/nf-core/sentieon/haplotyper/meta.yml +++ b/modules/nf-core/sentieon/haplotyper/meta.yml @@ -11,73 +11,117 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: The index of the FASTA reference. - pattern: "*.fai" - - dbsnp: - type: file - description: VCF file containing known sites (optional) - - dbsnp_tbi: - type: file - description: VCF index of dbsnp (optional) - - emit_vcf: - type: string - description: | - Controls the vcf output from the haplotyper. - If emit_vcf is set to "all" then the haplotyper will output a vcf generated by the haplotyper in emit-mode "all". - If emit_vcf is set to "confident" then the haplotyper will output a vcf generated by the haplotyper in emit-mode "confident". - If emit_vcf is set to "variant" then the haplotyper will output a vcf generated by the haplotyper in emit_mode "confident". - - emit_gvcf: - type: boolean - description: If true, the haplotyper will output a gvcf + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - recal_table: + type: file + description: Recalibration table from sentieon/qualcal (optional) + - - meta1: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - dbsnp: + type: file + description: VCF file containing known sites (optional) + - - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - dbsnp_tbi: + type: file + description: VCF index of dbsnp (optional) + - - emit_vcf: + type: string + description: | + Controls the vcf output from the haplotyper. + If emit_vcf is set to "all" then the haplotyper will output a vcf generated by the haplotyper in emit-mode "all". + If emit_vcf is set to "confident" then the haplotyper will output a vcf generated by the haplotyper in emit-mode "confident". + If emit_vcf is set to "variant" then the haplotyper will output a vcf generated by the haplotyper in emit_mode "confident". + - - emit_gvcf: + type: boolean + description: If true, the haplotyper will output a gvcf output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: Compressed VCF file - pattern: "*.unfiltered.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.unfiltered.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.unfiltered.vcf.gz" - vcf_tbi: - type: file - description: Index of VCF file - pattern: "*.unfiltered.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.unfiltered.vcf.gz.tbi": + type: file + description: Index of VCF file + pattern: "*.unfiltered.vcf.gz.tbi" - gvcf: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.g.vcf.gz": + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" - gvcf_tbi: - type: file - description: Index of GVCF file - pattern: "*.g.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.g.vcf.gz.tbi": + type: file + description: Index of GVCF file + pattern: "*.g.vcf.gz.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: diff --git a/modules/nf-core/sentieon/haplotyper/tests/main.nf.test b/modules/nf-core/sentieon/haplotyper/tests/main.nf.test new file mode 100644 index 0000000000..c06ed17597 --- /dev/null +++ b/modules/nf-core/sentieon/haplotyper/tests/main.nf.test @@ -0,0 +1,327 @@ +nextflow_process { + + name "Test Process SENTIEON_HAPLOTYPER" + script "../main.nf" + process "SENTIEON_HAPLOTYPER" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "sentieon" + tag "sentieon/haplotyper" + tag "sentieon/qualcal" + + test("Sentieon Haplotyper VCF") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [], // no intervals + [] // no recal table + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = 'variant' + input[6] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_tbi.get(0).get(1)).name, + path(process.out.vcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + + } + + test("Sentieon Haplotyper GVCF") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [], // no intervals + [] // no recal table + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = '' + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.gvcf_tbi.get(0).get(1)).name, + path(process.out.gvcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + + } + + test("Sentieon Haplotyper BOTH") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [], // no intervals + [] // no recal table + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = 'variant' + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.gvcf_tbi.get(0).get(1)).name, + path(process.out.gvcf[0][1]).vcf.variantsMD5, + file(process.out.vcf_tbi.get(0).get(1)).name, + path(process.out.vcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + + } + + test("Sentieon Haplotyper Intervals BOTH") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true), + [] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = 'variant' + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.gvcf_tbi.get(0).get(1)).name, + path(process.out.gvcf[0][1]).vcf.variantsMD5, + file(process.out.vcf_tbi.get(0).get(1)).name, + path(process.out.vcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + + } + + test("Sentieon Haplotyper DBSNP BOTH") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true), + [] + ] + input[1] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true)] + input[4] = [[id: 'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists: true)] + input[5] = 'variant' + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.gvcf_tbi.get(0).get(1)).name, + path(process.out.gvcf[0][1]).vcf.variantsMD5, + file(process.out.vcf_tbi.get(0).get(1)).name, + path(process.out.vcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + } + + test("Sentieon Haplotyper Recalibration") { + + setup { + run("SENTIEON_QUALCAL") { + script "../../qualcal/main.nf" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + input[1] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + + input[3] = [ [ id:'knownSites' ],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true) ] + input[4] = [ [ id:'knownSites' ],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi', checkIfExists: true) ] + input[5] = [[:],[]] + input[6] = false + """ + } + } + } + + when { + process { + """ + recal_table = SENTIEON_QUALCAL.out.table + bam = Channel.of([ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [] // no intervals + + ]) + input[0] = bam.join(recal_table) + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = 'variant' + input[6] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_tbi.get(0).get(1)).name, + path(process.out.vcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + + } + + test("Sentieon Haplotyper multiple CRAMs") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true), + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam.bai', checkIfExists: true), + ], + [], // no intervals + [] // no recal table + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = 'variant' + input[6] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.vcf_tbi.get(0).get(1)).name, + path(process.out.vcf[0][1]).vcf.variantsMD5 + ).match() + } + ) + } + + } + + test("Sentieon Haplotyper - stub") { + + options "-stub" + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [], // no intervals + [] // no recal table + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = 'variant' + input[6] = true + """ + } + } + + then { + + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + + } + } + +} diff --git a/modules/nf-core/sentieon/haplotyper/tests/main.nf.test.snap b/modules/nf-core/sentieon/haplotyper/tests/main.nf.test.snap new file mode 100644 index 0000000000..5b77a02f5e --- /dev/null +++ b/modules/nf-core/sentieon/haplotyper/tests/main.nf.test.snap @@ -0,0 +1,187 @@ +{ + "Sentieon Haplotyper VCF": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.unfiltered.vcf.gz.tbi", + "cea0045051da7877b38a1e25df812a91" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T10:16:51.711057" + }, + "Sentieon Haplotyper Recalibration": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.unfiltered.vcf.gz.tbi", + "10faa3b669c49826098e09784d8a4716" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T15:21:57.012186" + }, + "Sentieon Haplotyper GVCF": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.g.vcf.gz.tbi", + "338fc3c37b208d6595948576833eb665" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T10:17:01.797501" + }, + "Sentieon Haplotyper BOTH": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.g.vcf.gz.tbi", + "338fc3c37b208d6595948576833eb665", + "test.unfiltered.vcf.gz.tbi", + "cea0045051da7877b38a1e25df812a91" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T10:17:12.021226" + }, + "Sentieon Haplotyper DBSNP BOTH": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.g.vcf.gz.tbi", + "228556b7921205f023fec51098feeb97", + "test.unfiltered.vcf.gz.tbi", + "cc1f3d4bd615f3640e7fd103cc39d2f8" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T10:30:48.065511" + }, + "Sentieon Haplotyper Intervals BOTH": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.g.vcf.gz.tbi", + "338fc3c37b208d6595948576833eb665", + "test.unfiltered.vcf.gz.tbi", + "cea0045051da7877b38a1e25df812a91" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T10:17:22.554336" + }, + "Sentieon Haplotyper - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.unfiltered.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.unfiltered.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "gvcf": [ + [ + { + "id": "test" + }, + "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test" + }, + "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.unfiltered.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test" + }, + "test.unfiltered.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-31T10:47:33.117516" + }, + "Sentieon Haplotyper multiple CRAMs": { + "content": [ + [ + "versions.yml:md5,b58c15c81619894cdbab1f2edf694190" + ], + "test.unfiltered.vcf.gz.tbi", + "b5d6e09e336438e38f7bf5531799e3a" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-13T17:04:30.67684393" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/haplotyper/tests/nextflow.config b/modules/nf-core/sentieon/haplotyper/tests/nextflow.config new file mode 100644 index 0000000000..78f19cfb26 --- /dev/null +++ b/modules/nf-core/sentieon/haplotyper/tests/nextflow.config @@ -0,0 +1,16 @@ +env { + // NOTE This is how pipeline users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how pipeline users will test out Sentieon with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_HAPLOTYPER' { + ext.args2 = "--genotype_model multinomial" + ext.args3 = "--genotype_model multinomial" + } +} diff --git a/modules/nf-core/sentieon/haplotyper/tests/tags.yml b/modules/nf-core/sentieon/haplotyper/tests/tags.yml new file mode 100644 index 0000000000..3178c146c0 --- /dev/null +++ b/modules/nf-core/sentieon/haplotyper/tests/tags.yml @@ -0,0 +1,2 @@ +sentieon/haplotyper: + - "modules/nf-core/sentieon/haplotyper/**" diff --git a/modules/nf-core/sentieon/varcal/environment.yml b/modules/nf-core/sentieon/varcal/environment.yml index 481da2ce84..185d95bde8 100644 --- a/modules/nf-core/sentieon/varcal/environment.yml +++ b/modules/nf-core/sentieon/varcal/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_varcal channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/varcal/main.nf b/modules/nf-core/sentieon/varcal/main.nf index aa8847f839..7c85c12102 100644 --- a/modules/nf-core/sentieon/varcal/main.nf +++ b/modules/nf-core/sentieon/varcal/main.nf @@ -3,12 +3,10 @@ process SENTIEON_VARCAL { label 'process_low' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(vcf), path(tbi) // input vcf and tbi of variants to recalibrate @@ -29,15 +27,6 @@ process SENTIEON_VARCAL { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def reference_command = fasta ? "--reference $fasta " : '' @@ -56,28 +45,11 @@ process SENTIEON_VARCAL { labels_command += "--resource ${items[1]} --resource_param ${items[0]} " } } - - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' - + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver -r ${fasta} --algo VarCal \\ -v $vcf \\ @@ -93,19 +65,8 @@ process SENTIEON_VARCAL { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - touch ${prefix}.recal touch ${prefix}.idx touch ${prefix}.tranches diff --git a/modules/nf-core/sentieon/varcal/meta.yml b/modules/nf-core/sentieon/varcal/meta.yml index cad7ee106f..4661dc92d8 100644 --- a/modules/nf-core/sentieon/varcal/meta.yml +++ b/modules/nf-core/sentieon/varcal/meta.yml @@ -14,60 +14,87 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - vcf: - type: file - description: input vcf file containing the variants to be recalibrated - pattern: "*.vcf.gz" - - tbi: - type: file - description: tbi file matching with -vcf - pattern: "*.vcf.gz.tbi" - - resource_vcf: - type: file - description: all resource vcf files that are used with the corresponding '--resource' label - pattern: "*.vcf.gz" - - resource_tbi: - type: file - description: all resource tbi files that are used with the corresponding '--resource' label - pattern: "*.vcf.gz.tbi" - - labels: - type: string - description: necessary arguments for Sentieon's VarCal. Specified to directly match the resources provided. More information can be found at https://support.sentieon.com/manual/usages/general/#varcal-algorithm - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: input vcf file containing the variants to be recalibrated + pattern: "*.vcf.gz" + - tbi: + type: file + description: tbi file matching with -vcf + pattern: "*.vcf.gz.tbi" + - - resource_vcf: + type: file + description: all resource vcf files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz" + - - resource_tbi: + type: file + description: all resource tbi files that are used with the corresponding '--resource' + label + pattern: "*.vcf.gz.tbi" + - - labels: + type: string + description: necessary arguments for Sentieon's VarCal. Specified to directly + match the resources provided. More information can be found at https://support.sentieon.com/manual/usages/general/#varcal-algorithm + - - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" output: - recal: - type: file - description: Output recal file used by ApplyVQSR - pattern: "*.recal" + - meta: + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" + - "*.recal": + type: file + description: Output recal file used by ApplyVQSR + pattern: "*.recal" - idx: - type: file - description: Index file for the recal output file - pattern: "*.idx" + - meta: + type: file + description: Index file for the recal output file + pattern: "*.idx" + - "*.idx": + type: file + description: Index file for the recal output file + pattern: "*.idx" - tranches: - type: file - description: Output tranches file used by ApplyVQSR - pattern: "*.tranches" + - meta: + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" + - "*.tranches": + type: file + description: Output tranches file used by ApplyVQSR + pattern: "*.tranches" - plots: - type: file - description: Optional output rscript file to aid in visualization of the input data and learned model. - pattern: "*plots.R" - - version: - type: file - description: File containing software versions - pattern: "*.versions.yml" + - meta: + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - "*plots.R": + type: file + description: Optional output rscript file to aid in visualization of the input + data and learned model. + pattern: "*plots.R" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: diff --git a/modules/nf-core/snpeff/download/environment.yml b/modules/nf-core/snpeff/download/environment.yml index 62f3d5aad6..f2ad925161 100644 --- a/modules/nf-core/snpeff/download/environment.yml +++ b/modules/nf-core/snpeff/download/environment.yml @@ -1,7 +1,5 @@ -name: snpeff_download channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::snpeff=5.1 diff --git a/modules/nf-core/snpeff/download/main.nf b/modules/nf-core/snpeff/download/main.nf index f1fc4cc395..e42259337d 100644 --- a/modules/nf-core/snpeff/download/main.nf +++ b/modules/nf-core/snpeff/download/main.nf @@ -8,7 +8,7 @@ process SNPEFF_DOWNLOAD { 'biocontainers/snpeff:5.1--hdfd78af_2' }" input: - tuple val(meta), val(genome), val(cache_version) + tuple val(meta), val(snpeff_db) output: tuple val(meta), path('snpeff_cache'), emit: cache @@ -28,7 +28,7 @@ process SNPEFF_DOWNLOAD { """ snpEff \\ -Xmx${avail_mem}M \\ - download ${genome}.${cache_version} \\ + download ${snpeff_db} \\ -dataDir \${PWD}/snpeff_cache \\ ${args} @@ -41,7 +41,10 @@ process SNPEFF_DOWNLOAD { stub: """ - mkdir ${genome}.${cache_version} + mkdir -p snpeff_cache/${snpeff_db} + + touch snpeff_cache/${snpeff_db}/sequence.I.bin + touch snpeff_cache/${snpeff_db}/sequence.bin cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/snpeff/download/meta.yml b/modules/nf-core/snpeff/download/meta.yml index f367c69664..a3211fc7c9 100644 --- a/modules/nf-core/snpeff/download/meta.yml +++ b/modules/nf-core/snpeff/download/meta.yml @@ -14,29 +14,35 @@ tools: homepage: https://pcingola.github.io/SnpEff/ documentation: https://pcingola.github.io/SnpEff/se_introduction/ licence: ["MIT"] + identifier: biotools:snpeff input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - vcf to annotate - - db: - type: string - description: | - which db to annotate with + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genome: + type: file + description: Reference genome in FASTA format + pattern: "*.{fasta,fna,fa}" + - cache_version: + type: string + description: Version of the snpEff cache to download output: - cache: - type: file - description: | - snpEff cache + - meta: + type: file + description: | + snpEff cache + - snpeff_cache: + type: file + description: | + snpEff cache - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/snpeff/download/tests/main.nf.test b/modules/nf-core/snpeff/download/tests/main.nf.test new file mode 100644 index 0000000000..ef547c6f2e --- /dev/null +++ b/modules/nf-core/snpeff/download/tests/main.nf.test @@ -0,0 +1,51 @@ + +nextflow_process { + + name "Test Process SNPEFF_DOWNLOAD" + script "../main.nf" + process "SNPEFF_DOWNLOAD" + + tag "modules" + tag "modules_nfcore" + tag "snpeff" + tag "snpeff/download" + + test("test-snpeff-download") { + + when { + process { + """ + input[0] = [ [ id:"WBcel235.105" ], "WBcel235.105" ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-snpeff-download-stub") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:"WBcel235.105" ], "WBcel235.105" ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/snpeff/download/tests/main.nf.test.snap b/modules/nf-core/snpeff/download/tests/main.nf.test.snap new file mode 100644 index 0000000000..5bccdd8ad3 --- /dev/null +++ b/modules/nf-core/snpeff/download/tests/main.nf.test.snap @@ -0,0 +1,100 @@ +{ + "test-snpeff-download-stub": { + "content": [ + { + "0": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "sequence.bin:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ], + "cache": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "sequence.bin:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-19T12:48:45.183665736" + }, + "test-snpeff-download": { + "content": [ + { + "0": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,2fd1694bd91cf7952cbad8cfed161e53", + "sequence.II.bin:md5,bacedbdea89508e108223767fa260a4c", + "sequence.III.bin:md5,444118a9fb9d0a03c37e86094d8e52a9", + "sequence.IV.bin:md5,ff756628faa0b71cd65495668c3d82b5", + "sequence.V.bin:md5,d6ad5476162ac45829f719dd4ee3f4e7", + "sequence.X.bin:md5,b79bec6cc8f96b8373dac56bab5d0a6c", + "sequence.bin:md5,ec2bc2ae81755ab90fcf1848bc7ce41f", + "snpEffectPredictor.bin:md5,1d99251d0405f0a42913ed8b5b2c2fa7" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ], + "cache": [ + [ + { + "id": "WBcel235.105" + }, + [ + [ + "sequence.I.bin:md5,2fd1694bd91cf7952cbad8cfed161e53", + "sequence.II.bin:md5,bacedbdea89508e108223767fa260a4c", + "sequence.III.bin:md5,444118a9fb9d0a03c37e86094d8e52a9", + "sequence.IV.bin:md5,ff756628faa0b71cd65495668c3d82b5", + "sequence.V.bin:md5,d6ad5476162ac45829f719dd4ee3f4e7", + "sequence.X.bin:md5,b79bec6cc8f96b8373dac56bab5d0a6c", + "sequence.bin:md5,ec2bc2ae81755ab90fcf1848bc7ce41f", + "snpEffectPredictor.bin:md5,1d99251d0405f0a42913ed8b5b2c2fa7" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,5fc7ed9f548eccf5fac9fdefc12ef56e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T14:27:47.123555" + } +} \ No newline at end of file diff --git a/modules/nf-core/snpeff/snpeff/environment.yml b/modules/nf-core/snpeff/snpeff/environment.yml index b492e6a88e..f2ad925161 100644 --- a/modules/nf-core/snpeff/snpeff/environment.yml +++ b/modules/nf-core/snpeff/snpeff/environment.yml @@ -1,7 +1,5 @@ -name: snpeff_snpeff channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::snpeff=5.1 diff --git a/modules/nf-core/snpeff/snpeff/meta.yml b/modules/nf-core/snpeff/snpeff/meta.yml index 7559c3de08..ef3d495ae7 100644 --- a/modules/nf-core/snpeff/snpeff/meta.yml +++ b/modules/nf-core/snpeff/snpeff/meta.yml @@ -14,46 +14,76 @@ tools: homepage: https://pcingola.github.io/SnpEff/ documentation: https://pcingola.github.io/SnpEff/se_introduction/ licence: ["MIT"] + identifier: biotools:snpeff input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - vcf to annotate - - db: - type: string - description: | - which db to annotate with - - cache: - type: file - description: | - path to snpEff cache (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - - db: + type: string + description: | + which db to annotate with + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cache: + type: file + description: | + path to snpEff cache (optional) output: - vcf: - type: file - description: | - annotated vcf - pattern: "*.ann.vcf" + - meta: + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - "*.ann.vcf": + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" - report: - type: file - description: snpEff report csv file - pattern: "*.csv" + - meta: + type: file + description: snpEff report csv file + pattern: "*.csv" + - "*.csv": + type: file + description: snpEff report csv file + pattern: "*.csv" - summary_html: - type: file - description: snpEff summary statistics in html file - pattern: "*.html" + - meta: + type: file + description: snpEff summary statistics in html file + pattern: "*.html" + - "*.html": + type: file + description: snpEff summary statistics in html file + pattern: "*.html" - genes_txt: - type: file - description: txt (tab separated) file having counts of the number of variants affecting each transcript and gene - pattern: "*.genes.txt" + - meta: + type: file + description: txt (tab separated) file having counts of the number of variants + affecting each transcript and gene + pattern: "*.genes.txt" + - "*.genes.txt": + type: file + description: txt (tab separated) file having counts of the number of variants + affecting each transcript and gene + pattern: "*.genes.txt" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/snpeff/snpeff/tests/main.nf.test b/modules/nf-core/snpeff/snpeff/tests/main.nf.test index dd37f275ad..2be0b7d72c 100644 --- a/modules/nf-core/snpeff/snpeff/tests/main.nf.test +++ b/modules/nf-core/snpeff/snpeff/tests/main.nf.test @@ -6,6 +6,7 @@ nextflow_process { config "./nextflow.config" tag "modules" tag "modules_nfcore" + tag "modules_snpeff" tag "snpeff" tag "snpeff/download" tag "snpeff/snpeff" @@ -17,7 +18,7 @@ nextflow_process { script "../../download/main.nf" process { """ - input[0] = Channel.of([[id:params.snpeff_genome + '.' + params.snpeff_cache_version], params.snpeff_genome, params.snpeff_cache_version]) + input[0] = Channel.of([[id:params.snpeff_db], params.snpeff_db]) """ } } @@ -30,7 +31,7 @@ nextflow_process { [ id:'test' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ]) - input[1] = params.snpeff_genome + '.' + params.snpeff_cache_version + input[1] = params.snpeff_db input[2] = SNPEFF_DOWNLOAD.out.cache """ } diff --git a/modules/nf-core/snpeff/snpeff/tests/nextflow.config b/modules/nf-core/snpeff/snpeff/tests/nextflow.config index d31ebf6b7c..a950a0475d 100644 --- a/modules/nf-core/snpeff/snpeff/tests/nextflow.config +++ b/modules/nf-core/snpeff/snpeff/tests/nextflow.config @@ -1,4 +1,3 @@ params { - snpeff_cache_version = "105" - snpeff_genome = "WBcel235" + snpeff_db = "WBcel235.105" } diff --git a/modules/nf-core/spring/decompress/environment.yml b/modules/nf-core/spring/decompress/environment.yml index d960ee714a..abeb16b095 100644 --- a/modules/nf-core/spring/decompress/environment.yml +++ b/modules/nf-core/spring/decompress/environment.yml @@ -1,7 +1,5 @@ -name: spring_decompress channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::spring=1.1.1 diff --git a/modules/nf-core/spring/decompress/meta.yml b/modules/nf-core/spring/decompress/meta.yml index a3449b4fb3..72b72b75da 100644 --- a/modules/nf-core/spring/decompress/meta.yml +++ b/modules/nf-core/spring/decompress/meta.yml @@ -6,41 +6,45 @@ keywords: - lossless tools: - "spring": - description: "SPRING is a compression tool for Fastq files (containing up to 4.29 Billion reads)" + description: "SPRING is a compression tool for Fastq files (containing up to 4.29 + Billion reads)" homepage: "https://github.com/shubhamchandak94/Spring" documentation: "https://github.com/shubhamchandak94/Spring/blob/master/README.md" tool_dev_url: "https://github.com/shubhamchandak94/Spring" doi: "10.1093/bioinformatics/bty1015" licence: ["Free for non-commercial use"] + identifier: biotools:spring input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - spring: - type: file - description: Spring file to decompress. - pattern: "*.{spring}" - - write_one_fastq_gz: - type: boolean - description: | - Controls whether spring should write one fastq.gz file with reads from both directions or two fastq.gz files with reads from distinct directions - pattern: "true or false" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - spring: + type: file + description: Spring file to decompress. + pattern: "*.{spring}" + - - write_one_fastq_gz: + type: boolean + description: | + Controls whether spring should write one fastq.gz file with reads from both directions or two fastq.gz files with reads from distinct directions + pattern: "true or false" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - fastq: - type: file - description: Decompressed FASTQ file(s). - pattern: "*.{fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fastq.gz": + type: file + description: Decompressed FASTQ file(s). + pattern: "*.{fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@xec-cm" maintainers: diff --git a/modules/nf-core/spring/decompress/test/main.nf.test b/modules/nf-core/spring/decompress/test/main.nf.test new file mode 100644 index 0000000000..550c6746b8 --- /dev/null +++ b/modules/nf-core/spring/decompress/test/main.nf.test @@ -0,0 +1,78 @@ +nextflow_process { + + name "Test Process SPRING_DECOMPRESS" + tag "modules_nfcore" + tag "modules" + tag "spring" + tag "spring/decompress" + script "../main.nf" + process "SPRING_DECOMPRESS" + + test("Write-One-File") { + + setup { + run("SPRING_COMPRESS") { + script "../../compress/main.nf" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + '/genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + [] + ] + """ + } + } + } + + when { + process { + """ + input[0] = SPRING_COMPRESS.out.spring + input[1] = true // write_one_fastq_gz + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("Write-Two-Files") { + + setup { + run("SPRING_COMPRESS") { + script "../../compress/main.nf" + process { + """ + input[0] = [ + [ id:'test2' ], // meta map + file(params.modules_testdata_base_path + '/genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + ] + """ + } + } + } + + when { + process { + """ + input[0] = SPRING_COMPRESS.out.spring + input[1] = false // write_one_fastq_gz + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/spring/decompress/test/main.nf.test.snap b/modules/nf-core/spring/decompress/test/main.nf.test.snap new file mode 100644 index 0000000000..14a11d2c41 --- /dev/null +++ b/modules/nf-core/spring/decompress/test/main.nf.test.snap @@ -0,0 +1,74 @@ +{ + "Write-Two-Files": { + "content": [ + { + "0": [ + [ + { + "id": "test2" + }, + [ + "test2_R1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec", + "test2_R2.fastq.gz:md5,2ebae722295ea66d84075a3b042e2b42" + ] + ] + ], + "1": [ + "versions.yml:md5,4711df5941f1464e3693d24dd29c705b" + ], + "fastq": [ + [ + { + "id": "test2" + }, + [ + "test2_R1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec", + "test2_R2.fastq.gz:md5,2ebae722295ea66d84075a3b042e2b42" + ] + ] + ], + "versions": [ + "versions.yml:md5,4711df5941f1464e3693d24dd29c705b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T13:41:46.090761471" + }, + "Write-One-File": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,4711df5941f1464e3693d24dd29c705b" + ], + "fastq": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,4711df5941f1464e3693d24dd29c705b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T13:02:07.466039653" + } +} \ No newline at end of file diff --git a/modules/nf-core/spring/decompress/test/nextflow.config b/modules/nf-core/spring/decompress/test/nextflow.config new file mode 100644 index 0000000000..50f50a7a35 --- /dev/null +++ b/modules/nf-core/spring/decompress/test/nextflow.config @@ -0,0 +1,5 @@ +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + +} \ No newline at end of file diff --git a/modules/nf-core/spring/decompress/test/tags.yml b/modules/nf-core/spring/decompress/test/tags.yml new file mode 100644 index 0000000000..1fe70aec91 --- /dev/null +++ b/modules/nf-core/spring/decompress/test/tags.yml @@ -0,0 +1,3 @@ +spring/decompress: + - modules/nf-core/spring/compress/** + - modules/nf-core/spring/decompress/** diff --git a/modules/nf-core/strelka/germline/environment.yml b/modules/nf-core/strelka/germline/environment.yml index 23bd165b21..052c6baa5f 100644 --- a/modules/nf-core/strelka/germline/environment.yml +++ b/modules/nf-core/strelka/germline/environment.yml @@ -1,7 +1,5 @@ -name: strelka_germline channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::strelka=2.9.10 diff --git a/modules/nf-core/strelka/germline/meta.yml b/modules/nf-core/strelka/germline/meta.yml index 9a597ef01f..5536dd8a56 100644 --- a/modules/nf-core/strelka/germline/meta.yml +++ b/modules/nf-core/strelka/germline/meta.yml @@ -1,5 +1,6 @@ name: strelka_germline -description: Strelka2 is a fast and accurate small variant caller optimized for analysis of germline variation +description: Strelka2 is a fast and accurate small variant caller optimized for analysis + of germline variation keywords: - variantcalling - germline @@ -8,68 +9,90 @@ keywords: - variants tools: - strelka: - description: Strelka calls somatic and germline small variants from mapped sequencing reads + description: Strelka calls somatic and germline small variants from mapped sequencing + reads homepage: https://github.com/Illumina/strelka documentation: https://github.com/Illumina/strelka/blob/v2.9.x/docs/userGuide/README.md tool_dev_url: https://github.com/Illumina/strelka doi: 10.1038/s41592-018-0051-x licence: ["GPL v3"] + identifier: biotools:strelka input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAM/CRAI index file - pattern: "*.{bai,crai}" - - fasta: - type: file - description: Genome reference FASTA file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: Genome reference FASTA index file - pattern: "*.{fa.fai,fasta.fai}" - - target_bed: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - target_bed_index: - type: file - description: Index for BED file containing target regions for variant calling - pattern: "*.{bed.tbi}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAM/CRAI index file + pattern: "*.{bai,crai}" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_index: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" + - - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - - fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - vcf: - type: file - description: gzipped germline variant file - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - "*variants.vcf.gz": + type: file + description: gzipped germline variant file + pattern: "*.{vcf.gz}" - vcf_tbi: - type: file - description: index file for the vcf file - pattern: "*.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - "*variants.vcf.gz.tbi": + type: file + description: index file for the vcf file + pattern: "*.vcf.gz.tbi" - genome_vcf: - type: file - description: variant records and compressed non-variant blocks - pattern: "*_genome.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - "*genome.vcf.gz": + type: file + description: variant records and compressed non-variant blocks + pattern: "*_genome.vcf.gz" - genome_vcf_tbi: - type: file - description: index file for the genome_vcf file - pattern: "*_genome.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - "*genome.vcf.gz.tbi": + type: file + description: index file for the genome_vcf file + pattern: "*_genome.vcf.gz.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@arontommi" maintainers: diff --git a/modules/nf-core/strelka/germline/tests/main.nf.test b/modules/nf-core/strelka/germline/tests/main.nf.test index d662016898..e2be9e1830 100644 --- a/modules/nf-core/strelka/germline/tests/main.nf.test +++ b/modules/nf-core/strelka/germline/tests/main.nf.test @@ -30,7 +30,7 @@ nextflow_process { { assert process.success }, { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, { assert path(process.out.genome_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, - { assert snapshot(process.out.version).match("version") } + { assert snapshot(process.out.versions).match() } ) } @@ -58,7 +58,7 @@ nextflow_process { { assert process.success }, { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, { assert path(process.out.genome_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, - { assert snapshot(process.out.version).match("target_version") } + { assert snapshot(process.out.versions).match() } ) } diff --git a/modules/nf-core/strelka/germline/tests/main.nf.test.snap b/modules/nf-core/strelka/germline/tests/main.nf.test.snap index 2604707f81..2085fdbfaa 100644 --- a/modules/nf-core/strelka/germline/tests/main.nf.test.snap +++ b/modules/nf-core/strelka/germline/tests/main.nf.test.snap @@ -80,20 +80,28 @@ }, "timestamp": "2024-03-20T16:07:30.81195" }, - "version": { - "content": null, + "human - cram": { + "content": [ + [ + "versions.yml:md5,5f72393fd2ab4358e3f0ad16d1937f65" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nextflow": "24.04.4" }, - "timestamp": "2024-03-20T16:05:34.583702" + "timestamp": "2024-08-28T16:50:28.337512" }, - "target_version": { - "content": null, + "human - cram - target": { + "content": [ + [ + "versions.yml:md5,5f72393fd2ab4358e3f0ad16d1937f65" + ] + ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nextflow": "24.04.4" }, - "timestamp": "2024-03-20T16:11:37.54108" + "timestamp": "2024-08-28T16:51:35.930772" } -} \ No newline at end of file +} diff --git a/modules/nf-core/strelka/germline/tests/tags.yml b/modules/nf-core/strelka/germline/tests/tags.yml deleted file mode 100644 index 4a72ab31a4..0000000000 --- a/modules/nf-core/strelka/germline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -strelka/germline: - - "modules/nf-core/strelka/germline/**" diff --git a/modules/nf-core/strelka/somatic/environment.yml b/modules/nf-core/strelka/somatic/environment.yml index ecbc865ec9..052c6baa5f 100644 --- a/modules/nf-core/strelka/somatic/environment.yml +++ b/modules/nf-core/strelka/somatic/environment.yml @@ -1,7 +1,5 @@ -name: strelka_somatic channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::strelka=2.9.10 diff --git a/modules/nf-core/strelka/somatic/meta.yml b/modules/nf-core/strelka/somatic/meta.yml index 428bcb3f84..6f2caaa3e7 100644 --- a/modules/nf-core/strelka/somatic/meta.yml +++ b/modules/nf-core/strelka/somatic/meta.yml @@ -1,5 +1,7 @@ name: strelka_somatic -description: Strelka2 is a fast and accurate small variant caller optimized for analysis of germline variation in small cohorts and somatic variation in tumor/normal sample pairs +description: Strelka2 is a fast and accurate small variant caller optimized for analysis + of germline variation in small cohorts and somatic variation in tumor/normal sample + pairs keywords: - variant calling - germline @@ -8,84 +10,106 @@ keywords: - variants tools: - strelka: - description: Strelka calls somatic and germline small variants from mapped sequencing reads + description: Strelka calls somatic and germline small variants from mapped sequencing + reads homepage: https://github.com/Illumina/strelka documentation: https://github.com/Illumina/strelka/blob/v2.9.x/docs/userGuide/README.md tool_dev_url: https://github.com/Illumina/strelka doi: 10.1038/s41592-018-0051-x licence: ["GPL v3"] + identifier: biotools:strelka input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_normal: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_index_normal: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - input_tumor: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - input_index_tumor: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - manta_candidate_small_indels: - type: file - description: VCF.gz file - pattern: "*.{vcf.gz}" - - manta_candidate_small_indels_tbi: - type: file - description: VCF.gz index file - pattern: "*.tbi" - - fasta: - type: file - description: Genome reference FASTA file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: Genome reference FASTA index file - pattern: "*.{fa.fai,fasta.fai}" - - target_bed: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - target_bed_index: - type: file - description: Index for BED file containing target regions for variant calling - pattern: "*.{bed.tbi}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_normal: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_index_normal: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - input_tumor: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - input_index_tumor: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - manta_candidate_small_indels: + type: file + description: VCF.gz file + pattern: "*.{vcf.gz}" + - manta_candidate_small_indels_tbi: + type: file + description: VCF.gz index file + pattern: "*.tbi" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_index: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" + - - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - - fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf_indels: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.somatic_indels.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - vcf_indels_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.somatic_indels.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - vcf_snvs: - type: file - description: Gzipped VCF file containing variants - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.somatic_snvs.vcf.gz": + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" - vcf_snvs_tbi: - type: file - description: Index for gzipped VCF file containing variants - pattern: "*.{vcf.gz.tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.somatic_snvs.vcf.gz.tbi": + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/svdb/merge/environment.yml b/modules/nf-core/svdb/merge/environment.yml index e6fec08877..f725b65248 100644 --- a/modules/nf-core/svdb/merge/environment.yml +++ b/modules/nf-core/svdb/merge/environment.yml @@ -1,10 +1,8 @@ -name: svdb_merge channels: - conda-forge - bioconda - - defaults + dependencies: - - svdb=2.8.1 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.19.2 - htslib=1.19.1 + - samtools=1.19.2 + - svdb=2.8.1 diff --git a/modules/nf-core/svdb/merge/meta.yml b/modules/nf-core/svdb/merge/meta.yml index e53e61fe74..7dc7c67588 100644 --- a/modules/nf-core/svdb/merge/meta.yml +++ b/modules/nf-core/svdb/merge/meta.yml @@ -10,33 +10,37 @@ tools: homepage: https://github.com/J35P312/SVDB documentation: https://github.com/J35P312/SVDB/blob/master/README.md licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - priority: - type: list - description: prioritise the input vcf files according to this list, e.g ['tiddit','cnvnator'] - - vcfs: - type: list - description: Two or more VCF files. Order of files should correspond to the order of tags used for priority. - pattern: "*.{vcf,vcf.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcfs: + type: list + description: Two or more VCF files. Order of files should correspond to the + order of tags used for priority. + pattern: "*.{vcf,vcf.gz}" + - - priority: + type: list + description: prioritise the input vcf files according to this list, e.g ['tiddit','cnvnator'] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: merged VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.vcf.gz": + type: file + description: merged VCF file + pattern: "*.vcf.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/tabix/bgziptabix/environment.yml b/modules/nf-core/tabix/bgziptabix/environment.yml index c4235872e3..017c259da1 100644 --- a/modules/nf-core/tabix/bgziptabix/environment.yml +++ b/modules/nf-core/tabix/bgziptabix/environment.yml @@ -1,8 +1,7 @@ -name: tabix_bgziptabix channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::htslib=1.20 - bioconda::tabix=1.11 - - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index bcdcf2a689..05041f4953 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -4,8 +4,8 @@ process TABIX_BGZIPTABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : - 'biocontainers/htslib:1.19.1--h81da01d_1' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" input: tuple val(meta), path(input) @@ -24,7 +24,7 @@ process TABIX_BGZIPTABIX { def prefix = task.ext.prefix ?: "${meta.id}" """ bgzip --threads ${task.cpus} -c $args $input > ${prefix}.${input.getExtension()}.gz - tabix $args2 ${prefix}.${input.getExtension()}.gz + tabix --threads ${task.cpus} $args2 ${prefix}.${input.getExtension()}.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tabix/bgziptabix/meta.yml b/modules/nf-core/tabix/bgziptabix/meta.yml index 438aba4d18..806fbc121f 100644 --- a/modules/nf-core/tabix/bgziptabix/meta.yml +++ b/modules/nf-core/tabix/bgziptabix/meta.yml @@ -13,38 +13,50 @@ tools: documentation: https://www.htslib.org/doc/tabix.1.html doi: 10.1093/bioinformatics/btq671 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file - pattern: "*.{bed,gff,sam,vcf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Sorted tab-delimited genome file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gz: - type: file - description: Output compressed file - pattern: "*.{gz}" - - tbi: - type: file - description: tabix index file - pattern: "*.{gz.tbi}" - - csi: - type: file - description: tabix alternate index file - pattern: "*.{gz.csi}" + - gz_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: bgzipped tab-delimited genome file + pattern: "*.gz" + - "*.tbi": + type: file + description: tabix index file + pattern: "*.tbi" + - gz_csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: bgzipped tab-delimited genome file + pattern: "*.gz" + - "*.csi": + type: file + description: csi index file + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@DLBPointon" diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test index 87ea2c84f9..1a84d74fc0 100644 --- a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test @@ -17,7 +17,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_test' ], - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] ] """ } @@ -43,7 +43,7 @@ nextflow_process { """ input[0] = [ [ id:'csi_test' ], - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] ] """ } @@ -72,7 +72,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] ] """ } diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap index fcecb2e492..c166ea7288 100644 --- a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap @@ -8,14 +8,14 @@ "id": "tbi_test" }, "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "tbi_test.bed.gz.tbi:md5,24908545311cf2b7c803c41d716872c4" + "tbi_test.bed.gz.tbi:md5,ca06caf88b1e3c67d5fcba0a1460b52c" ] ], "1": [ ], "2": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ], "gz_csi": [ @@ -26,15 +26,19 @@ "id": "tbi_test" }, "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "tbi_test.bed.gz.tbi:md5,24908545311cf2b7c803c41d716872c4" + "tbi_test.bed.gz.tbi:md5,ca06caf88b1e3c67d5fcba0a1460b52c" ] ], "versions": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ] } ], - "timestamp": "2024-02-19T14:50:51.513838" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:16.053817543" }, "sarscov2_bed_csi": { "content": [ @@ -48,11 +52,11 @@ "id": "csi_test" }, "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "csi_test.bed.gz.csi:md5,e06165ddd34640783728cb07f2558b43" + "csi_test.bed.gz.csi:md5,c9c0377de58fdc89672bb3005a0d69f5" ] ], "2": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ], "gz_csi": [ [ @@ -60,35 +64,51 @@ "id": "csi_test" }, "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "csi_test.bed.gz.csi:md5,e06165ddd34640783728cb07f2558b43" + "csi_test.bed.gz.csi:md5,c9c0377de58fdc89672bb3005a0d69f5" ] ], "gz_tbi": [ ], "versions": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ] } ], - "timestamp": "2024-02-19T14:51:00.513777" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:27.667745444" }, "csi_test": { "content": [ "csi_test.bed.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:51:00.548801" }, "csi_stub": { "content": [ "test.bed.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:51:09.218454" }, "tbi_test": { "content": [ "tbi_test.bed.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:50:51.579654" }, "sarscov2_bed_csi_stub": { @@ -113,7 +133,7 @@ ] ], "2": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ], "gz_csi": [ [ @@ -134,10 +154,14 @@ ] ], "versions": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ] } ], - "timestamp": "2024-02-19T14:51:09.164254" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:45.105209991" } } \ No newline at end of file diff --git a/modules/nf-core/tabix/tabix/environment.yml b/modules/nf-core/tabix/tabix/environment.yml index 76b45e16c8..017c259da1 100644 --- a/modules/nf-core/tabix/tabix/environment.yml +++ b/modules/nf-core/tabix/tabix/environment.yml @@ -1,8 +1,7 @@ -name: tabix_tabix channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::htslib=1.20 - bioconda::tabix=1.11 - - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index 1737141d7f..13acd670ea 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -4,8 +4,8 @@ process TABIX_TABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : - 'biocontainers/htslib:1.19.1--h81da01d_1' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" input: tuple val(meta), path(tab) @@ -21,7 +21,10 @@ process TABIX_TABIX { script: def args = task.ext.args ?: '' """ - tabix $args $tab + tabix \\ + --threads $task.cpus \\ + $args \\ + $tab cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -33,8 +36,8 @@ process TABIX_TABIX { """ touch ${tab}.tbi touch ${tab}.csi - cat <<-END_VERSIONS > versions.yml + cat <<-END_VERSIONS > versions.yml "${task.process}": tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') END_VERSIONS diff --git a/modules/nf-core/tabix/tabix/meta.yml b/modules/nf-core/tabix/tabix/meta.yml index ae5b4f439f..7864832d93 100644 --- a/modules/nf-core/tabix/tabix/meta.yml +++ b/modules/nf-core/tabix/tabix/meta.yml @@ -11,34 +11,43 @@ tools: documentation: https://www.htslib.org/doc/tabix.1.html doi: 10.1093/bioinformatics/btq671 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file compressed with bgzip - pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file compressed with bgzip + pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - tbi: - type: file - description: tabix index file - pattern: "*.{tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: tabix index file + pattern: "*.{tbi}" - csi: - type: file - description: coordinate sorted index file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: coordinate sorted index file + pattern: "*.{csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test b/modules/nf-core/tabix/tabix/tests/main.nf.test index 3a150c708f..102b0d7bf3 100644 --- a/modules/nf-core/tabix/tabix/tests/main.nf.test +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_bed' ], - [ file(params.test_data['sarscov2']['genome']['test_bed_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed.gz', checkIfExists: true) ] ] """ } @@ -25,11 +25,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.tbi[0][1]).name - ).match("tbi_bed") - } + process.out, + file(process.out.tbi[0][1]).name + ).match() } ) } } @@ -41,7 +40,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_gff' ], - [ file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true) ] ] """ } @@ -50,11 +49,9 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.tbi[0][1]).name - ).match("tbi_gff") - } + process.out, + file(process.out.tbi[0][1]).name).match() } ) } @@ -67,7 +64,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_vcf' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) ] ] """ } @@ -76,11 +73,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.tbi[0][1]).name - ).match("tbi_vcf") - } + process.out, + file(process.out.tbi[0][1]).name + ).match() } ) } @@ -93,7 +89,7 @@ nextflow_process { """ input[0] = [ [ id:'vcf_csi' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) ] ] """ } @@ -102,11 +98,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.csi[0][1]).name - ).match("vcf_csi") - } + process.out, + file(process.out.csi[0][1]).name + ).match() } ) } @@ -120,7 +115,7 @@ nextflow_process { """ input[0] = [ [ id:'vcf_csi_stub' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) ] ] """ } @@ -129,11 +124,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.csi[0][1]).name - ).match("vcf_csi_stub") - } + process.out, + file(process.out.csi[0][1]).name + ).match() } ) } diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap index 034e38b688..c2b9ed0b80 100644 --- a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap @@ -1,16 +1,4 @@ { - "vcf_csi_stub": { - "content": [ - "test.vcf.gz.csi" - ], - "timestamp": "2024-03-04T14:51:59.788002" - }, - "tbi_gff": { - "content": [ - "genome.gff3.gz.tbi" - ], - "timestamp": "2024-02-19T14:53:37.420216" - }, "sarscov2_gff_tbi": { "content": [ { @@ -19,14 +7,14 @@ { "id": "tbi_gff" }, - "genome.gff3.gz.tbi:md5,53fc683fd217aae47ef10d23c52a9178" + "genome.gff3.gz.tbi:md5,f79a67d95a98076e04fbe0455d825926" ] ], "1": [ ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ @@ -36,15 +24,20 @@ { "id": "tbi_gff" }, - "genome.gff3.gz.tbi:md5,53fc683fd217aae47ef10d23c52a9178" + "genome.gff3.gz.tbi:md5,f79a67d95a98076e04fbe0455d825926" ] ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } + }, + "genome.gff3.gz.tbi" ], - "timestamp": "2024-02-19T14:53:37.388157" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:25.653807564" }, "sarscov2_bedgz_tbi": { "content": [ @@ -54,14 +47,14 @@ { "id": "tbi_bed" }, - "test.bed.gz.tbi:md5,0f17d85e7f0a042b2aa367b70df224f8" + "test.bed.gz.tbi:md5,9a761d51cc81835fd1199201fdbcdd5d" ] ], "1": [ ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ @@ -71,27 +64,20 @@ { "id": "tbi_bed" }, - "test.bed.gz.tbi:md5,0f17d85e7f0a042b2aa367b70df224f8" + "test.bed.gz.tbi:md5,9a761d51cc81835fd1199201fdbcdd5d" ] ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } - ], - "timestamp": "2024-02-19T14:53:28.879408" - }, - "tbi_vcf": { - "content": [ - "test.vcf.gz.tbi" - ], - "timestamp": "2024-02-19T14:53:46.402522" - }, - "vcf_csi": { - "content": [ - "test.vcf.gz.csi" + }, + "test.bed.gz.tbi" ], - "timestamp": "2024-02-19T14:53:54.921189" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:09.754082161" }, "sarscov2_vcf_tbi": { "content": [ @@ -101,14 +87,14 @@ { "id": "tbi_vcf" }, - "test.vcf.gz.tbi:md5,897f3f378a811b90e6dee56ce08d2bcf" + "test.vcf.gz.tbi:md5,d22e5b84e4fcd18792179f72e6da702e" ] ], "1": [ ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ @@ -118,15 +104,20 @@ { "id": "tbi_vcf" }, - "test.vcf.gz.tbi:md5,897f3f378a811b90e6dee56ce08d2bcf" + "test.vcf.gz.tbi:md5,d22e5b84e4fcd18792179f72e6da702e" ] ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } + }, + "test.vcf.gz.tbi" ], - "timestamp": "2024-02-19T14:53:46.370358" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:40.042648294" }, "sarscov2_vcf_csi_stub": { "content": [ @@ -148,7 +139,7 @@ ] ], "2": [ - "versions.yml:md5,3d45df6d80883bad358631069a2940fd" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ [ @@ -167,11 +158,16 @@ ] ], "versions": [ - "versions.yml:md5,3d45df6d80883bad358631069a2940fd" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } + }, + "test.vcf.gz.csi" ], - "timestamp": "2024-03-04T14:51:59.766184" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:07:08.700367261" }, "sarscov2_vcf_csi": { "content": [ @@ -184,34 +180,33 @@ { "id": "vcf_csi" }, - "test.vcf.gz.csi:md5,0731ad6f40104d2bbb1a2cc478ef8f03" + "test.vcf.gz.csi:md5,04b41c1efd9ab3c6b1e008a286e27d2b" ] ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ [ { "id": "vcf_csi" }, - "test.vcf.gz.csi:md5,0731ad6f40104d2bbb1a2cc478ef8f03" + "test.vcf.gz.csi:md5,04b41c1efd9ab3c6b1e008a286e27d2b" ] ], "tbi": [ ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } - ], - "timestamp": "2024-02-19T14:53:54.886876" - }, - "tbi_bed": { - "content": [ - "test.bed.gz.tbi" + }, + "test.vcf.gz.csi" ], - "timestamp": "2024-02-19T14:53:28.947628" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:55.362067748" } } \ No newline at end of file diff --git a/modules/nf-core/tiddit/sv/environment.yml b/modules/nf-core/tiddit/sv/environment.yml index d0367f1717..2fd01cfd4b 100644 --- a/modules/nf-core/tiddit/sv/environment.yml +++ b/modules/nf-core/tiddit/sv/environment.yml @@ -1,7 +1,5 @@ -name: tiddit_sv channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::tiddit=3.6.1 diff --git a/modules/nf-core/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml index bfcbc4e3fd..21527baf13 100644 --- a/modules/nf-core/tiddit/sv/meta.yml +++ b/modules/nf-core/tiddit/sv/meta.yml @@ -11,56 +11,65 @@ tools: documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md doi: 10.12688/f1000research.11168.1 licence: ["GPL-3.0-or-later"] + identifier: biotools:tiddit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test_fasta']` - - fasta: - type: file - description: Input FASTA file - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing sample information from bwa index - e.g. `[ id:'test_bwa-index' ]` - - bwa_index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test_fasta']` + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing sample information from bwa index + e.g. `[ id:'test_bwa-index' ]` + - bwa_index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: vcf - pattern: "*.{vcf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf": + type: file + description: vcf + pattern: "*.{vcf}" - ploidy: - type: file - description: tab - pattern: "*.{ploidies.tab}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ploidies.tab": + type: file + description: tab + pattern: "*.{ploidies.tab}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml index 0c9cbb101d..c7794856d8 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/nf-core/untar/environment.yml @@ -1,11 +1,7 @@ -name: untar - channels: - conda-forge - bioconda - - defaults - dependencies: - conda-forge::grep=3.11 - - conda-forge::sed=4.7 + - conda-forge::sed=4.8 - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 8a75bb957d..9bd8f55461 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -4,8 +4,8 @@ process UNTAR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" input: tuple val(meta), path(archive) @@ -52,8 +52,29 @@ process UNTAR { stub: prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) """ - mkdir $prefix - touch ${prefix}/file.txt + mkdir ${prefix} + ## Dry-run untaring the archive to get the files and place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch \${i} + else + mkdir -p \${i} + fi + done + else + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch ${prefix}/\${i} + else + mkdir -p ${prefix}/\${i} + fi + done + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index a9a2110f55..290346b3fa 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -10,30 +10,33 @@ tools: Extract tar.gz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - $prefix: + type: directory + description: Directory containing contents of archive + pattern: "*/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test index 2a7c97bf81..c957517aaa 100644 --- a/modules/nf-core/untar/tests/main.nf.test +++ b/modules/nf-core/untar/tests/main.nf.test @@ -6,6 +6,7 @@ nextflow_process { tag "modules" tag "modules_nfcore" tag "untar" + test("test_untar") { when { @@ -19,10 +20,9 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.untar).match("test_untar") }, + { assert snapshot(process.out).match() }, ) } - } test("test_untar_onlyfiles") { @@ -38,10 +38,48 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.untar).match("test_untar_onlyfiles") }, + { assert snapshot(process.out).match() }, ) } + } + + test("test_untar - stub") { + + options "-stub" + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } } + test("test_untar_onlyfiles - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } } diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap index 64550292f3..ceb91b7925 100644 --- a/modules/nf-core/untar/tests/main.nf.test.snap +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -1,42 +1,158 @@ { "test_untar_onlyfiles": { "content": [ - [ - [ + { + "0": [ [ - - ], + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:28.231047" + }, + "test_untar_onlyfiles - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-02-28T11:49:41.320643" + "timestamp": "2024-07-10T12:04:45.773103" + }, + "test_untar - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:36.777441" }, "test_untar": { "content": [ - [ - [ + { + "0": [ [ - - ], + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-02-28T11:49:33.795172" + "timestamp": "2024-07-10T12:04:19.377674" } } \ No newline at end of file diff --git a/modules/nf-core/unzip/environment.yml b/modules/nf-core/unzip/environment.yml index d3a535f170..e93c649f44 100644 --- a/modules/nf-core/unzip/environment.yml +++ b/modules/nf-core/unzip/environment.yml @@ -1,7 +1,5 @@ -name: unzip channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::p7zip=16.02 diff --git a/modules/nf-core/unzip/main.nf b/modules/nf-core/unzip/main.nf index 08cfc3c406..a0c02109cd 100644 --- a/modules/nf-core/unzip/main.nf +++ b/modules/nf-core/unzip/main.nf @@ -20,7 +20,6 @@ process UNZIP { script: def args = task.ext.args ?: '' if ( archive instanceof List && archive.name.size > 1 ) { error "[UNZIP] error: 7za only accepts a single archive as input. Please check module input." } - prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName) """ 7za \\ @@ -34,4 +33,17 @@ process UNZIP { 7za: \$(echo \$(7za --help) | sed 's/.*p7zip Version //; s/(.*//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + if ( archive instanceof List && archive.name.size > 1 ) { error "[UNZIP] error: 7za only accepts a single archive as input. Please check module input." } + prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName) + """ + mkdir "${prefix}" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + 7za: \$(echo \$(7za --help) | sed 's/.*p7zip Version //; s/(.*//') + END_VERSIONS + """ } diff --git a/modules/nf-core/unzip/meta.yml b/modules/nf-core/unzip/meta.yml index e8e377e2af..426fccb76b 100644 --- a/modules/nf-core/unzip/meta.yml +++ b/modules/nf-core/unzip/meta.yml @@ -7,35 +7,39 @@ keywords: - archiving tools: - unzip: - description: p7zip is a quick port of 7z.exe and 7za.exe (command line version of 7zip, see www.7-zip.org) for Unix. + description: p7zip is a quick port of 7z.exe and 7za.exe (command line version + of 7zip, see www.7-zip.org) for Unix. homepage: https://sourceforge.net/projects/p7zip/ documentation: https://sourceforge.net/projects/p7zip/ tool_dev_url: https://sourceforge.net/projects/p7zip" licence: ["LGPL-2.1-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: ZIP file - pattern: "*.zip" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: ZIP file + pattern: "*.zip" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - unzipped_archive: - type: directory - description: Directory contents of the unzipped archive - pattern: "${archive.baseName}/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/: + type: directory + description: Directory contents of the unzipped archive + pattern: "${archive.baseName}/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/unzip/tests/main.nf.test b/modules/nf-core/unzip/tests/main.nf.test new file mode 100644 index 0000000000..238b68d8ba --- /dev/null +++ b/modules/nf-core/unzip/tests/main.nf.test @@ -0,0 +1,54 @@ +nextflow_process { + + name "Test Process UNZIP" + script "../main.nf" + process "UNZIP" + + tag "modules" + tag "modules_nfcore" + tag "unzip" + + test("generic [tar] [tar_gz]") { + + when { + process { + """ + input[0] = [ + [ id: 'hello' ], + file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("generic [tar] [tar_gz] stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id: 'hello' ], + file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/unzip/tests/main.nf.test.snap b/modules/nf-core/unzip/tests/main.nf.test.snap new file mode 100644 index 0000000000..cdd2ab1641 --- /dev/null +++ b/modules/nf-core/unzip/tests/main.nf.test.snap @@ -0,0 +1,76 @@ +{ + "generic [tar] [tar_gz] stub": { + "content": [ + { + "0": [ + [ + { + "id": "hello" + }, + [ + + ] + ] + ], + "1": [ + "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" + ], + "unzipped_archive": [ + [ + { + "id": "hello" + }, + [ + + ] + ] + ], + "versions": [ + "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-30T19:16:37.11550986" + }, + "generic [tar] [tar_gz]": { + "content": [ + { + "0": [ + [ + { + "id": "hello" + }, + [ + "hello.tar:md5,80c66db79a773bc87b3346035ff9593e" + ] + ] + ], + "1": [ + "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" + ], + "unzipped_archive": [ + [ + { + "id": "hello" + }, + [ + "hello.tar:md5,80c66db79a773bc87b3346035ff9593e" + ] + ] + ], + "versions": [ + "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-30T19:16:25.120242571" + } +} \ No newline at end of file diff --git a/modules/nf-core/unzip/tests/tags.yml b/modules/nf-core/unzip/tests/tags.yml new file mode 100644 index 0000000000..7f5647e120 --- /dev/null +++ b/modules/nf-core/unzip/tests/tags.yml @@ -0,0 +1,2 @@ +unzip: + - "modules/nf-core/unzip/**" diff --git a/modules/nf-core/vcftools/environment.yml b/modules/nf-core/vcftools/environment.yml index 503449e833..7dcc752b86 100644 --- a/modules/nf-core/vcftools/environment.yml +++ b/modules/nf-core/vcftools/environment.yml @@ -1,7 +1,5 @@ -name: vcftools channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::vcftools=0.1.16 diff --git a/modules/nf-core/vcftools/main.nf b/modules/nf-core/vcftools/main.nf index 475ef58f7a..24e0fc3b0e 100644 --- a/modules/nf-core/vcftools/main.nf +++ b/modules/nf-core/vcftools/main.nf @@ -126,7 +126,71 @@ process VCFTOOLS { """ stub: + def prefix = task.ext.prefix ?: "${meta.id}" """ + touch ${prefix}.vcf + touch ${prefix}.bcf + touch ${prefix}.frq + touch ${prefix}.frq.count + touch ${prefix}.idepth + touch ${prefix}.ldepth + touch ${prefix}.ldepth.mean + touch ${prefix}.gdepth + touch ${prefix}.hap.ld + touch ${prefix}.geno.ld + touch ${prefix}.geno.chisq + touch ${prefix}.list.hap.ld + touch ${prefix}.list.geno.ld + touch ${prefix}.interchrom.hap.ld + touch ${prefix}.interchrom.geno.ld + touch ${prefix}.TsTv + touch ${prefix}.TsTv.summary + touch ${prefix}.TsTv.count + touch ${prefix}.TsTv.qual + touch ${prefix}.FILTER.summary + touch ${prefix}.sites.pi + touch ${prefix}.windowed.pi + touch ${prefix}.weir.fst + touch ${prefix}.het + touch ${prefix}.hwe + touch ${prefix}.Tajima.D + touch ${prefix}.ifreqburden + touch ${prefix}.LROH + touch ${prefix}.relatedness + touch ${prefix}.relatedness2 + touch ${prefix}.lqual + touch ${prefix}.imiss + touch ${prefix}.lmiss + touch ${prefix}.snpden + touch ${prefix}.kept.sites + touch ${prefix}.removed.sites + touch ${prefix}.singletons + touch ${prefix}.indel.hist + touch ${prefix}.hapcount + touch ${prefix}.mendel + touch ${prefix}.FORMAT + touch ${prefix}.INFO + touch ${prefix}.012 + touch ${prefix}.012.indv + touch ${prefix}.012.pos + touch ${prefix}.impute.hap + touch ${prefix}.impute.hap.legend + touch ${prefix}.impute.hap.indv + touch ${prefix}.ldhat.sites + touch ${prefix}.ldhat.locs + touch ${prefix}.BEAGLE.GL + touch ${prefix}.BEAGLE.PL + touch ${prefix}.ped + touch ${prefix}.map + touch ${prefix}.tped + touch ${prefix}.tfam + touch ${prefix}.diff.sites_in_files + touch ${prefix}.diff.indv_in_files + touch ${prefix}.diff.sites + touch ${prefix}.diff.indv + touch ${prefix}.diff.discordance.matrix + touch ${prefix}.diff.switch + cat <<-END_VERSIONS > versions.yml "${task.process}": vcftools: \$(echo \$(vcftools --version 2>&1) | sed 's/^.*VCFtools (//;s/).*//') diff --git a/modules/nf-core/vcftools/meta.yml b/modules/nf-core/vcftools/meta.yml index 09ad5908ab..b4c564ecaf 100644 --- a/modules/nf-core/vcftools/meta.yml +++ b/modules/nf-core/vcftools/meta.yml @@ -6,287 +6,681 @@ keywords: - sort tools: - vcftools: - description: A set of tools written in Perl and C++ for working with VCF files. This package only contains the C++ libraries whereas the package perl-vcftools-vcf contains the perl libraries + description: A set of tools written in Perl and C++ for working with VCF files. + This package only contains the C++ libraries whereas the package perl-vcftools-vcf + contains the perl libraries homepage: http://vcftools.sourceforge.net/ documentation: http://vcftools.sourceforge.net/man_latest.html licence: ["LGPL"] + identifier: biotools:vcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - variant_file: - type: file - description: variant input file which can be vcf, vcf.gz, or bcf format. - - bed: - type: file - description: bed file which can be used with different arguments in vcftools (optional) - - diff_variant_file: - type: file - description: secondary variant file which can be used with the 'diff' suite of tools (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - variant_file: + type: file + description: variant input file which can be vcf, vcf.gz, or bcf format. + - - bed: + type: file + description: bed file which can be used with different arguments in vcftools + (optional) + - - diff_variant_file: + type: file + description: secondary variant file which can be used with the 'diff' suite + of tools (optional) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: vcf file (optional) - pattern: "*.vcf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf": + type: file + description: vcf file (optional) + pattern: "*.vcf" - bcf: - type: file - description: bcf file (optional) - pattern: "*.bcf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bcf": + type: file + description: bcf file (optional) + pattern: "*.bcf" - frq: - type: file - description: Allele frequency for each site (optional) - pattern: "*.frq" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.frq": + type: file + description: Allele frequency for each site (optional) + pattern: "*.frq" - frq_count: - type: file - description: Allele counts for each site (optional) - pattern: "*.frq.count" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.frq.count": + type: file + description: Allele counts for each site (optional) + pattern: "*.frq.count" - idepth: - type: file - description: mean depth per individual (optional) - pattern: "*.idepth" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.idepth": + type: file + description: mean depth per individual (optional) + pattern: "*.idepth" - ldepth: - type: file - description: depth per site summed across individuals (optional) - pattern: "*.ildepth" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ldepth": + type: file + description: depth per site summed across individuals (optional) + pattern: "*.ildepth" - ldepth_mean: - type: file - description: mean depth per site calculated across individuals (optional) - pattern: "*.ldepth.mean" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ldepth.mean": + type: file + description: mean depth per site calculated across individuals (optional) + pattern: "*.ldepth.mean" - gdepth: - type: file - description: depth for each genotype in vcf file (optional) - pattern: "*.gdepth" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gdepth": + type: file + description: depth for each genotype in vcf file (optional) + pattern: "*.gdepth" - hap_ld: - type: file - description: r2, D, and D’ statistics using phased haplotypes (optional) - pattern: "*.hap.ld" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.hap.ld": + type: file + description: r2, D, and D’ statistics using phased haplotypes (optional) + pattern: "*.hap.ld" - geno_ld: - type: file - description: squared correlation coefficient between genotypes encoded as 0, 1 and 2 to represent the number of non-reference alleles in each individual (optional) - pattern: "*.geno.ld" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.geno.ld": + type: file + description: squared correlation coefficient between genotypes encoded as 0, + 1 and 2 to represent the number of non-reference alleles in each individual + (optional) + pattern: "*.geno.ld" - geno_chisq: - type: file - description: test for genotype independence via the chi-squared statistic (optional) - pattern: "*.geno.chisq" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.geno.chisq": + type: file + description: test for genotype independence via the chi-squared statistic (optional) + pattern: "*.geno.chisq" - list_hap_ld: - type: file - description: r2 statistics of the sites contained in the provided input file verses all other sites (optional) - pattern: "*.list.hap.ld" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.list.hap.ld": + type: file + description: r2 statistics of the sites contained in the provided input file + verses all other sites (optional) + pattern: "*.list.hap.ld" - list_geno_ld: - type: file - description: r2 statistics of the sites contained in the provided input file verses all other sites (optional) - pattern: "*.list.geno.ld" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.list.geno.ld": + type: file + description: r2 statistics of the sites contained in the provided input file + verses all other sites (optional) + pattern: "*.list.geno.ld" - interchrom_hap_ld: - type: file - description: r2 statistics for sites (haplotypes) on different chromosomes (optional) - pattern: "*.interchrom.hap.ld" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.interchrom.hap.ld": + type: file + description: r2 statistics for sites (haplotypes) on different chromosomes (optional) + pattern: "*.interchrom.hap.ld" - interchrom_geno_ld: - type: file - description: r2 statistics for sites (genotypes) on different chromosomes (optional) - pattern: "*.interchrom.geno.ld" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.interchrom.geno.ld": + type: file + description: r2 statistics for sites (genotypes) on different chromosomes (optional) + pattern: "*.interchrom.geno.ld" - tstv: - type: file - description: Transition / Transversion ratio in bins of size defined in options (optional) - pattern: "*.TsTv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.TsTv": + type: file + description: Transition / Transversion ratio in bins of size defined in options + (optional) + pattern: "*.TsTv" - tstv_summary: - type: file - description: Summary of all Transitions and Transversions (optional) - pattern: "*.TsTv.summary" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.TsTv.summary": + type: file + description: Summary of all Transitions and Transversions (optional) + pattern: "*.TsTv.summary" - tstv_count: - type: file - description: Transition / Transversion ratio as a function of alternative allele count (optional) - pattern: "*.TsTv.count" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.TsTv.count": + type: file + description: Transition / Transversion ratio as a function of alternative allele + count (optional) + pattern: "*.TsTv.count" - tstv_qual: - type: file - description: Transition / Transversion ratio as a function of SNP quality threshold (optional) - pattern: "*.TsTv.qual" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.TsTv.qual": + type: file + description: Transition / Transversion ratio as a function of SNP quality threshold + (optional) + pattern: "*.TsTv.qual" - filter_summary: - type: file - description: Summary of the number of SNPs and Ts/Tv ratio for each FILTER category (optional) - pattern: "*.FILTER.summary" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.FILTER.summary": + type: file + description: Summary of the number of SNPs and Ts/Tv ratio for each FILTER category + (optional) + pattern: "*.FILTER.summary" - sites_pi: - type: file - description: Nucleotide divergency on a per-site basis (optional) - pattern: "*.sites.pi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sites.pi": + type: file + description: Nucleotide divergency on a per-site basis (optional) + pattern: "*.sites.pi" - windowed_pi: - type: file - description: Nucleotide diversity in windows, with window size determined by options (optional) - pattern: "*windowed.pi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.windowed.pi": + type: file + description: Nucleotide diversity in windows, with window size determined by + options (optional) + pattern: "*windowed.pi" - weir_fst: - type: file - description: Fst estimate from Weir and Cockerham’s 1984 paper (optional) - pattern: "*.weir.fst" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.weir.fst": + type: file + description: Fst estimate from Weir and Cockerham’s 1984 paper (optional) + pattern: "*.weir.fst" - heterozygosity: - type: file - description: Heterozygosity on a per-individual basis (optional) - pattern: "*.het" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.het": + type: file + description: Heterozygosity on a per-individual basis (optional) + pattern: "*.het" - hwe: - type: file - description: Contains the Observed numbers of Homozygotes and Heterozygotes and the corresponding Expected numbers under HWE (optional) - pattern: "*.hwe" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.hwe": + type: file + description: Contains the Observed numbers of Homozygotes and Heterozygotes + and the corresponding Expected numbers under HWE (optional) + pattern: "*.hwe" - tajima_d: - type: file - description: Tajima’s D statistic in bins with size of the specified number in options (optional) - pattern: "*.Tajima.D" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.Tajima.D": + type: file + description: Tajima’s D statistic in bins with size of the specified number + in options (optional) + pattern: "*.Tajima.D" - freq_burden: - type: file - description: Number of variants within each individual of a specific frequency in options (optional) - pattern: "*.ifreqburden" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ifreqburden": + type: file + description: Number of variants within each individual of a specific frequency + in options (optional) + pattern: "*.ifreqburden" - lroh: - type: file - description: Long Runs of Homozygosity (optional) - pattern: "*.LROH" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.LROH": + type: file + description: Long Runs of Homozygosity (optional) + pattern: "*.LROH" - relatedness: - type: file - description: Relatedness statistic based on the method of Yang et al, Nature Genetics 2010 (doi:10.1038/ng.608) (optional) - pattern: "*.relatedness" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.relatedness": + type: file + description: Relatedness statistic based on the method of Yang et al, Nature + Genetics 2010 (doi:10.1038/ng.608) (optional) + pattern: "*.relatedness" - relatedness2: - type: file - description: Relatedness statistic based on the method of Manichaikul et al., BIOINFORMATICS 2010 (doi:10.1093/bioinformatics/btq559) (optional) - pattern: "*.relatedness2" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.relatedness2": + type: file + description: Relatedness statistic based on the method of Manichaikul et al., + BIOINFORMATICS 2010 (doi:10.1093/bioinformatics/btq559) (optional) + pattern: "*.relatedness2" - lqual: - type: file - description: per-site SNP quality (optional) - pattern: "*.lqual" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.lqual": + type: file + description: per-site SNP quality (optional) + pattern: "*.lqual" - missing_individual: - type: file - description: Missingness on a per-individual basis (optional) - pattern: "*.imiss" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.imiss": + type: file + description: Missingness on a per-individual basis (optional) + pattern: "*.imiss" - missing_site: - type: file - description: Missingness on a per-site basis (optional) - pattern: "*.lmiss" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.lmiss": + type: file + description: Missingness on a per-site basis (optional) + pattern: "*.lmiss" - snp_density: - type: file - description: Number and density of SNPs in bins of size defined by option (optional) - pattern: "*.snpden" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.snpden": + type: file + description: Number and density of SNPs in bins of size defined by option (optional) + pattern: "*.snpden" - kept_sites: - type: file - description: All sites that have been kept after filtering (optional) - pattern: "*.kept.sites" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.kept.sites": + type: file + description: All sites that have been kept after filtering (optional) + pattern: "*.kept.sites" - removed_sites: - type: file - description: All sites that have been removed after filtering (optional) - pattern: "*.removed.sites" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.removed.sites": + type: file + description: All sites that have been removed after filtering (optional) + pattern: "*.removed.sites" - singeltons: - type: file - description: Location of singletons, and the individual they occur in (optional) - pattern: "*.singeltons" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.singletons": + type: file + description: Location of singletons, and the individual they occur in (optional) + pattern: "*.singeltons" - indel_hist: - type: file - description: Histogram file of the length of all indels (including SNPs) (optional) - pattern: "*.indel_hist" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.indel.hist": + type: file + description: Histogram file of the length of all indels (including SNPs) (optional) + pattern: "*.indel_hist" - hapcount: - type: file - description: Unique haplotypes within user specified bins (optional) - pattern: "*.hapcount" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.hapcount": + type: file + description: Unique haplotypes within user specified bins (optional) + pattern: "*.hapcount" - mendel: - type: file - description: Mendel errors identified in trios (optional) - pattern: "*.mendel" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mendel": + type: file + description: Mendel errors identified in trios (optional) + pattern: "*.mendel" - format: - type: file - description: Extracted information from the genotype fields in the VCF file relating to a specfied FORMAT identifier (optional) - pattern: "*.FORMAT" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.FORMAT": + type: file + description: Extracted information from the genotype fields in the VCF file + relating to a specfied FORMAT identifier (optional) + pattern: "*.FORMAT" - info: - type: file - description: Extracted information from the INFO field in the VCF file (optional) - pattern: "*.INFO" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.INFO": + type: file + description: Extracted information from the INFO field in the VCF file (optional) + pattern: "*.INFO" - genotypes_matrix: - type: file - description: | - Genotypes output as large matrix. - Genotypes of each individual on a separate line. - Genotypes are represented as 0, 1 and 2, where the number represent that number of non-reference alleles. - Missing genotypes are represented by -1 (optional) - pattern: "*.012" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.012": + type: file + description: | + Genotypes output as large matrix. + Genotypes of each individual on a separate line. + Genotypes are represented as 0, 1 and 2, where the number represent that number of non-reference alleles. + Missing genotypes are represented by -1 (optional) + pattern: "*.012" - genotypes_matrix_individual: - type: file - description: Details the individuals included in the main genotypes_matrix file (optional) - pattern: "*.012.indv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.012.indv": + type: file + description: Details the individuals included in the main genotypes_matrix file + (optional) + pattern: "*.012.indv" - genotypes_matrix_position: - type: file - description: Details the site locations included in the main genotypes_matrix file (optional) - pattern: "*.012.pos" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.012.pos": + type: file + description: Details the site locations included in the main genotypes_matrix + file (optional) + pattern: "*.012.pos" - impute_hap: - type: file - description: Phased haplotypes in IMPUTE reference-panel format (optional) - pattern: "*.impute.hap" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.impute.hap": + type: file + description: Phased haplotypes in IMPUTE reference-panel format (optional) + pattern: "*.impute.hap" - impute_hap_legend: - type: file - description: Impute haplotype legend file (optional) - pattern: "*.impute.hap.legend" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.impute.hap.legend": + type: file + description: Impute haplotype legend file (optional) + pattern: "*.impute.hap.legend" - impute_hap_indv: - type: file - description: Impute haplotype individuals file (optional) - pattern: "*.impute.hap.indv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.impute.hap.indv": + type: file + description: Impute haplotype individuals file (optional) + pattern: "*.impute.hap.indv" - ldhat_sites: - type: file - description: Output data in LDhat format, sites (optional) - pattern: "*.ldhat.sites" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ldhat.sites": + type: file + description: Output data in LDhat format, sites (optional) + pattern: "*.ldhat.sites" - ldhat_locs: - type: file - description: output data in LDhat format, locations (optional) - pattern: "*.ldhat.locs" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ldhat.locs": + type: file + description: output data in LDhat format, locations (optional) + pattern: "*.ldhat.locs" - beagle_gl: - type: file - description: Genotype likelihoods for biallelic sites (optional) - pattern: "*.BEAGLE.GL" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.BEAGLE.GL": + type: file + description: Genotype likelihoods for biallelic sites (optional) + pattern: "*.BEAGLE.GL" - beagle_pl: - type: file - description: Genotype likelihoods for biallelic sites (optional) - pattern: "*.BEAGLE.PL" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.BEAGLE.PL": + type: file + description: Genotype likelihoods for biallelic sites (optional) + pattern: "*.BEAGLE.PL" - ped: - type: file - description: output the genotype data in PLINK PED format (optional) - pattern: "*.ped" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ped": + type: file + description: output the genotype data in PLINK PED format (optional) + pattern: "*.ped" - map_: - type: file - description: output the genotype data in PLINK PED format (optional) - pattern: "*.map" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.map": + type: file + description: output the genotype data in PLINK PED format (optional) + pattern: "*.map" - tped: - type: file - description: output the genotype data in PLINK PED format (optional) - pattern: "*.tped" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tped": + type: file + description: output the genotype data in PLINK PED format (optional) + pattern: "*.tped" - tfam: - type: file - description: output the genotype data in PLINK PED format (optional) - pattern: "*.tfam" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tfam": + type: file + description: output the genotype data in PLINK PED format (optional) + pattern: "*.tfam" - diff_sites_in_files: - type: file - description: Sites that are common / unique to each file specified in optional inputs (optional) - pattern: "*.diff.sites.in.files" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diff.sites_in_files": + type: file + description: Sites that are common / unique to each file specified in optional + inputs (optional) + pattern: "*.diff.sites.in.files" - diff_indv_in_files: - type: file - description: Individuals that are common / unique to each file specified in optional inputs (optional) - pattern: "*.diff.indv.in.files" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diff.indv_in_files": + type: file + description: Individuals that are common / unique to each file specified in + optional inputs (optional) + pattern: "*.diff.indv.in.files" - diff_sites: - type: file - description: Discordance on a site by site basis, specified in optional inputs (optional) - pattern: "*.diff.sites" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diff.sites": + type: file + description: Discordance on a site by site basis, specified in optional inputs + (optional) + pattern: "*.diff.sites" - diff_indv: - type: file - description: Discordance on a individual by individual basis, specified in optional inputs (optional) - pattern: "*.diff.indv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diff.indv": + type: file + description: Discordance on a individual by individual basis, specified in optional + inputs (optional) + pattern: "*.diff.indv" - diff_discd_matrix: - type: file - description: Discordance matrix between files specified in optional inputs (optional) - pattern: "*.diff.discordance.matrix" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diff.discordance.matrix": + type: file + description: Discordance matrix between files specified in optional inputs (optional) + pattern: "*.diff.discordance.matrix" - diff_switch_error: - type: file - description: Switch errors found between sites (optional) - pattern: "*.diff.switch" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.diff.switch": + type: file + description: Switch errors found between sites (optional) + pattern: "*.diff.switch" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Mark-S-Hill" maintainers: diff --git a/modules/nf-core/vcftools/tests/main.nf.test.snap b/modules/nf-core/vcftools/tests/main.nf.test.snap index 77669aadc4..e17865541f 100644 --- a/modules/nf-core/vcftools/tests/main.nf.test.snap +++ b/modules/nf-core/vcftools/tests/main.nf.test.snap @@ -1599,389 +1599,1025 @@ "content": [ { "0": [ - + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "1": [ - + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "10": [ - + [ + { + "id": "test" + }, + "test.geno.chisq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "11": [ - + [ + { + "id": "test" + }, + "test.list.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "12": [ - + [ + { + "id": "test" + }, + "test.list.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "13": [ - + [ + { + "id": "test" + }, + "test.interchrom.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "14": [ - + [ + { + "id": "test" + }, + "test.interchrom.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "15": [ - + [ + { + "id": "test" + }, + "test.TsTv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "16": [ - + [ + { + "id": "test" + }, + "test.TsTv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "17": [ - + [ + { + "id": "test" + }, + "test.TsTv.count:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "18": [ - + [ + { + "id": "test" + }, + "test.TsTv.qual:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "19": [ - + [ + { + "id": "test" + }, + "test.FILTER.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "2": [ - + [ + { + "id": "test" + }, + "test.frq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "20": [ - + [ + { + "id": "test" + }, + "test.sites.pi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "21": [ - + [ + { + "id": "test" + }, + "test.windowed.pi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "22": [ - + [ + { + "id": "test" + }, + "test.weir.fst:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "23": [ - + [ + { + "id": "test" + }, + "test.het:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "24": [ - + [ + { + "id": "test" + }, + "test.hwe:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "25": [ - + [ + { + "id": "test" + }, + "test.Tajima.D:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "26": [ - + [ + { + "id": "test" + }, + "test.ifreqburden:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "27": [ - + [ + { + "id": "test" + }, + "test.LROH:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "28": [ - + [ + { + "id": "test" + }, + "test.relatedness:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "29": [ - + [ + { + "id": "test" + }, + "test.relatedness2:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "3": [ - + [ + { + "id": "test" + }, + "test.frq.count:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "30": [ - + [ + { + "id": "test" + }, + "test.lqual:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "31": [ - + [ + { + "id": "test" + }, + "test.imiss:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "32": [ - + [ + { + "id": "test" + }, + "test.lmiss:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "33": [ - + [ + { + "id": "test" + }, + "test.snpden:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "34": [ - + [ + { + "id": "test" + }, + "test.kept.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "35": [ - + [ + { + "id": "test" + }, + "test.removed.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "36": [ - + [ + { + "id": "test" + }, + "test.singletons:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "37": [ - + [ + { + "id": "test" + }, + "test.indel.hist:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "38": [ - + [ + { + "id": "test" + }, + "test.hapcount:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "39": [ - + [ + { + "id": "test" + }, + "test.mendel:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "4": [ - + [ + { + "id": "test" + }, + "test.idepth:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "40": [ - + [ + { + "id": "test" + }, + "test.FORMAT:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "41": [ - + [ + { + "id": "test" + }, + "test.INFO:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "42": [ - + [ + { + "id": "test" + }, + "test.012:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "43": [ - + [ + { + "id": "test" + }, + "test.012.indv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "44": [ - + [ + { + "id": "test" + }, + "test.012.pos:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "45": [ - + [ + { + "id": "test" + }, + "test.impute.hap:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "46": [ - + [ + { + "id": "test" + }, + "test.impute.hap.legend:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "47": [ - + [ + { + "id": "test" + }, + "test.impute.hap.indv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "48": [ - + [ + { + "id": "test" + }, + "test.ldhat.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "49": [ - + [ + { + "id": "test" + }, + "test.ldhat.locs:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "5": [ - + [ + { + "id": "test" + }, + "test.ldepth:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "50": [ - + [ + { + "id": "test" + }, + "test.BEAGLE.GL:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "51": [ - + [ + { + "id": "test" + }, + "test.BEAGLE.PL:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "52": [ - + [ + { + "id": "test" + }, + "test.ped:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "53": [ - + [ + { + "id": "test" + }, + "test.map:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "54": [ - + [ + { + "id": "test" + }, + "test.tped:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "55": [ - + [ + { + "id": "test" + }, + "test.tfam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "56": [ - + [ + { + "id": "test" + }, + "test.diff.sites_in_files:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "57": [ - + [ + { + "id": "test" + }, + "test.diff.indv_in_files:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "58": [ - + [ + { + "id": "test" + }, + "test.diff.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "59": [ - + [ + { + "id": "test" + }, + "test.diff.indv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "6": [ - + [ + { + "id": "test" + }, + "test.ldepth.mean:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "60": [ - + [ + { + "id": "test" + }, + "test.diff.discordance.matrix:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "61": [ - + [ + { + "id": "test" + }, + "test.diff.switch:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "62": [ "versions.yml:md5,577abe71f1ed8b94c633e71dc2cfc491" ], "7": [ - + [ + { + "id": "test" + }, + "test.gdepth:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "8": [ - + [ + { + "id": "test" + }, + [ + "test.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.interchrom.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.list.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ], "9": [ - + [ + { + "id": "test" + }, + [ + "test.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.interchrom.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.list.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ], "bcf": [ - + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "beagle_gl": [ - + [ + { + "id": "test" + }, + "test.BEAGLE.GL:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "beagle_pl": [ - + [ + { + "id": "test" + }, + "test.BEAGLE.PL:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "diff_discd_matrix": [ - + [ + { + "id": "test" + }, + "test.diff.discordance.matrix:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "diff_indv": [ - + [ + { + "id": "test" + }, + "test.diff.indv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "diff_indv_in_files": [ - + [ + { + "id": "test" + }, + "test.diff.indv_in_files:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "diff_sites": [ - + [ + { + "id": "test" + }, + "test.diff.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "diff_sites_in_files": [ - + [ + { + "id": "test" + }, + "test.diff.sites_in_files:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "diff_switch_error": [ - + [ + { + "id": "test" + }, + "test.diff.switch:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "filter_summary": [ - + [ + { + "id": "test" + }, + "test.FILTER.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "format": [ - + [ + { + "id": "test" + }, + "test.FORMAT:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "freq_burden": [ - + [ + { + "id": "test" + }, + "test.ifreqburden:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "frq": [ - + [ + { + "id": "test" + }, + "test.frq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "frq_count": [ - + [ + { + "id": "test" + }, + "test.frq.count:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "gdepth": [ - + [ + { + "id": "test" + }, + "test.gdepth:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "geno_chisq": [ - + [ + { + "id": "test" + }, + "test.geno.chisq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "geno_ld": [ - + [ + { + "id": "test" + }, + [ + "test.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.interchrom.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.list.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ], "genotypes_matrix": [ - + [ + { + "id": "test" + }, + "test.012:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "genotypes_matrix_individual": [ - + [ + { + "id": "test" + }, + "test.012.indv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "genotypes_matrix_position": [ - + [ + { + "id": "test" + }, + "test.012.pos:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "hap_ld": [ - + [ + { + "id": "test" + }, + [ + "test.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.interchrom.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.list.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ], "hapcount": [ - + [ + { + "id": "test" + }, + "test.hapcount:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "heterozygosity": [ - + [ + { + "id": "test" + }, + "test.het:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "hwe": [ - + [ + { + "id": "test" + }, + "test.hwe:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "idepth": [ - + [ + { + "id": "test" + }, + "test.idepth:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "impute_hap": [ - + [ + { + "id": "test" + }, + "test.impute.hap:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "impute_hap_indv": [ - + [ + { + "id": "test" + }, + "test.impute.hap.indv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "impute_hap_legend": [ - + [ + { + "id": "test" + }, + "test.impute.hap.legend:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "indel_hist": [ - + [ + { + "id": "test" + }, + "test.indel.hist:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "info": [ - + [ + { + "id": "test" + }, + "test.INFO:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "interchrom_geno_ld": [ - + [ + { + "id": "test" + }, + "test.interchrom.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "interchrom_hap_ld": [ - + [ + { + "id": "test" + }, + "test.interchrom.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "kept_sites": [ - + [ + { + "id": "test" + }, + "test.kept.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "ldepth": [ - + [ + { + "id": "test" + }, + "test.ldepth:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "ldepth_mean": [ - + [ + { + "id": "test" + }, + "test.ldepth.mean:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "ldhat_locs": [ - + [ + { + "id": "test" + }, + "test.ldhat.locs:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "ldhat_sites": [ - + [ + { + "id": "test" + }, + "test.ldhat.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "list_geno_ld": [ - + [ + { + "id": "test" + }, + "test.list.geno.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "list_hap_ld": [ - + [ + { + "id": "test" + }, + "test.list.hap.ld:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "lqual": [ - + [ + { + "id": "test" + }, + "test.lqual:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "lroh": [ - + [ + { + "id": "test" + }, + "test.LROH:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "map_": [ - + [ + { + "id": "test" + }, + "test.map:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "mendel": [ - + [ + { + "id": "test" + }, + "test.mendel:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "missing_individual": [ - + [ + { + "id": "test" + }, + "test.imiss:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "missing_site": [ - + [ + { + "id": "test" + }, + "test.lmiss:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "ped": [ - + [ + { + "id": "test" + }, + "test.ped:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "relatedness": [ - + [ + { + "id": "test" + }, + "test.relatedness:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "relatedness2": [ - + [ + { + "id": "test" + }, + "test.relatedness2:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "removed_sites": [ - + [ + { + "id": "test" + }, + "test.removed.sites:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "singeltons": [ - + [ + { + "id": "test" + }, + "test.singletons:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "sites_pi": [ - + [ + { + "id": "test" + }, + "test.sites.pi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "snp_density": [ - + [ + { + "id": "test" + }, + "test.snpden:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tajima_d": [ - + [ + { + "id": "test" + }, + "test.Tajima.D:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tfam": [ - + [ + { + "id": "test" + }, + "test.tfam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tped": [ - + [ + { + "id": "test" + }, + "test.tped:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tstv": [ - + [ + { + "id": "test" + }, + "test.TsTv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tstv_count": [ - + [ + { + "id": "test" + }, + "test.TsTv.count:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tstv_qual": [ - + [ + { + "id": "test" + }, + "test.TsTv.qual:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "tstv_summary": [ - + [ + { + "id": "test" + }, + "test.TsTv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "vcf": [ - + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "versions": [ "versions.yml:md5,577abe71f1ed8b94c633e71dc2cfc491" ], "weir_fst": [ - + [ + { + "id": "test" + }, + "test.weir.fst:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "windowed_pi": [ - + [ + { + "id": "test" + }, + "test.windowed.pi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-22T13:07:31.866838" + "timestamp": "2024-06-24T13:34:42.814188" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_ngscheckmate/main.nf b/subworkflows/nf-core/bam_ngscheckmate/main.nf index 4dd106f327..629dbf25cd 100644 --- a/subworkflows/nf-core/bam_ngscheckmate/main.nf +++ b/subworkflows/nf-core/bam_ngscheckmate/main.nf @@ -46,4 +46,3 @@ workflow BAM_NGSCHECKMATE { versions = ch_versions // channel: [ versions.yml ] } - From 2cca752c947882dfc4d09104ab7588f00027f696 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 13:22:17 +0200 Subject: [PATCH 02/38] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79b1c35461..cc4706b0ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [1640](https://github.com/nf-core/sarek/pull/1620) - Add `lofreq` as a tumor-only variant caller. - [1642](https://github.com/nf-core/sarek/pull/1642) - Back to dev +- [1662](https://github.com/nf-core/sarek/pull/1662) - Massive conda modules update ### Changed From ff213d1037ae47d0f579e15ef98d6197473f8bf5 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 13:28:12 +0200 Subject: [PATCH 03/38] use new deepvariant module --- .../local/bam_variant_calling_deepvariant/main.nf | 10 +++++----- .../local/bam_variant_calling_germline_all/main.nf | 2 -- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/bam_variant_calling_deepvariant/main.nf b/subworkflows/local/bam_variant_calling_deepvariant/main.nf index feb7c33c08..047961c149 100644 --- a/subworkflows/local/bam_variant_calling_deepvariant/main.nf +++ b/subworkflows/local/bam_variant_calling_deepvariant/main.nf @@ -4,7 +4,7 @@ // For all modules here: // A when clause condition is defined in the conf/modules.config to determine if the module should be run -include { DEEPVARIANT } from '../../../modules/nf-core/deepvariant/main' +include { DEEPVARIANT_RUNDEEPVARIANT } from '../../../modules/nf-core/deepvariant/deepvariant_rundeepvariant/main' include { GATK4_MERGEVCFS as MERGE_DEEPVARIANT_GVCF } from '../../../modules/nf-core/gatk4/mergevcfs/main' include { GATK4_MERGEVCFS as MERGE_DEEPVARIANT_VCF } from '../../../modules/nf-core/gatk4/mergevcfs/main' @@ -25,17 +25,17 @@ workflow BAM_VARIANT_CALLING_DEEPVARIANT { // Move num_intervals to meta map .map{ meta, cram, crai, intervals, num_intervals -> [ meta + [ num_intervals:num_intervals ], cram, crai, intervals ]} - DEEPVARIANT(cram_intervals, fasta, fasta_fai, [ [ id:'null' ], [] ]) + DEEPVARIANT_RUNDEEPVARIANT(cram_intervals, fasta, fasta_fai, [ [ id:'null' ], [] ]) // Figuring out if there is one or more vcf(s) from the same sample - vcf_out = DEEPVARIANT.out.vcf.branch{ + vcf_out = DEEPVARIANT_RUNDEEPVARIANT.out.vcf.branch{ // Use meta.num_intervals to asses number of intervals intervals: it[0].num_intervals > 1 no_intervals: it[0].num_intervals <= 1 } // Figuring out if there is one or more gvcf(s) from the same sample - gvcf_out = DEEPVARIANT.out.gvcf.branch{ + gvcf_out = DEEPVARIANT_RUNDEEPVARIANT.out.gvcf.branch{ // Use meta.num_intervals to asses number of intervals intervals: it[0].num_intervals > 1 no_intervals: it[0].num_intervals <= 1 @@ -58,7 +58,7 @@ workflow BAM_VARIANT_CALLING_DEEPVARIANT { // add variantcaller to meta map and remove no longer necessary field: num_intervals .map{ meta, vcf -> [ meta - meta.subMap('num_intervals') + [ variantcaller:'deepvariant' ], vcf ] } - versions = versions.mix(DEEPVARIANT.out.versions) + versions = versions.mix(DEEPVARIANT_RUNDEEPVARIANT.out.versions) versions = versions.mix(MERGE_DEEPVARIANT_GVCF.out.versions) versions = versions.mix(MERGE_DEEPVARIANT_VCF.out.versions) diff --git a/subworkflows/local/bam_variant_calling_germline_all/main.nf b/subworkflows/local/bam_variant_calling_germline_all/main.nf index deb15527d7..dfb59cf707 100644 --- a/subworkflows/local/bam_variant_calling_germline_all/main.nf +++ b/subworkflows/local/bam_variant_calling_germline_all/main.nf @@ -18,8 +18,6 @@ include { SENTIEON_DNAMODELAPPLY include { VCF_VARIANT_FILTERING_GATK } from '../vcf_variant_filtering_gatk/main' include { VCF_VARIANT_FILTERING_GATK as SENTIEON_HAPLOTYPER_VCF_VARIANT_FILTERING_GATK } from '../vcf_variant_filtering_gatk/main' - - workflow BAM_VARIANT_CALLING_GERMLINE_ALL { take: tools // Mandatory, list of tools to apply From 6dcf5cb151f1f05aeb32a72b8b73b0d61ada1e42 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 13:37:14 +0200 Subject: [PATCH 04/38] typo --- subworkflows/local/bam_variant_calling_deepvariant/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/bam_variant_calling_deepvariant/main.nf b/subworkflows/local/bam_variant_calling_deepvariant/main.nf index 047961c149..459183e4c2 100644 --- a/subworkflows/local/bam_variant_calling_deepvariant/main.nf +++ b/subworkflows/local/bam_variant_calling_deepvariant/main.nf @@ -4,7 +4,7 @@ // For all modules here: // A when clause condition is defined in the conf/modules.config to determine if the module should be run -include { DEEPVARIANT_RUNDEEPVARIANT } from '../../../modules/nf-core/deepvariant/deepvariant_rundeepvariant/main' +include { DEEPVARIANT_RUNDEEPVARIANT } from '../../../modules/nf-core/deepvariant/rundeepvariant/main' include { GATK4_MERGEVCFS as MERGE_DEEPVARIANT_GVCF } from '../../../modules/nf-core/gatk4/mergevcfs/main' include { GATK4_MERGEVCFS as MERGE_DEEPVARIANT_VCF } from '../../../modules/nf-core/gatk4/mergevcfs/main' From 11aa12b7b01c6198062ac6bc00b62a9378a1cdbc Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 13:48:21 +0200 Subject: [PATCH 05/38] fix MULTIQC --- workflows/sarek/main.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflows/sarek/main.nf b/workflows/sarek/main.nf index 90307f19c2..6744c212a2 100644 --- a/workflows/sarek/main.nf +++ b/workflows/sarek/main.nf @@ -921,7 +921,9 @@ workflow SAREK { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) multiqc_report = MULTIQC.out.report.toList() From 506112cd5d5b9659e8b64ac3451fe5ed2a349ab7 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 17:22:55 +0200 Subject: [PATCH 06/38] fix bcftools_annotate usage --- subworkflows/local/vcf_annotate_bcftools/main.nf | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/vcf_annotate_bcftools/main.nf b/subworkflows/local/vcf_annotate_bcftools/main.nf index e54c52aa7c..dbba6186fb 100644 --- a/subworkflows/local/vcf_annotate_bcftools/main.nf +++ b/subworkflows/local/vcf_annotate_bcftools/main.nf @@ -3,8 +3,7 @@ // Run BCFtools to annotate VCF files // -include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' -include { TABIX_TABIX } from '../../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' workflow VCF_ANNOTATE_BCFTOOLS { take: @@ -17,15 +16,12 @@ workflow VCF_ANNOTATE_BCFTOOLS { main: ch_versions = Channel.empty() - BCFTOOLS_ANNOTATE(vcf, annotations, annotations_index, header_lines) - TABIX_TABIX(BCFTOOLS_ANNOTATE.out.vcf) - - ch_vcf_tbi = BCFTOOLS_ANNOTATE.out.vcf.join(TABIX_TABIX.out.tbi, failOnDuplicate: true, failOnMismatch: true) + BCFTOOLS_ANNOTATE(vcf, [], annotations, annotations_index, header_lines) + ch_vcf_tbi = BCFTOOLS_ANNOTATE.out.vcf.join(BCFTOOLS_ANNOTATE.out.tbi, failOnDuplicate: true, failOnMismatch: true) // Gather versions of all tools used ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) - ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) emit: vcf_tbi = ch_vcf_tbi // channel: [ val(meta), vcf.gz, vcf.gz.tbi ] From 77621d40c0c0aaf31aa4b8a377e5d3534f27d623 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 17:29:29 +0200 Subject: [PATCH 07/38] remove modules that should not have been installed --- modules.json | 15 -- .../nf-core/deepvariant/callvariants/main.nf | 58 ----- .../nf-core/deepvariant/callvariants/meta.yml | 48 ---- .../callvariants/tests/main.nf.test | 85 ------- .../callvariants/tests/main.nf.test.snap | 59 ----- .../callvariants/tests/nextflow.config | 11 - .../deepvariant/callvariants/tests/tags.yml | 2 - .../nf-core/deepvariant/makeexamples/main.nf | 66 ----- .../nf-core/deepvariant/makeexamples/meta.yml | 102 -------- .../makeexamples/tests/main.nf.test | 228 ------------------ .../makeexamples/tests/main.nf.test.snap | 134 ---------- .../makeexamples/tests/nextflow.config | 6 - .../deepvariant/makeexamples/tests/tags.yml | 2 - .../deepvariant/postprocessvariants/main.nf | 77 ------ .../deepvariant/postprocessvariants/meta.yml | 113 --------- .../postprocessvariants/tests/main.nf.test | 118 --------- .../tests/main.nf.test.snap | 180 -------------- .../postprocessvariants/tests/nextflow.config | 10 - .../postprocessvariants/tests/tags.yml | 2 - 19 files changed, 1316 deletions(-) delete mode 100644 modules/nf-core/deepvariant/callvariants/main.nf delete mode 100644 modules/nf-core/deepvariant/callvariants/meta.yml delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/makeexamples/main.nf delete mode 100644 modules/nf-core/deepvariant/makeexamples/meta.yml delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/main.nf delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/meta.yml delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml diff --git a/modules.json b/modules.json index 1db9d1ba15..99c6b9bdd1 100644 --- a/modules.json +++ b/modules.json @@ -122,21 +122,6 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, - "deepvariant/callvariants": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "deepvariant/makeexamples": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "deepvariant/postprocessvariants": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, "deepvariant/rundeepvariant": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/deepvariant/callvariants/main.nf b/modules/nf-core/deepvariant/callvariants/main.nf deleted file mode 100644 index 668b51ae4c..0000000000 --- a/modules/nf-core/deepvariant/callvariants/main.nf +++ /dev/null @@ -1,58 +0,0 @@ - -process DEEPVARIANT_CALLVARIANTS { - tag "$meta.id" - label 'process_high' - - //Conda is not supported at the moment - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(make_examples_tfrecords) - - output: - tuple val(meta), path("${prefix}.call-*-of-*.tfrecord.gz"), emit: call_variants_tfrecords - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - - def matcher = make_examples_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ - if (!matcher.matches()) { - throw new IllegalArgumentException("tfrecord baseName '" + make_examples_tfrecords[0].baseName + "' doesn't match the expected pattern") - } - def examples_tfrecord_name = matcher[0][1] - def shardCount = matcher[0][2] - // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz - def examples_tfrecords_logical_name = "${examples_tfrecord_name}@${shardCount}.gz" - - """ - /opt/deepvariant/bin/call_variants \\ - ${args} \\ - --outfile "${prefix}.call.tfrecord.gz" \\ - --examples "${examples_tfrecords_logical_name}" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - echo "" | gzip > ${prefix}.call-00000-of-00001.tfrecord.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/callvariants/meta.yml b/modules/nf-core/deepvariant/callvariants/meta.yml deleted file mode 100644 index 4507192ca2..0000000000 --- a/modules/nf-core/deepvariant/callvariants/meta.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: deepvariant_callvariants -description: Call variants from the examples produced by make_examples -keywords: - - variant calling - - machine learning - - neural network -tools: - - deepvariant: - description: DeepVariant is an analysis pipeline that uses a deep neural network - to call genetic variants from next-generation DNA sequencing data - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - make_examples_tfrecords: - type: file - description: The actual sharded input files, from DEEPVARIANT_MAKEEXAMPLES process - pattern: "*.gz" -output: - - call_variants_tfrecords: - - meta: - type: list - description: | - Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. - - ${prefix}.call-*-of-*.tfrecord.gz: - type: list - description: | - Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. - - versions: - - versions.yml: - type: file - description: File containing software version - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" - - "@fa2k" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test deleted file mode 100644 index 72f04b51f3..0000000000 --- a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test +++ /dev/null @@ -1,85 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_CALLVARIANTS" - script "../main.nf" - config "./nextflow.config" - process "DEEPVARIANT_CALLVARIANTS" - - tag "deepvariant/makeexamples" - tag "deepvariant/callvariants" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - wgs") { - setup { - run("DEEPVARIANT_MAKEEXAMPLES") { - script "../../makeexamples/main.nf" - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - } - when { - process { - """ - input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.call_variants_tfrecords.get(0).get(0) == [ id:'test', single_end:false ] }, - // The tfrecord binary representation is not stable, but we check the name of the output. - { assert snapshot(file(process.out.call_variants_tfrecords.get(0).get(1)).name).match("homo_sapiens-wgs-call_variants_tfrecords-filenames")}, - { assert snapshot(process.out.versions).match("versions") }, - ) - } - } - - test("homo_sapiens - wgs - stub") { - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta - [] // No input paths are needed in stub mode - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap deleted file mode 100644 index 8f04ede70e..0000000000 --- a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap +++ /dev/null @@ -1,59 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:38:47.927241" - }, - "homo_sapiens-wgs-call_variants_tfrecords-filenames": { - "content": [ - "test.call-00000-of-00001.tfrecord.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T17:04:33.276938" - }, - "homo_sapiens - wgs - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" - ], - "call_variants_tfrecords": [ - [ - { - "id": "test", - "single_end": false - }, - "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-13T21:07:17.335788301" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config deleted file mode 100644 index 590aa06023..0000000000 --- a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config +++ /dev/null @@ -1,11 +0,0 @@ -process { - withName: "DEEPVARIANT_CALLVARIANTS" { - ext.args = '--checkpoint "/opt/models/wgs"' - cpus = 2 // Keep CPUs fixed so the number of output files is reproducible - } -} -process { - withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--channels "insert_size"' - } -} diff --git a/modules/nf-core/deepvariant/callvariants/tests/tags.yml b/modules/nf-core/deepvariant/callvariants/tests/tags.yml deleted file mode 100644 index 02e63f5089..0000000000 --- a/modules/nf-core/deepvariant/callvariants/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/callvariants: - - modules/nf-core/deepvariant/callvariants/** diff --git a/modules/nf-core/deepvariant/makeexamples/main.nf b/modules/nf-core/deepvariant/makeexamples/main.nf deleted file mode 100644 index 022d0bf280..0000000000 --- a/modules/nf-core/deepvariant/makeexamples/main.nf +++ /dev/null @@ -1,66 +0,0 @@ -process DEEPVARIANT_MAKEEXAMPLES { - tag "$meta.id" - label 'process_high' - - //Conda is not supported at the moment - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(input), path(index), path(intervals) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(gzi) - tuple val(meta5), path(par_bed) - - output: - tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}"), emit: examples - tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), emit: gvcf - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def regions = intervals ? "--regions ${intervals}" : "" - def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" - - """ - seq 0 ${task.cpus - 1} | parallel -q --halt 2 --line-buffer /opt/deepvariant/bin/make_examples \\ - --mode calling \\ - --ref "${fasta}" \\ - --reads "${input}" \\ - --examples "./${prefix}.examples.tfrecord@${task.cpus}.gz" \\ - --gvcf "./${prefix}.gvcf.tfrecord@${task.cpus}.gz" \\ - ${regions} \\ - ${par_regions} \\ - ${args} \\ - --task {} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - printf -v SHARD_COUNT "%04d" ${task.cpus} - for i in \$( seq -f "%04g" 0 ${task.cpus-1} ) - do - touch ${prefix}.examples.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz{,.example_info.json} - touch ${prefix}.gvcf.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz - done - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/makeexamples/meta.yml b/modules/nf-core/deepvariant/makeexamples/meta.yml deleted file mode 100644 index 6fb9f1b814..0000000000 --- a/modules/nf-core/deepvariant/makeexamples/meta.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: deepvariant_makeexamples -description: Transforms the input alignments to a format suitable for the deep neural - network variant caller -keywords: - - variant calling - - machine learning - - neural network -tools: - - deepvariant: - description: DeepVariant is an analysis pipeline that uses a deep neural network - to call genetic variants from next-generation DNA sequencing data - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.bam/cram" - - index: - type: file - description: Index of BAM/CRAM file - pattern: "*.bai/crai" - - intervals: - type: file - description: Interval file for targeted regions - pattern: "*.bed" - - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fai" - - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - gzi: - type: file - description: GZI index of reference fasta file - - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - pattern: "*.gzi" - - par_bed: - type: file - description: BED file containing PAR regions - pattern: "*.bed" -output: - - examples: - - meta: - type: list - description: | - Tuple containing sample metadata and examples that can be used for calling - - ${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}: - type: list - description: | - Tuple containing sample metadata and examples that can be used for calling - - gvcf: - - meta: - type: list - description: | - Tuple containing sample metadata and the GVCF data in tfrecord format - - ${prefix}.gvcf.tfrecord-*-of-*.gz: - type: list - description: | - Tuple containing sample metadata and the GVCF data in tfrecord format - - versions: - - versions.yml: - type: file - description: File containing the DeepVariant software version - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" - - "@fa2k" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test deleted file mode 100644 index d46dbe6d57..0000000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test +++ /dev/null @@ -1,228 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_MAKEEXAMPLES" - script "../main.nf" - config "./nextflow.config" - process "DEEPVARIANT_MAKEEXAMPLES" - - tag "deepvariant/makeexamples" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - [bam, bai] - fasta - fai") { - when { - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - // Test string values and versions. The tfrecords contents are not stable, but we check the names. - { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file name list - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test1-exaamples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf file name list - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test1-gvcf-filenames")}, - { assert snapshot(process.out.versions).match("test1-versions") }, - ) - } - } - - test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, - // The test is always run with 2 cpus - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file names - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test2-examples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf tfrecord file names - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test2-gvcf-filenames")}, - { assert snapshot(process.out.versions).match("test2-versions") }, - ) - } - } - - test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { - when { - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) - ] - input[3] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - - { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, - // The test is always run with 2 cpus - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file name list - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test3-examples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf file name list - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test3-gvcf-filenames")}, - { assert snapshot(process.out.versions).match("test3-versions") }, - ) - } - } - - test("stub") { - - options "-stub" - - when { - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file name list - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test4-examples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf file name list - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test4-gvcf-filenames")}, - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap deleted file mode 100644 index 24182c54a0..0000000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap +++ /dev/null @@ -1,134 +0,0 @@ -{ - "test1-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:09:47.885995" - }, - "test2-examples-filenames": { - "content": [ - "test.examples.tfrecord-00000-of-00002.gz", - "test.examples.tfrecord-00000-of-00002.gz.example_info.json", - "test.examples.tfrecord-00001-of-00002.gz", - "test.examples.tfrecord-00001-of-00002.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:02.757227" - }, - "test2-versions": { - "content": [ - [ - "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:39:28.960959" - }, - "test4-examples-filenames": { - "content": [ - "test.examples.tfrecord-0000-of-0002.tfrecord.gz", - "test.examples.tfrecord-0000-of-0002.tfrecord.gz.example_info.json", - "test.examples.tfrecord-0001-of-0002.tfrecord.gz", - "test.examples.tfrecord-0001-of-0002.tfrecord.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:27.41698" - }, - "test1-versions": { - "content": [ - [ - "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:39:13.57526" - }, - "test3-examples-filenames": { - "content": [ - "test.examples.tfrecord-00000-of-00002.gz", - "test.examples.tfrecord-00000-of-00002.gz.example_info.json", - "test.examples.tfrecord-00001-of-00002.gz", - "test.examples.tfrecord-00001-of-00002.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:17.705948" - }, - "test2-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:02.765863" - }, - "test4-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-0000-of-0002.tfrecord.gz", - "test.gvcf.tfrecord-0001-of-0002.tfrecord.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:27.423442" - }, - "test3-versions": { - "content": [ - [ - "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:39:44.83616" - }, - "test1-exaamples-filenames": { - "content": [ - "test.examples.tfrecord-00000-of-00002.gz", - "test.examples.tfrecord-00000-of-00002.gz.example_info.json", - "test.examples.tfrecord-00001-of-00002.gz", - "test.examples.tfrecord-00001-of-00002.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:09:47.874585" - }, - "test3-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:17.714443" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config deleted file mode 100644 index 5f071fcb34..0000000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--channels "insert_size"' - cpus = 2 // The number of output files is determined by cpus - keep it the same for tests - } -} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/tags.yml b/modules/nf-core/deepvariant/makeexamples/tests/tags.yml deleted file mode 100644 index 6a13da0959..0000000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/makeexamples: - - modules/nf-core/deepvariant/makeexamples/** diff --git a/modules/nf-core/deepvariant/postprocessvariants/main.nf b/modules/nf-core/deepvariant/postprocessvariants/main.nf deleted file mode 100644 index 90e8563deb..0000000000 --- a/modules/nf-core/deepvariant/postprocessvariants/main.nf +++ /dev/null @@ -1,77 +0,0 @@ -process DEEPVARIANT_POSTPROCESSVARIANTS { - tag "$meta.id" - label 'process_medium' - - //Conda is not supported at the moment - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(gzi) - - output: - tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf - tuple val(meta), path("${prefix}.vcf.gz.tbi") , emit: vcf_tbi - tuple val(meta), path("${prefix}.g.vcf.gz") , emit: gvcf - tuple val(meta), path("${prefix}.g.vcf.gz.tbi"), emit: gvcf_tbi - - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - - def variant_calls_tfrecord_name = variant_calls_tfrecord_files[0].name.replaceFirst(/-\d{5}-of-\d{5}/, "") - - def gvcf_matcher = gvcf_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ - if (!gvcf_matcher.matches()) { - throw new IllegalArgumentException("tfrecord baseName '" + gvcf_tfrecords[0].baseName + "' doesn't match the expected pattern") - } - def gvcf_tfrecord_name = gvcf_matcher[0][1] - def gvcf_shardCount = gvcf_matcher[0][2] - // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz - def gvcf_tfrecords_logical_name = "${gvcf_tfrecord_name}@${gvcf_shardCount}.gz" - - """ - /opt/deepvariant/bin/postprocess_variants \\ - ${args} \\ - --ref "${fasta}" \\ - --infile "${variant_calls_tfrecord_name}" \\ - --outfile "${prefix}.vcf.gz" \\ - --nonvariant_site_tfrecord_path "${gvcf_tfrecords_logical_name}" \\ - --gvcf_outfile "${prefix}.g.vcf.gz" \\ - --cpus $task.cpus - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_postprocessvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ - - stub: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - prefix = task.ext.prefix ?: "${meta.id}" - """ - echo "" | gzip > ${prefix}.vcf.gz - touch ${prefix}.vcf.gz.tbi - echo "" | gzip > ${prefix}.g.vcf.gz - touch ${prefix}.g.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/postprocessvariants/meta.yml b/modules/nf-core/deepvariant/postprocessvariants/meta.yml deleted file mode 100644 index 132a526322..0000000000 --- a/modules/nf-core/deepvariant/postprocessvariants/meta.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: deepvariant_postprocessvariants -description: DeepVariant is an analysis pipeline that uses a deep neural network to - call genetic variants from next-generation DNA sequencing data -keywords: - - variant calling - - machine learning - - neural network -tools: - - deepvariant: - description: DeepVariant is an analysis pipeline that uses a deep neural network - to call genetic variants from next-generation DNA sequencing data - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - variant_calls_tfrecord_files: - type: file - description: | - One or more data files containing variant calls from DEEPVARIANT_CALLVARIANTS - pattern: "*.tfrecord.gz" - - gvcf_tfrecords: - type: file - description: | - Sharded tfrecord file from DEEPVARIANT_MAKEEXAMPLES with the coverage information used for GVCF output - pattern: "*.gz" - - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fai" - - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - gzi: - type: file - description: GZI index of reference fasta file - pattern: "*.gzi" -output: - - vcf: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.vcf.gz: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" - - vcf_tbi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.vcf.gz.tbi: - type: file - description: Index for VCF - pattern: "*.vcf.gz.tbi" - - gvcf: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.g.vcf.gz: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" - - gvcf_tbi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.g.vcf.gz.tbi: - type: file - description: Index for GVCF - pattern: "*.g.vcf.gz.tbi" - - versions: - - versions.yml: - type: file - description: File containing software version - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" - - "@fa2k" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test deleted file mode 100644 index e4e9b5570c..0000000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test +++ /dev/null @@ -1,118 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_POSTPROCESSVARIANTS" - script "../main.nf" - process "DEEPVARIANT_POSTPROCESSVARIANTS" - config "./nextflow.config" - - tag "deepvariant/makeexamples" - tag "deepvariant/callvariants" - tag "deepvariant/postprocessvariants" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - wgs") { - setup { - run("DEEPVARIANT_MAKEEXAMPLES") { - script "../../makeexamples/main.nf" - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - run("DEEPVARIANT_CALLVARIANTS") { - script "../../callvariants/main.nf" - process { - """ - input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples - """ - } - } - } - when { - process { - """ - input[0] = DEEPVARIANT_CALLVARIANTS.out.call_variants_tfrecords.join( - DEEPVARIANT_MAKEEXAMPLES.out.gvcf, - failOnMismatch: true - ) - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - wgs - stub") { - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], - [], - [], - [], - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match("stub") } - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap deleted file mode 100644 index 5a29c624e5..0000000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap +++ /dev/null @@ -1,180 +0,0 @@ -{ - "stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:40:38.231189" - }, - "homo_sapiens - wgs": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:46:15.793662" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config deleted file mode 100644 index 070b4892f8..0000000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config +++ /dev/null @@ -1,10 +0,0 @@ -process { - withName: "DEEPVARIANT_CALLVARIANTS" { - ext.args = '--checkpoint "/opt/models/wgs"' - } -} -process { - withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--channels "insert_size"' - } -} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml b/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml deleted file mode 100644 index d26188cd7a..0000000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/postprocessvariants: - - modules/nf-core/deepvariant/postprocessvariants/** From 08b3ebff1c2b5cf3b0df5ebff777da33112e076c Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 17:43:09 +0200 Subject: [PATCH 08/38] trying to make sure we run with profile test --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4252b0d63c..172c3ce6b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -343,7 +343,7 @@ jobs: - name: Run nf-test run: | nf-test test \ - --profile=${{ matrix.profile }} \ + --profile="+${{ matrix.profile }}" \ --tag ${{ matrix.tags }} \ --tap=test.tap \ --verbose From 96aa52e7f773974d3201225c57937f22cff0be76 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:01:29 +0200 Subject: [PATCH 09/38] fix a couple tests --- subworkflows/local/bam_joint_calling_germline_gatk/main.nf | 2 +- subworkflows/local/bam_variant_calling_deepvariant/main.nf | 2 +- tests/test_lofreq.yml | 4 ++-- workflows/sarek/main.nf | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/bam_joint_calling_germline_gatk/main.nf b/subworkflows/local/bam_joint_calling_germline_gatk/main.nf index 4d030ba5c5..918e96a447 100644 --- a/subworkflows/local/bam_joint_calling_germline_gatk/main.nf +++ b/subworkflows/local/bam_joint_calling_germline_gatk/main.nf @@ -52,7 +52,7 @@ workflow BAM_JOINT_CALLING_GERMLINE_GATK { // Joint genotyping performed using GenotypeGVCFs // Sort vcfs called by interval within each VCF - GATK4_GENOTYPEGVCFS(genotype_input, fasta.map{ meta, fasta -> [ fasta ] }, fai.map{ meta, fai -> [ fai ] }, dict.map{ meta, dict -> [ dict ] }, dbsnp, dbsnp_tbi) + GATK4_GENOTYPEGVCFS(genotype_input, fasta, fai, dict, dbsnp, dbsnp_tbi) BCFTOOLS_SORT(GATK4_GENOTYPEGVCFS.out.vcf) gvcf_to_merge = BCFTOOLS_SORT.out.vcf.map{ meta, vcf -> [ meta.subMap('num_intervals') + [ id:'joint_variant_calling', patient:'all_samples', variantcaller:'haplotypecaller' ], vcf ]}.groupTuple() diff --git a/subworkflows/local/bam_variant_calling_deepvariant/main.nf b/subworkflows/local/bam_variant_calling_deepvariant/main.nf index 459183e4c2..567050b505 100644 --- a/subworkflows/local/bam_variant_calling_deepvariant/main.nf +++ b/subworkflows/local/bam_variant_calling_deepvariant/main.nf @@ -25,7 +25,7 @@ workflow BAM_VARIANT_CALLING_DEEPVARIANT { // Move num_intervals to meta map .map{ meta, cram, crai, intervals, num_intervals -> [ meta + [ num_intervals:num_intervals ], cram, crai, intervals ]} - DEEPVARIANT_RUNDEEPVARIANT(cram_intervals, fasta, fasta_fai, [ [ id:'null' ], [] ]) + DEEPVARIANT_RUNDEEPVARIANT(cram_intervals, fasta, fasta_fai, [ [ id:'null' ], [] ], [ [ id:'null' ], [] ]) // Figuring out if there is one or more vcf(s) from the same sample vcf_out = DEEPVARIANT_RUNDEEPVARIANT.out.vcf.branch{ diff --git a/tests/test_lofreq.yml b/tests/test_lofreq.yml index c0ad829101..b5a268ad5f 100644 --- a/tests/test_lofreq.yml +++ b/tests/test_lofreq.yml @@ -12,7 +12,7 @@ md5sum: 9c9de2e4ed2f324adf1912a45d73601f # conda changes md5sums for test - path: results/reports/samtools/sample2/sample2.recal.cram.stats - md5sum: b6c2b9056dfc441fddae989cc85f4135 + # unstable # conda changes md5sums for test - path: results/variant_calling/lofreq/sample2/sample2.lofreq.vcf.gz contains: @@ -45,7 +45,7 @@ md5sum: e838ce412fc091918059e79727b35785 # conda changes md5sums for test - path: results/reports/samtools/sample2/sample2.recal.cram.stats - md5sum: b6c2b9056dfc441fddae989cc85f4135 + # unstable # conda changes md5sums for test - path: results/variant_calling/lofreq/sample2/sample2.lofreq.vcf.gz contains: diff --git a/workflows/sarek/main.nf b/workflows/sarek/main.nf index 6744c212a2..18a4e12f05 100644 --- a/workflows/sarek/main.nf +++ b/workflows/sarek/main.nf @@ -249,6 +249,7 @@ workflow SAREK { FASTP( reads_for_fastp, [], // we are not using any adapter fastas at the moment + false, // we don't use discard_trimmed_pass at the moment save_trimmed_fail, save_merged ) From 102ea37408fd97f4839912a9bf33b5a846cffcf2 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:03:32 +0200 Subject: [PATCH 10/38] exclude tests for diff --- .github/workflows/ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 172c3ce6b3..4bf7753bd6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -238,6 +238,7 @@ jobs: - tags: "cnvkit/antitarget" - tags: "cnvkit/batch" - tags: "cnvkit/reference" + - tags: "controlfreec/assesssignificance" - tags: "deepvariant" - tags: "dragmap/align" - tags: "dragmap/hashtable" @@ -274,10 +275,6 @@ jobs: - tags: "tabix/tabix" - tags: "tiddit/sv" - tags: "untar" - - tags: "pipeline_sarek" - include: - - tags: "pipeline_sarek" - profile: "test,docker" steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 From 8368eaeb066e07f0bce4baf93dc0bd2dfd456862 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:09:33 +0200 Subject: [PATCH 11/38] exclude tests because of missing dependency --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4bf7753bd6..1373c2c7c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -246,6 +246,7 @@ jobs: - tags: "ensemblvep/vep" - tags: "fastp" - tags: "fastqc" + - tags: "fgbio/callmolecularconsensusreads" - tags: "fgbio/fastqtobam" - tags: "freebayes" - tags: "gatk4/applybqsr" From 8c5e8e74f803aaf4c0abafeea7b879478a93ce72 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:19:59 +0200 Subject: [PATCH 12/38] add default values for new options --- subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf b/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf index c237e64014..7b803df607 100644 --- a/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf +++ b/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf @@ -50,7 +50,10 @@ workflow FASTQ_CREATE_UMI_CONSENSUS_FGBIO { // Using newly created groups // To call a consensus across reads in the same group // And emit a consensus BAM file - CALLUMICONSENSUS(GROUPREADSBYUMI.out.bam) + // TODO: add params for call_min_reads and call_min_baseq + call_min_reads = '' + call_min_baseq = 10 + CALLUMICONSENSUS(GROUPREADSBYUMI.out.bam, call_min_reads, call_min_baseq) ch_versions = ch_versions.mix(BAM2FASTQ.out.versions) ch_versions = ch_versions.mix(ALIGN_UMI.out.versions) From ac569b4f19ea479bea83a72fcb66c81019ddc832 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:22:36 +0200 Subject: [PATCH 13/38] fix usage --- subworkflows/local/vcf_annotate_bcftools/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/vcf_annotate_bcftools/main.nf b/subworkflows/local/vcf_annotate_bcftools/main.nf index dbba6186fb..117c69c3f8 100644 --- a/subworkflows/local/vcf_annotate_bcftools/main.nf +++ b/subworkflows/local/vcf_annotate_bcftools/main.nf @@ -16,7 +16,7 @@ workflow VCF_ANNOTATE_BCFTOOLS { main: ch_versions = Channel.empty() - BCFTOOLS_ANNOTATE(vcf, [], annotations, annotations_index, header_lines) + BCFTOOLS_ANNOTATE(vcf.map{ meta, vcf -> [ meta, vcf, [] ] } annotations, annotations_index, header_lines) ch_vcf_tbi = BCFTOOLS_ANNOTATE.out.vcf.join(BCFTOOLS_ANNOTATE.out.tbi, failOnDuplicate: true, failOnMismatch: true) From 92e39073a0f38c7a2e49964bb6ad16ef1473df80 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:28:44 +0200 Subject: [PATCH 14/38] typo --- subworkflows/local/vcf_annotate_bcftools/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/vcf_annotate_bcftools/main.nf b/subworkflows/local/vcf_annotate_bcftools/main.nf index 117c69c3f8..9f23a426ca 100644 --- a/subworkflows/local/vcf_annotate_bcftools/main.nf +++ b/subworkflows/local/vcf_annotate_bcftools/main.nf @@ -16,7 +16,7 @@ workflow VCF_ANNOTATE_BCFTOOLS { main: ch_versions = Channel.empty() - BCFTOOLS_ANNOTATE(vcf.map{ meta, vcf -> [ meta, vcf, [] ] } annotations, annotations_index, header_lines) + BCFTOOLS_ANNOTATE(vcf.map{ meta, vcf -> [ meta, vcf, [] ] }, annotations, annotations_index, header_lines) ch_vcf_tbi = BCFTOOLS_ANNOTATE.out.vcf.join(BCFTOOLS_ANNOTATE.out.tbi, failOnDuplicate: true, failOnMismatch: true) From 2dd70b9e49054b6ca45bac72c1dfc223ebf8eb42 Mon Sep 17 00:00:00 2001 From: Maxime U Garcia Date: Mon, 23 Sep 2024 18:38:05 +0200 Subject: [PATCH 15/38] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8710b08ffa..f62a0806ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [1640](https://github.com/nf-core/sarek/pull/1620) - Add `lofreq` as a tumor-only variant caller. - [1642](https://github.com/nf-core/sarek/pull/1642) - Back to dev - [1660](https://github.com/nf-core/sarek/pull/1642) - Add `--length_required` for minimal reads length with `FASTP` -- [1662](https://github.com/nf-core/sarek/pull/1662) - Massive conda modules update +- [1663](https://github.com/nf-core/sarek/pull/1663) - Massive conda modules update ### Changed From a2a14625666f5af14cdea62f7c002da1585b0b49 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 18:55:22 +0200 Subject: [PATCH 16/38] fix bcftools annotate usage --- conf/modules/annotate.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules/annotate.config b/conf/modules/annotate.config index b02c1b3ef3..6459a686fa 100644 --- a/conf/modules/annotate.config +++ b/conf/modules/annotate.config @@ -64,12 +64,12 @@ process { // BCFTOOLS ANNOTATE if (params.tools && params.tools.split(',').contains('bcfann')) { withName: 'NFCORE_SAREK:SAREK:VCF_ANNOTATE_ALL:VCF_ANNOTATE_BCFTOOLS:BCFTOOLS_ANNOTATE' { - ext.args = { '--output-type z' } + ext.args = { '--output-type z --write-index=tbi' } ext.prefix = { input.baseName - '.vcf' + '_BCF.ann' } publishDir = [ mode: params.publish_dir_mode, path: { "${params.outdir}/annotation/${meta.variantcaller}/${meta.id}/" }, - pattern: "*{gz}" + pattern: "*{gz,gz.tbi}" ] } } From 73c9f0e80799253940a8cd7864102f76000cf8b5 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Mon, 23 Sep 2024 20:12:41 +0200 Subject: [PATCH 17/38] exclude tests because of missing dependency --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1373c2c7c3..bb2bacd592 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -239,6 +239,7 @@ jobs: - tags: "cnvkit/batch" - tags: "cnvkit/reference" - tags: "controlfreec/assesssignificance" + - tags: "controlfreec/freec" - tags: "deepvariant" - tags: "dragmap/align" - tags: "dragmap/hashtable" @@ -269,6 +270,7 @@ jobs: - tags: "samtools/mpileup" - tags: "samtools/stats" - tags: "snpeff/snpeff" + - tags: "spring/decompress" - tags: "strelka/germline" - tags: "strelka/somatic" - tags: "subworkflows/utils_nfvalidation_plugin" From 782d0a9824743b3d2f18a5a4be69ef42d1815c01 Mon Sep 17 00:00:00 2001 From: maxulysse Date: Tue, 24 Sep 2024 09:05:31 +0200 Subject: [PATCH 18/38] Fix default value --- subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf b/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf index 7b803df607..e683ad72c0 100644 --- a/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf +++ b/subworkflows/local/fastq_create_umi_consensus_fgbio/main.nf @@ -51,7 +51,7 @@ workflow FASTQ_CREATE_UMI_CONSENSUS_FGBIO { // To call a consensus across reads in the same group // And emit a consensus BAM file // TODO: add params for call_min_reads and call_min_baseq - call_min_reads = '' + call_min_reads = 1 call_min_baseq = 10 CALLUMICONSENSUS(GROUPREADSBYUMI.out.bam, call_min_reads, call_min_baseq) From 1c02dfdc8b2975685fdd017859eb3e8ee3e0b7aa Mon Sep 17 00:00:00 2001 From: maxulysse Date: Tue, 24 Sep 2024 09:12:23 +0200 Subject: [PATCH 19/38] fix usage of GATK4_GENOTYPEGVCFS --- subworkflows/local/bam_joint_calling_germline_gatk/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/bam_joint_calling_germline_gatk/main.nf b/subworkflows/local/bam_joint_calling_germline_gatk/main.nf index 918e96a447..46357d6fbe 100644 --- a/subworkflows/local/bam_joint_calling_germline_gatk/main.nf +++ b/subworkflows/local/bam_joint_calling_germline_gatk/main.nf @@ -52,7 +52,7 @@ workflow BAM_JOINT_CALLING_GERMLINE_GATK { // Joint genotyping performed using GenotypeGVCFs // Sort vcfs called by interval within each VCF - GATK4_GENOTYPEGVCFS(genotype_input, fasta, fai, dict, dbsnp, dbsnp_tbi) + GATK4_GENOTYPEGVCFS(genotype_input, fasta, fai, dict, dbsnp.map{ it -> [ [:], it ] }, dbsnp_tbi.map{ it -> [ [:], it ] }) BCFTOOLS_SORT(GATK4_GENOTYPEGVCFS.out.vcf) gvcf_to_merge = BCFTOOLS_SORT.out.vcf.map{ meta, vcf -> [ meta.subMap('num_intervals') + [ id:'joint_variant_calling', patient:'all_samples', variantcaller:'haplotypecaller' ], vcf ]}.groupTuple() From d61d45664c7cbae2626b490e3cb6115b1c496f9f Mon Sep 17 00:00:00 2001 From: maxulysse Date: Tue, 24 Sep 2024 09:23:37 +0200 Subject: [PATCH 20/38] fix expected content --- tests/test_annotation_merge.yml | 2 +- tests/test_annotation_vep.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_annotation_merge.yml b/tests/test_annotation_merge.yml index 7c39948743..03b163a1af 100644 --- a/tests/test_annotation_merge.yml +++ b/tests/test_annotation_merge.yml @@ -9,7 +9,7 @@ - path: results/annotation/test/test_snpEff_VEP.ann.vcf.gz.tbi # binary changes md5sums on reruns - path: results/reports/EnsemblVEP/test/test_snpEff_VEP.ann.summary.html - contains: ["test_snpEff.ann.vcf.gzOutput filetest_snpEff_VEP.ann.vcf.gz"] + contains: ["test_snpEff.ann.vcf.gzOutput file
test_snpEff_VEP.ann.vcf.gz"]
     - path: results/multiqc
     - path: results/annotation/test/test_snpEff.ann.vcf.gz
       should_exist: false
diff --git a/tests/test_annotation_vep.yml b/tests/test_annotation_vep.yml
index c8c16747b2..0965631832 100644
--- a/tests/test_annotation_vep.yml
+++ b/tests/test_annotation_vep.yml
@@ -10,7 +10,7 @@
     # binary changes md5sums on reruns
     - path: results/multiqc
     - path: results/reports/EnsemblVEP/test/test_VEP.ann.summary.html
-      contains: ["test.vcf.gzOutput filetest_VEP.ann.vcf.gz"]
+      contains: ["test.vcf.gz
Output file
test_VEP.ann.vcf.gz"]
 - name: Run VEP with fasta
   command: nextflow run main.nf -profile test,annotation --tools vep --vep_include_fasta --outdir results --download_cache
   tags:
@@ -24,4 +24,4 @@
     - path: results/multiqc
     - path: results/reports/EnsemblVEP/test/test_VEP.ann.summary.html
       # text-based file changes md5sums on reruns
-      contains: ["test.vcf.gzOutput filetest_VEP.ann.vcf.gz"]
+      contains: ["test.vcf.gz
Output file
test_VEP.ann.vcf.gz"]

From f939581e2f5de6652a98112def07650ece5f0aa1 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Tue, 24 Sep 2024 09:30:42 +0200
Subject: [PATCH 21/38] exclude tests coming from modules

---
 .github/workflows/ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bb2bacd592..e93aa2ce60 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -269,6 +269,8 @@ jobs:
           - tags: "samtools/convert"
           - tags: "samtools/mpileup"
           - tags: "samtools/stats"
+          - tags: "sentieon/bwamem"
+          - tags: "sentieon/haplotyper"
           - tags: "snpeff/snpeff"
           - tags: "spring/decompress"
           - tags: "strelka/germline"

From 4e5adf45a168a24f4957a254520def16978e8a00 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Tue, 24 Sep 2024 09:58:14 +0200
Subject: [PATCH 22/38] fix usage

---
 conf/modules/deepvariant.config | 4 ++--
 conf/modules/umi.config         | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/conf/modules/deepvariant.config b/conf/modules/deepvariant.config
index 021990f7f6..ef5e31b796 100644
--- a/conf/modules/deepvariant.config
+++ b/conf/modules/deepvariant.config
@@ -15,8 +15,8 @@
 
 process {
 
-    withName: 'DEEPVARIANT' {
-        ext.args   = { params.wes ?  "--model_type WES" : "--model_type WGS" }
+    withName: 'DEEPVARIANT_RUNDEEPVARIANT' {
+        ext.args   = { params.wes ?  "--model_type=WES" : "--model_type=WGS" }
         ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.deepvariant" : "${meta.id}.deepvariant.${intervals.baseName}" }
         ext.when   = { params.tools && params.tools.split(',').contains('deepvariant') }
         publishDir = [
diff --git a/conf/modules/umi.config b/conf/modules/umi.config
index 7973dd16d8..336a02088f 100644
--- a/conf/modules/umi.config
+++ b/conf/modules/umi.config
@@ -73,7 +73,7 @@ process {
     }
 
     withName: 'CALLUMICONSENSUS' {
-        ext.args   = { '-M 1 -S Coordinate' }
+        ext.args   = { '-S Coordinate' }
         ext.prefix = { "${meta.id}_umi-consensus" }
         publishDir = [
             path: { "${params.outdir}/preprocessing/umi/${meta.sample}" },

From 2c4225af48aca498af699427dc68e22ee0e47c43 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Tue, 24 Sep 2024 10:05:09 +0200
Subject: [PATCH 23/38] exclude tests coming from modules + use debug

---
 .github/workflows/ci.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e93aa2ce60..5ff2911931 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -240,7 +240,7 @@ jobs:
           - tags: "cnvkit/reference"
           - tags: "controlfreec/assesssignificance"
           - tags: "controlfreec/freec"
-          - tags: "deepvariant"
+          - tags: "deepvariant/rundeepvariant"
           - tags: "dragmap/align"
           - tags: "dragmap/hashtable"
           - tags: "ensemblvep/download"
@@ -348,6 +348,7 @@ jobs:
             --profile="+${{ matrix.profile }}" \
             --tag ${{ matrix.tags }} \
             --tap=test.tap \
+            --debug \
             --verbose
 
   confirm-pass:

From 240db8dc5a5025efd8314748ee11708a795d050f Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Tue, 24 Sep 2024 11:50:19 +0200
Subject: [PATCH 24/38] update CHANGELOG

---
 CHANGELOG.md | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80923e45d5..f9bcc616b4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,12 +25,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Dependencies
 
-| Dependency | Old version | New version |
-| ---------- | ----------- | ----------- |
-| `lofreq`   |             | 2.1.5       |
+| Dependency    | Old version | New version |
+| ------------- | ----------- | ----------- |
+| `deepvariant` | 1.5.0       | 1.6.1       |
+| `ensemblvep`  | 111.0       | 112.0       |
+| `fgbio`       | 2.0.2       | 2.1.2       |
+| `htslib`      | 1.20        | 1.21        |
+| `lofreq`      |             | 2.1.5       |
+| `multiqc`     | 1.21        | 1.24.1      |
+| `samtools`    | 1.20        | 1.21        |
 
 ### Parameters
 
+| Params          | Status  |
+| --------------- | ------- |
+| `snpeff_db`     | Updated |
+| `snpeff_genome` | Removed |
+
 ## [3.4.4](https://github.com/nf-core/sarek/releases/tag/3.4.4) - Ruopsokjåkhå
 
 Ruopsokjåkhå is another peak of the Pårte massif.

From f14897230761f504240d1346ebd22b218c5cb6fd Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Tue, 24 Sep 2024 11:53:07 +0200
Subject: [PATCH 25/38] properly update samtools

---
 modules.json                                   | 18 +++++++++---------
 .../nf-core/samtools/bam2fq/environment.yml    |  7 ++++---
 .../samtools/collatefastq/environment.yml      |  7 ++++---
 .../nf-core/samtools/convert/environment.yml   |  7 ++++---
 modules/nf-core/samtools/faidx/environment.yml |  3 ++-
 modules/nf-core/samtools/index/environment.yml |  7 ++++---
 modules/nf-core/samtools/merge/environment.yml |  7 ++++---
 .../nf-core/samtools/mpileup/environment.yml   |  7 ++++---
 modules/nf-core/samtools/stats/environment.yml |  7 ++++---
 modules/nf-core/samtools/view/environment.yml  |  7 ++++---
 10 files changed, 43 insertions(+), 34 deletions(-)

diff --git a/modules.json b/modules.json
index 99c6b9bdd1..f74a337ced 100644
--- a/modules.json
+++ b/modules.json
@@ -361,47 +361,47 @@
                     },
                     "samtools/bam2fq": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/collatefastq": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/convert": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/faidx": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/index": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/merge": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/mpileup": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/stats": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "samtools/view": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
                         "installed_by": ["modules"]
                     },
                     "sentieon/applyvarcal": {
diff --git a/modules/nf-core/samtools/bam2fq/environment.yml b/modules/nf-core/samtools/bam2fq/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/bam2fq/environment.yml
+++ b/modules/nf-core/samtools/bam2fq/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/collatefastq/environment.yml b/modules/nf-core/samtools/collatefastq/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/collatefastq/environment.yml
+++ b/modules/nf-core/samtools/collatefastq/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/convert/environment.yml b/modules/nf-core/samtools/convert/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/convert/environment.yml
+++ b/modules/nf-core/samtools/convert/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml
index 2bcd47ee16..62054fc97a 100644
--- a/modules/nf-core/samtools/faidx/environment.yml
+++ b/modules/nf-core/samtools/faidx/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
   - bioconda::htslib=1.21
   - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/index/environment.yml
+++ b/modules/nf-core/samtools/index/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/merge/environment.yml
+++ b/modules/nf-core/samtools/merge/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/mpileup/environment.yml b/modules/nf-core/samtools/mpileup/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/mpileup/environment.yml
+++ b/modules/nf-core/samtools/mpileup/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/stats/environment.yml
+++ b/modules/nf-core/samtools/stats/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21
diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml
index b98cbb9909..62054fc97a 100644
--- a/modules/nf-core/samtools/view/environment.yml
+++ b/modules/nf-core/samtools/view/environment.yml
@@ -1,7 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
 channels:
   - conda-forge
   - bioconda
-
 dependencies:
-  - bioconda::htslib=1.20
-  - bioconda::samtools=1.20
+  - bioconda::htslib=1.21
+  - bioconda::samtools=1.21

From 42d9e32ac33e4d1a25d6f33d540b2168e216e528 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Tue, 24 Sep 2024 12:02:26 +0200
Subject: [PATCH 26/38] fix expected filename

---
 tests/test_umi.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/test_umi.yml b/tests/test_umi.yml
index 0c8392f40e..c5c6b08fe4 100644
--- a/tests/test_umi.yml
+++ b/tests/test_umi.yml
@@ -6,7 +6,7 @@
   files:
     - path: results/preprocessing/umi/test/test-test_L1_umi-consensus.bam
     # binary changes md5sums on reruns.
-    - path: results/reports/umi/test-test_L1_umi_histogram.txt
+    - path: results/reports/umi/test-test_L1_umi-grouped_histogram.txt
       md5sum: 85292e9acb83edf17110dce17be27f44
     - path: results/csv/markduplicates.csv
       md5sum: 0d6120bb99e92f6810343270711ca53e

From 379a3956044a9b3e9854b410deb51d96dbf4cffb Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 12:26:10 +0200
Subject: [PATCH 27/38] update snapshot

---
 tests/main.nf.test.snap | 257 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 247 insertions(+), 10 deletions(-)

diff --git a/tests/main.nf.test.snap b/tests/main.nf.test.snap
index 1e27aaf924..002b3ca40d 100644
--- a/tests/main.nf.test.snap
+++ b/tests/main.nf.test.snap
@@ -24,13 +24,13 @@
                     "samtools": "1.19.2"
                 },
                 "INDEX_CRAM": {
-                    "samtools": 1.2
+                    "samtools": 1.21
                 },
                 "MOSDEPTH": {
                     "mosdepth": "0.3.8"
                 },
                 "SAMTOOLS_STATS": {
-                    "samtools": 1.2
+                    "samtools": 1.21
                 },
                 "STRELKA_SINGLE": {
                     "strelka": "2.9.10"
@@ -50,7 +50,28 @@
                 "csv/variantcalled.csv",
                 "multiqc",
                 "multiqc/multiqc_data",
+                "multiqc/multiqc_data/bcftools_stats_indel-lengths.txt",
+                "multiqc/multiqc_data/bcftools_stats_vqc_Count_Indels.txt",
+                "multiqc/multiqc_data/bcftools_stats_vqc_Count_SNP.txt",
+                "multiqc/multiqc_data/bcftools_stats_vqc_Count_Transitions.txt",
+                "multiqc/multiqc_data/bcftools_stats_vqc_Count_Transversions.txt",
+                "multiqc/multiqc_data/fastqc-status-check-heatmap.txt",
+                "multiqc/multiqc_data/fastqc_adapter_content_plot.txt",
+                "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt",
+                "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt",
+                "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt",
+                "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt",
+                "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt",
+                "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt",
+                "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt",
+                "multiqc/multiqc_data/fastqc_sequence_length_distribution_plot.txt",
+                "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt",
+                "multiqc/multiqc_data/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.txt",
+                "multiqc/multiqc_data/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.txt",
+                "multiqc/multiqc_data/gatk-base-recalibrator-reported-empirical-plot.txt",
                 "multiqc/multiqc_data/gatk_base_recalibrator.txt",
+                "multiqc/multiqc_data/mosdepth-coverage-per-contig-single.txt",
+                "multiqc/multiqc_data/mosdepth-cumcoverage-dist-id.txt",
                 "multiqc/multiqc_data/mosdepth_cov_dist.txt",
                 "multiqc/multiqc_data/mosdepth_cumcov_dist.txt",
                 "multiqc/multiqc_data/mosdepth_perchrom.txt",
@@ -64,12 +85,111 @@
                 "multiqc/multiqc_data/multiqc_samtools_stats.txt",
                 "multiqc/multiqc_data/multiqc_software_versions.txt",
                 "multiqc/multiqc_data/multiqc_sources.txt",
+                "multiqc/multiqc_data/picard_deduplication.txt",
                 "multiqc/multiqc_data/picard_histogram.txt",
                 "multiqc/multiqc_data/picard_histogram_1.txt",
                 "multiqc/multiqc_data/picard_histogram_2.txt",
+                "multiqc/multiqc_data/samtools-stats-dp.txt",
+                "multiqc/multiqc_data/samtools_alignment_plot.txt",
                 "multiqc/multiqc_data/vcftools_tstv_by_count.txt",
                 "multiqc/multiqc_data/vcftools_tstv_by_qual.txt",
                 "multiqc/multiqc_plots",
+                "multiqc/multiqc_plots/pdf",
+                "multiqc/multiqc_plots/pdf/bcftools_stats_indel-lengths.pdf",
+                "multiqc/multiqc_plots/pdf/bcftools_stats_vqc_Count_Indels.pdf",
+                "multiqc/multiqc_plots/pdf/bcftools_stats_vqc_Count_SNP.pdf",
+                "multiqc/multiqc_plots/pdf/bcftools_stats_vqc_Count_Transitions.pdf",
+                "multiqc/multiqc_plots/pdf/bcftools_stats_vqc_Count_Transversions.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf",
+                "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf",
+                "multiqc/multiqc_plots/pdf/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.pdf",
+                "multiqc/multiqc_plots/pdf/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.pdf",
+                "multiqc/multiqc_plots/pdf/gatk-base-recalibrator-reported-empirical-plot.pdf",
+                "multiqc/multiqc_plots/pdf/general_stats_table.pdf",
+                "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-cnt.pdf",
+                "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-pct.pdf",
+                "multiqc/multiqc_plots/pdf/mosdepth-cumcoverage-dist-id.pdf",
+                "multiqc/multiqc_plots/pdf/picard_deduplication-cnt.pdf",
+                "multiqc/multiqc_plots/pdf/picard_deduplication-pct.pdf",
+                "multiqc/multiqc_plots/pdf/samtools-stats-dp.pdf",
+                "multiqc/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf",
+                "multiqc/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf",
+                "multiqc/multiqc_plots/pdf/vcftools_tstv_by_count.pdf",
+                "multiqc/multiqc_plots/pdf/vcftools_tstv_by_qual.pdf",
+                "multiqc/multiqc_plots/png",
+                "multiqc/multiqc_plots/png/bcftools_stats_indel-lengths.png",
+                "multiqc/multiqc_plots/png/bcftools_stats_vqc_Count_Indels.png",
+                "multiqc/multiqc_plots/png/bcftools_stats_vqc_Count_SNP.png",
+                "multiqc/multiqc_plots/png/bcftools_stats_vqc_Count_Transitions.png",
+                "multiqc/multiqc_plots/png/bcftools_stats_vqc_Count_Transversions.png",
+                "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png",
+                "multiqc/multiqc_plots/png/fastqc_adapter_content_plot.png",
+                "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png",
+                "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png",
+                "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png",
+                "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png",
+                "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png",
+                "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png",
+                "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png",
+                "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png",
+                "multiqc/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png",
+                "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png",
+                "multiqc/multiqc_plots/png/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.png",
+                "multiqc/multiqc_plots/png/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.png",
+                "multiqc/multiqc_plots/png/gatk-base-recalibrator-reported-empirical-plot.png",
+                "multiqc/multiqc_plots/png/general_stats_table.png",
+                "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-cnt.png",
+                "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-pct.png",
+                "multiqc/multiqc_plots/png/mosdepth-cumcoverage-dist-id.png",
+                "multiqc/multiqc_plots/png/picard_deduplication-cnt.png",
+                "multiqc/multiqc_plots/png/picard_deduplication-pct.png",
+                "multiqc/multiqc_plots/png/samtools-stats-dp.png",
+                "multiqc/multiqc_plots/png/samtools_alignment_plot-cnt.png",
+                "multiqc/multiqc_plots/png/samtools_alignment_plot-pct.png",
+                "multiqc/multiqc_plots/png/vcftools_tstv_by_count.png",
+                "multiqc/multiqc_plots/png/vcftools_tstv_by_qual.png",
+                "multiqc/multiqc_plots/svg",
+                "multiqc/multiqc_plots/svg/bcftools_stats_indel-lengths.svg",
+                "multiqc/multiqc_plots/svg/bcftools_stats_vqc_Count_Indels.svg",
+                "multiqc/multiqc_plots/svg/bcftools_stats_vqc_Count_SNP.svg",
+                "multiqc/multiqc_plots/svg/bcftools_stats_vqc_Count_Transitions.svg",
+                "multiqc/multiqc_plots/svg/bcftools_stats_vqc_Count_Transversions.svg",
+                "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg",
+                "multiqc/multiqc_plots/svg/fastqc_adapter_content_plot.svg",
+                "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg",
+                "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg",
+                "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg",
+                "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg",
+                "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg",
+                "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg",
+                "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg",
+                "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg",
+                "multiqc/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg",
+                "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg",
+                "multiqc/multiqc_plots/svg/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.svg",
+                "multiqc/multiqc_plots/svg/gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.svg",
+                "multiqc/multiqc_plots/svg/gatk-base-recalibrator-reported-empirical-plot.svg",
+                "multiqc/multiqc_plots/svg/general_stats_table.svg",
+                "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-cnt.svg",
+                "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-pct.svg",
+                "multiqc/multiqc_plots/svg/mosdepth-cumcoverage-dist-id.svg",
+                "multiqc/multiqc_plots/svg/picard_deduplication-cnt.svg",
+                "multiqc/multiqc_plots/svg/picard_deduplication-pct.svg",
+                "multiqc/multiqc_plots/svg/samtools-stats-dp.svg",
+                "multiqc/multiqc_plots/svg/samtools_alignment_plot-cnt.svg",
+                "multiqc/multiqc_plots/svg/samtools_alignment_plot-pct.svg",
+                "multiqc/multiqc_plots/svg/vcftools_tstv_by_count.svg",
+                "multiqc/multiqc_plots/svg/vcftools_tstv_by_qual.svg",
                 "multiqc/multiqc_report.html",
                 "pipeline_info",
                 "pipeline_info/nf_core_sarek_software_mqc_versions.yml",
@@ -136,19 +256,136 @@
                 "variant_calling/strelka/test/test.strelka.variants.vcf.gz.tbi"
             ],
             [
-                "mosdepth_cov_dist.txt:md5,eadafaa5473dd49daadb7b4696c6b7f9",
+                "bcftools_stats_indel-lengths.txt:md5,deccb75341ca46a6f09658f7fd9e348b",
+                "bcftools_stats_vqc_Count_Indels.txt:md5,7b2a64880b653ccf0400ed9073e290dd",
+                "bcftools_stats_vqc_Count_SNP.txt:md5,72e934e0e8ed9b9712105bbd66dd9ffd",
+                "bcftools_stats_vqc_Count_Transitions.txt:md5,72e934e0e8ed9b9712105bbd66dd9ffd",
+                "bcftools_stats_vqc_Count_Transversions.txt:md5,72e934e0e8ed9b9712105bbd66dd9ffd",
+                "fastqc-status-check-heatmap.txt:md5,a020b9689ddeb4abec16b4854fe452f1",
+                "fastqc_adapter_content_plot.txt:md5,2e1b72be741319e7fadbbb39d7e5b37d",
+                "fastqc_per_base_n_content_plot.txt:md5,ad3b971a6bb4e8ba6c844c8a03584eb8",
+                "fastqc_per_base_sequence_quality_plot.txt:md5,1bc03889d243a944253ac637d81ae10c",
+                "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,2c42d140ce06c08dad2b58f397c23239",
+                "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,59e22821d350bfb97c37ffd9088f5ad9",
+                "fastqc_per_sequence_quality_scores_plot.txt:md5,f33615cc98bb6225f39545a415fa7c0f",
+                "fastqc_sequence_counts_plot.txt:md5,7f0f19a58e8e54e792a751fd04a9ae13",
+                "fastqc_sequence_duplication_levels_plot.txt:md5,92b02e250ff78725deb9a10d510fcecc",
+                "fastqc_sequence_length_distribution_plot.txt:md5,fb04dce68ec566314125bc9438211b28",
+                "fastqc_top_overrepresented_sequences_table.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.txt:md5,20b2630a7400c9c279bf8c0c66341f7d",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.txt:md5,b9b943621e50c7f3e75a37871667d5ed",
+                "gatk-base-recalibrator-reported-empirical-plot.txt:md5,52bbf351c6e3894d8fc2e978c4af4636",
+                "mosdepth-coverage-per-contig-single.txt:md5,264db67a99d2c90ea7b075e33c201b77",
+                "mosdepth-cumcoverage-dist-id.txt:md5,5235e965da7ebe3bfebb24ffa88defff",
+                "mosdepth_cov_dist.txt:md5,8d0d7cb485a7bffb07da17b28f827120",
                 "mosdepth_cumcov_dist.txt:md5,8d0d7cb485a7bffb07da17b28f827120",
                 "mosdepth_perchrom.txt:md5,264db67a99d2c90ea7b075e33c201b77",
                 "multiqc_bcftools_stats.txt:md5,103ba59d44fc60e9308e64bbd0d0e504",
-                "multiqc_citations.txt:md5,4660dd5d8757841ed75dca3a90d21617",
+                "multiqc_citations.txt:md5,ace4ca89138a5f1e2be289c157c00bd9",
                 "multiqc_fastqc.txt:md5,bde0d0bffa62228b33fb68b7e25b6ff8",
                 "multiqc_samtools_stats.txt:md5,0f1e4c6c497d9a952765f9f3068ea4b9",
-                "multiqc_software_versions.txt:md5,2c9d16da278a231b0dc4c4cb5c08e626",
+                "multiqc_software_versions.txt:md5,6540a5f7ec8a2f928c1bdf6ff78b300b",
+                "picard_deduplication.txt:md5,f8c8367b16a0f17e79700b1cdcf19bd8",
                 "picard_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
                 "picard_histogram_1.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
                 "picard_histogram_2.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
-                "vcftools_tstv_by_count.txt:md5,327f731f65de167c7cfcbb30a5f04079",
+                "samtools-stats-dp.txt:md5,c94f4d3ffa3f510552f90e173fdd9f9d",
+                "samtools_alignment_plot.txt:md5,717f499a3543e7ee4c7a8454bf80aeca",
+                "vcftools_tstv_by_count.txt:md5,50efc5214fe2c39f21efb66a710d2ed6",
                 "vcftools_tstv_by_qual.txt:md5,911bc05c5169149dbb0b068f65b4274a",
+                "bcftools_stats_indel-lengths.pdf:md5,ac5e33cf490a81d78d4493ebdfa36dce",
+                "bcftools_stats_vqc_Count_Indels.pdf:md5,d78c9a4b9ba345abf40e6d9fa766e6d8",
+                "bcftools_stats_vqc_Count_SNP.pdf:md5,d1f72e0f5ecab292813417ec1b81951f",
+                "bcftools_stats_vqc_Count_Transitions.pdf:md5,41f461e89292956c0bca0f0ec0ede756",
+                "bcftools_stats_vqc_Count_Transversions.pdf:md5,b43e9fdaae9943ad46aa9e006858d165",
+                "fastqc-status-check-heatmap.pdf:md5,1ef8892b60f2af03c0250306f27f8304",
+                "fastqc_adapter_content_plot.pdf:md5,714e5bf3664f79fefbc9dfef71caa982",
+                "fastqc_per_base_n_content_plot.pdf:md5,23e5f6d25b0a2989fb55c6529210758d",
+                "fastqc_per_base_sequence_quality_plot.pdf:md5,21bc44f86fbb02c9bcc3ff0296cca6ac",
+                "fastqc_per_sequence_gc_content_plot_Counts.pdf:md5,02d8ce4e0a6a8e80862be18db2a22411",
+                "fastqc_per_sequence_gc_content_plot_Percentages.pdf:md5,6053bfc445e2cbb6b086882667345abd",
+                "fastqc_per_sequence_quality_scores_plot.pdf:md5,09aa408a730625ab10ef3bff6d418f83",
+                "fastqc_sequence_counts_plot-cnt.pdf:md5,1f49b951836392045bc113e7dfbbf120",
+                "fastqc_sequence_counts_plot-pct.pdf:md5,fd429be993b06bcae39a7d7926fec39b",
+                "fastqc_sequence_duplication_levels_plot.pdf:md5,f81fa2345180d7f2c19a95fad3447d28",
+                "fastqc_sequence_length_distribution_plot.pdf:md5,b5dcc9d0ec768179cc94689b0db290af",
+                "fastqc_top_overrepresented_sequences_table.pdf:md5,63317337d74120471a3597581cfd66cf",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.pdf:md5,c79509645720fe0e223b2873b4faefb2",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.pdf:md5,643224fa48582f6a2f397d7e73e79eb3",
+                "gatk-base-recalibrator-reported-empirical-plot.pdf:md5,ca99cb1cc80bf0ef230193e28e1a8e36",
+                "general_stats_table.pdf:md5,0de62ee5d1063521b73822be48e99829",
+                "mosdepth-coverage-per-contig-single-cnt.pdf:md5,8eb8ea3d388864f8ec88b0d968a2c3ee",
+                "mosdepth-coverage-per-contig-single-pct.pdf:md5,83cf89bf8ce74e4752d2364c14a7f6c2",
+                "mosdepth-cumcoverage-dist-id.pdf:md5,e00f39f7dcce76408cce6b22c08efa0d",
+                "picard_deduplication-cnt.pdf:md5,6183ca9143b0b44909f12553ab2b94d3",
+                "picard_deduplication-pct.pdf:md5,5d0a7b71003359dc118526ecb8470872",
+                "samtools-stats-dp.pdf:md5,0ec882996eda6c62aa669989bcab1602",
+                "samtools_alignment_plot-cnt.pdf:md5,7744706887a82360f445c627d69ed26e",
+                "samtools_alignment_plot-pct.pdf:md5,c3c23c9c17baa7f5a6b068392c73e68e",
+                "vcftools_tstv_by_count.pdf:md5,18e6fdfecbb563fc042e07d0e9e47ed0",
+                "vcftools_tstv_by_qual.pdf:md5,324c3954f4f247fd9932e22fec18ab90",
+                "bcftools_stats_indel-lengths.png:md5,7da61a07cfccdcb0816b508eee84b344",
+                "bcftools_stats_vqc_Count_Indels.png:md5,0b948fe27a6ba3a63cac2407657d9d9a",
+                "bcftools_stats_vqc_Count_SNP.png:md5,214564585b4bff3cb9ee448663b0d407",
+                "bcftools_stats_vqc_Count_Transitions.png:md5,806565bd96149e1fe3d2991295f6154c",
+                "bcftools_stats_vqc_Count_Transversions.png:md5,968abd1e144c7145fe2aa13ddbcd3eb7",
+                "fastqc-status-check-heatmap.png:md5,1114ded4fb44540a8ec5159fb71033de",
+                "fastqc_adapter_content_plot.png:md5,bdaa8831ade89a19b4c6611f35cf8846",
+                "fastqc_per_base_n_content_plot.png:md5,2097d86285cd20d9ca39ef9f9db37cfa",
+                "fastqc_per_base_sequence_quality_plot.png:md5,8667aa66aadae1dfbe4e5a43392447fb",
+                "fastqc_per_sequence_gc_content_plot_Counts.png:md5,408a71177180fe7a272bd0042f9dca99",
+                "fastqc_per_sequence_gc_content_plot_Percentages.png:md5,a903f769669f99c0659e01da81e39b65",
+                "fastqc_per_sequence_quality_scores_plot.png:md5,03cab59157a5beb3b18c6033d5801c76",
+                "fastqc_sequence_counts_plot-cnt.png:md5,850340a7d839f8e25880ebdffa8aabbb",
+                "fastqc_sequence_counts_plot-pct.png:md5,c3819cef9fd00c833d44199eb1c17999",
+                "fastqc_sequence_duplication_levels_plot.png:md5,99435102fc0d351f80fd77b743aaeb62",
+                "fastqc_sequence_length_distribution_plot.png:md5,4bb7a9e3ca1b77739ed12eef61743885",
+                "fastqc_top_overrepresented_sequences_table.png:md5,5905f81842123dabc950e0f183f80725",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.png:md5,10c941465bee45ec6ef41c9edcf53c90",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.png:md5,99ba79576b0f197a11411b8ca3e46656",
+                "gatk-base-recalibrator-reported-empirical-plot.png:md5,0a908ea7ecb19cced29e473440acdb29",
+                "general_stats_table.png:md5,e58b028ceac2ef821eb518fcf8cc8d2f",
+                "mosdepth-coverage-per-contig-single-cnt.png:md5,961ffc2fa00922f7f7310ec0e6972c8e",
+                "mosdepth-coverage-per-contig-single-pct.png:md5,0211b26857513888980624af727e1e6f",
+                "mosdepth-cumcoverage-dist-id.png:md5,8dad0d0233f5c03933483ef9a4d40eb1",
+                "picard_deduplication-cnt.png:md5,492c0bc1bd2a8bba5166b6d115eabf2c",
+                "picard_deduplication-pct.png:md5,e20e03d15ce91de39676e9477b3ff3cb",
+                "samtools-stats-dp.png:md5,3a78427c2e46117f4a3e774129d2a118",
+                "samtools_alignment_plot-cnt.png:md5,11c87333a38f7e744d9b58ac485cfa3a",
+                "samtools_alignment_plot-pct.png:md5,28cef933a83ba7b024ab8dbfdd7a5608",
+                "vcftools_tstv_by_count.png:md5,ca76b833d6ad03b16c0384a7be8d99ed",
+                "vcftools_tstv_by_qual.png:md5,bf48f07becb456d77fb08d812d198f25",
+                "bcftools_stats_indel-lengths.svg:md5,b02f09f7d4387d41e0067794a0e7eceb",
+                "bcftools_stats_vqc_Count_Indels.svg:md5,b770b6cff26482a77bbf6704dd6977e1",
+                "bcftools_stats_vqc_Count_SNP.svg:md5,8d5fae475b91287f3ac47ab4b0200eff",
+                "bcftools_stats_vqc_Count_Transitions.svg:md5,d83ff35633e5557d194663478eb9868b",
+                "bcftools_stats_vqc_Count_Transversions.svg:md5,c658692e93566d20897f45ef461e1577",
+                "fastqc-status-check-heatmap.svg:md5,f36c1b4e2a90b78030de2feb7b8422c6",
+                "fastqc_adapter_content_plot.svg:md5,10095b9620402f12edf31ea184a2f223",
+                "fastqc_per_base_n_content_plot.svg:md5,772accb3783bb6ef0610b88791bbb679",
+                "fastqc_per_base_sequence_quality_plot.svg:md5,a779c450614e9c9750d34841696cae1b",
+                "fastqc_per_sequence_gc_content_plot_Counts.svg:md5,882339e1609351afc80b66c03d0d6459",
+                "fastqc_per_sequence_gc_content_plot_Percentages.svg:md5,530b5343e4dfce4057fbee625abc59b0",
+                "fastqc_per_sequence_quality_scores_plot.svg:md5,ad2282069e638743f5bb1959f7cb8686",
+                "fastqc_sequence_counts_plot-cnt.svg:md5,daf023eea7a547a16da5882193a2f828",
+                "fastqc_sequence_counts_plot-pct.svg:md5,18165da4d7f007f7be60002219e7143f",
+                "fastqc_sequence_duplication_levels_plot.svg:md5,d40f4f1f11e6bc90bf86c5f250fd81f5",
+                "fastqc_sequence_length_distribution_plot.svg:md5,85f75aa4c579e116222c510f286c0d0d",
+                "fastqc_top_overrepresented_sequences_table.svg:md5,cbde7595321992de8586741e91626a6b",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.svg:md5,8244055a82e8bc35e9dd53f2d31b08f7",
+                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.svg:md5,625228baa78e7a96e96715de4318ed7b",
+                "gatk-base-recalibrator-reported-empirical-plot.svg:md5,d8f55e2a94e4994e1810d2c11093b73d",
+                "general_stats_table.svg:md5,d6a70b3e8d8b3c46e47ab124b4bee904",
+                "mosdepth-coverage-per-contig-single-cnt.svg:md5,02b7878e52dd4c82c8342b7b398256f1",
+                "mosdepth-coverage-per-contig-single-pct.svg:md5,4253425fda96c5beb8bd72064f746324",
+                "mosdepth-cumcoverage-dist-id.svg:md5,6508cedb2bed66e3bf1243fa6614549b",
+                "picard_deduplication-cnt.svg:md5,b9c7fe26b67610a6b873a40c2928bdbc",
+                "picard_deduplication-pct.svg:md5,136430b84e0c13a51b6f5a11a29d2eef",
+                "samtools-stats-dp.svg:md5,b65d512ffd009af582f739e5cd6064f2",
+                "samtools_alignment_plot-cnt.svg:md5,e697eb4163839e4f3995c945a335f303",
+                "samtools_alignment_plot-pct.svg:md5,b9b6d989253a0ee0eb709b0c900acf0a",
+                "vcftools_tstv_by_count.svg:md5,bce6f3efad96407e902503a77f06c547",
+                "vcftools_tstv_by_qual.svg:md5,4d26d9b21860d15c83e080126e2a239f",
                 "test.strelka.variants.bcftools_stats.txt:md5,86bd4938eed920d36f3f5937102a2967",
                 "test.md.mosdepth.global.dist.txt:md5,b61e1acee11a6ddf7ce3232a5948a6a0",
                 "test.md.mosdepth.region.dist.txt:md5,1a382f98d488d2ae3df83a0d87caafc1",
@@ -160,8 +397,8 @@
                 "test.recal.mosdepth.summary.txt:md5,839108358878ada89e1eaddf6e0541ba",
                 "test.recal.regions.bed.gz:md5,6fdaec99e739dc0f47fe55dd64dfe93e",
                 "test.recal.regions.bed.gz.csi:md5,5f9c60279af78e3aeafc96a8c11fb35f",
-                "test.md.cram.stats:md5,c4dc6487d0b8b8a74c26ea1ef4e17f6f",
-                "test.recal.cram.stats:md5,38bcc10d0464b259551db3b5356610ca",
+                "test.md.cram.stats:md5,7d19da3fc342afe0884c944f97a578b1",
+                "test.recal.cram.stats:md5,820d123e746d1abdc90fd8710828082e",
                 "test.strelka.variants.FILTER.summary:md5,ad417bc96d31223f61170987975d8128",
                 "test.strelka.variants.TsTv.count:md5,fa27f678965b7cba6a92efcd039f802a",
                 "test.strelka.variants.TsTv.qual:md5,bc68ae4e688e9fb772b457069e604883"
@@ -169,8 +406,8 @@
         ],
         "meta": {
             "nf-test": "0.9.0",
-            "nextflow": "24.04.4"
+            "nextflow": "24.09.0"
         },
-        "timestamp": "2024-10-02T09:39:43.073309"
+        "timestamp": "2024-10-03T12:25:35.894878"
     }
 }
\ No newline at end of file

From a259f235d9ad4d885f0960fe5d458b4eb301b0b8 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 12:38:08 +0200
Subject: [PATCH 28/38] update MultiQC

---
 modules.json                                  |  2 +-
 modules/nf-core/multiqc/environment.yml       |  2 +-
 modules/nf-core/multiqc/main.nf               |  4 +--
 .../nf-core/multiqc/tests/main.nf.test.snap   | 26 +++++++++----------
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/modules.json b/modules.json
index f74a337ced..96ff1b1cba 100644
--- a/modules.json
+++ b/modules.json
@@ -346,7 +346,7 @@
                     },
                     "multiqc": {
                         "branch": "master",
-                        "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+                        "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c",
                         "installed_by": ["modules"]
                     },
                     "ngscheckmate/ncm": {
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
index f1cd99b079..6f5b867b76 100644
--- a/modules/nf-core/multiqc/environment.yml
+++ b/modules/nf-core/multiqc/environment.yml
@@ -2,4 +2,4 @@ channels:
   - conda-forge
   - bioconda
 dependencies:
-  - bioconda::multiqc=1.24.1
+  - bioconda::multiqc=1.25.1
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index b9ccebdbbc..9724d2f34e 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/modules/nf-core/multiqc/main.nf
@@ -3,8 +3,8 @@ process MULTIQC {
 
     conda "${moduleDir}/environment.yml"
     container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
-        'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' :
-        'biocontainers/multiqc:1.25--pyhdfd78af_0' }"
+        'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' :
+        'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }"
 
     input:
     path  multiqc_files, stageAs: "?/*"
diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap
index b779e46924..2fcbb5ff7d 100644
--- a/modules/nf-core/multiqc/tests/main.nf.test.snap
+++ b/modules/nf-core/multiqc/tests/main.nf.test.snap
@@ -2,14 +2,14 @@
     "multiqc_versions_single": {
         "content": [
             [
-                "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd"
+                "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
             ]
         ],
         "meta": {
-            "nf-test": "0.8.4",
-            "nextflow": "24.04.2"
+            "nf-test": "0.9.0",
+            "nextflow": "24.04.4"
         },
-        "timestamp": "2024-07-10T12:41:34.562023"
+        "timestamp": "2024-10-02T17:51:46.317523"
     },
     "multiqc_stub": {
         "content": [
@@ -17,25 +17,25 @@
                 "multiqc_report.html",
                 "multiqc_data",
                 "multiqc_plots",
-                "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd"
+                "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
             ]
         ],
         "meta": {
-            "nf-test": "0.8.4",
-            "nextflow": "24.04.2"
+            "nf-test": "0.9.0",
+            "nextflow": "24.04.4"
         },
-        "timestamp": "2024-07-10T11:27:11.933869532"
+        "timestamp": "2024-10-02T17:52:20.680978"
     },
     "multiqc_versions_config": {
         "content": [
             [
-                "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd"
+                "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916"
             ]
         ],
         "meta": {
-            "nf-test": "0.8.4",
-            "nextflow": "24.04.2"
+            "nf-test": "0.9.0",
+            "nextflow": "24.04.4"
         },
-        "timestamp": "2024-07-10T11:26:56.709849369"
+        "timestamp": "2024-10-02T17:52:09.185842"
     }
-}
+}
\ No newline at end of file

From a0276b010609babfb5af45e06183ffe4683eb658 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 12:40:01 +0200
Subject: [PATCH 29/38] add pdiff

---
 .github/workflows/ci.yml | 13 ++++++++-----
 CHANGELOG.md             |  2 +-
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5ff2911931..f79dde603a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,14 +12,17 @@ on:
       - dev
 
 env:
-  NFTEST_VER: "0.9.0"
+  NFT_DIFF: "pdiff"
+  NFT_DIFF_ARGS: "--line-numbers --expand-tabs=2"
+  NFT_VER: "0.9.0"
+  NFT_WORKDIR: "~"
   NXF_ANSI_LOG: false
-  TEST_DATA_BASE: "${{ github.workspace }}/test-datasets"
-  SENTIEON_LICENSE_BASE64: ${{ secrets.SENTIEON_LICENSE_BASE64 }}
   NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity
   NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity
+  SENTIEON_LICENSE_BASE64: ${{ secrets.SENTIEON_LICENSE_BASE64 }}
+  TEST_DATA_BASE: "${{ github.workspace }}/test-datasets"
 
-# Cancel if a newer run is started
+  # Cancel if a newer run is started
 concurrency:
   group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
   cancel-in-progress: true
@@ -297,7 +300,7 @@ jobs:
       - name: Install nf-test
         uses: nf-core/setup-nf-test@v1
         with:
-          version: ${{ env.NFTEST_VER }}
+          version: ${{ env.NFT_VER }}
 
       - name: Setup apptainer
         if: matrix.profile == 'singularity'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 620c1fb673..55d93338b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -37,7 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 | `fgbio`       | 2.0.2       | 2.1.2       |
 | `htslib`      | 1.20        | 1.21        |
 | `lofreq`      |             | 2.1.5       |
-| `multiqc`     | 1.21        | 1.24.1      |
+| `multiqc`     | 1.21        | 1.25.1      |
 | `samtools`    | 1.20        | 1.21        |
 
 ### Parameters

From 9439e62ca52d343377b7cfcbe7e7dcc9c7c5f522 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 12:41:27 +0200
Subject: [PATCH 30/38] proper indent of comment

---
 .github/workflows/ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f79dde603a..6209ff5759 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,5 +1,5 @@
-name: nf-core CI
 # This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors
+name: nf-core CI
 on:
   pull_request:
   release:
@@ -22,7 +22,7 @@ env:
   SENTIEON_LICENSE_BASE64: ${{ secrets.SENTIEON_LICENSE_BASE64 }}
   TEST_DATA_BASE: "${{ github.workspace }}/test-datasets"
 
-  # Cancel if a newer run is started
+# Cancel if a newer run is started
 concurrency:
   group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
   cancel-in-progress: true

From ad029e3e5daea3efb00b4087fcf628a29045077b Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 12:53:00 +0200
Subject: [PATCH 31/38] add junitxml

---
 .github/workflows/ci.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6209ff5759..bc44d49a68 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,5 +1,5 @@
-# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors
 name: nf-core CI
+# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors
 on:
   pull_request:
   release:
@@ -344,13 +344,14 @@ jobs:
       - name: Disk space cleanup
         uses: jlumbroso/free-disk-space@v1.3.1
 
-      # Test the module
+      # Test the component
       - name: Run nf-test
         run: |
           nf-test test \
             --profile="+${{ matrix.profile }}" \
             --tag ${{ matrix.tags }} \
             --tap=test.tap \
+            --junitxml=test.xml \
             --debug \
             --verbose
 

From 0ce964c6df54b50fba99dffe1eea2f84590169d3 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 13:08:48 +0200
Subject: [PATCH 32/38] update .nftignore and snap

---
 tests/.nftignore        |  4 +++
 tests/main.nf.test.snap | 67 +----------------------------------------
 2 files changed, 5 insertions(+), 66 deletions(-)

diff --git a/tests/.nftignore b/tests/.nftignore
index 6aa68e812a..a621518f82 100644
--- a/tests/.nftignore
+++ b/tests/.nftignore
@@ -5,6 +5,10 @@ multiqc/multiqc_data/multiqc_data.json
 multiqc/multiqc_data/multiqc_general_stats.txt
 multiqc/multiqc_data/multiqc_picard_dups.txt
 multiqc/multiqc_data/multiqc_sources.txt
+multiqc/multiqc_data/picard_deduplication.txt
+multiqc/multiqc_plots/pdf/*
+multiqc/multiqc_plots/png/picard_deduplication*.png
+multiqc/multiqc_plots/svg/*
 multiqc/multiqc_report.html
 pipeline_info/*.{html,json,txt,yml}
 preprocessing/**/*.{md,recal}.{cram,cram.crai,table}
diff --git a/tests/main.nf.test.snap b/tests/main.nf.test.snap
index 002b3ca40d..c2e9a4d4c6 100644
--- a/tests/main.nf.test.snap
+++ b/tests/main.nf.test.snap
@@ -285,7 +285,6 @@
                 "multiqc_fastqc.txt:md5,bde0d0bffa62228b33fb68b7e25b6ff8",
                 "multiqc_samtools_stats.txt:md5,0f1e4c6c497d9a952765f9f3068ea4b9",
                 "multiqc_software_versions.txt:md5,6540a5f7ec8a2f928c1bdf6ff78b300b",
-                "picard_deduplication.txt:md5,f8c8367b16a0f17e79700b1cdcf19bd8",
                 "picard_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
                 "picard_histogram_1.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
                 "picard_histogram_2.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
@@ -293,37 +292,6 @@
                 "samtools_alignment_plot.txt:md5,717f499a3543e7ee4c7a8454bf80aeca",
                 "vcftools_tstv_by_count.txt:md5,50efc5214fe2c39f21efb66a710d2ed6",
                 "vcftools_tstv_by_qual.txt:md5,911bc05c5169149dbb0b068f65b4274a",
-                "bcftools_stats_indel-lengths.pdf:md5,ac5e33cf490a81d78d4493ebdfa36dce",
-                "bcftools_stats_vqc_Count_Indels.pdf:md5,d78c9a4b9ba345abf40e6d9fa766e6d8",
-                "bcftools_stats_vqc_Count_SNP.pdf:md5,d1f72e0f5ecab292813417ec1b81951f",
-                "bcftools_stats_vqc_Count_Transitions.pdf:md5,41f461e89292956c0bca0f0ec0ede756",
-                "bcftools_stats_vqc_Count_Transversions.pdf:md5,b43e9fdaae9943ad46aa9e006858d165",
-                "fastqc-status-check-heatmap.pdf:md5,1ef8892b60f2af03c0250306f27f8304",
-                "fastqc_adapter_content_plot.pdf:md5,714e5bf3664f79fefbc9dfef71caa982",
-                "fastqc_per_base_n_content_plot.pdf:md5,23e5f6d25b0a2989fb55c6529210758d",
-                "fastqc_per_base_sequence_quality_plot.pdf:md5,21bc44f86fbb02c9bcc3ff0296cca6ac",
-                "fastqc_per_sequence_gc_content_plot_Counts.pdf:md5,02d8ce4e0a6a8e80862be18db2a22411",
-                "fastqc_per_sequence_gc_content_plot_Percentages.pdf:md5,6053bfc445e2cbb6b086882667345abd",
-                "fastqc_per_sequence_quality_scores_plot.pdf:md5,09aa408a730625ab10ef3bff6d418f83",
-                "fastqc_sequence_counts_plot-cnt.pdf:md5,1f49b951836392045bc113e7dfbbf120",
-                "fastqc_sequence_counts_plot-pct.pdf:md5,fd429be993b06bcae39a7d7926fec39b",
-                "fastqc_sequence_duplication_levels_plot.pdf:md5,f81fa2345180d7f2c19a95fad3447d28",
-                "fastqc_sequence_length_distribution_plot.pdf:md5,b5dcc9d0ec768179cc94689b0db290af",
-                "fastqc_top_overrepresented_sequences_table.pdf:md5,63317337d74120471a3597581cfd66cf",
-                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.pdf:md5,c79509645720fe0e223b2873b4faefb2",
-                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.pdf:md5,643224fa48582f6a2f397d7e73e79eb3",
-                "gatk-base-recalibrator-reported-empirical-plot.pdf:md5,ca99cb1cc80bf0ef230193e28e1a8e36",
-                "general_stats_table.pdf:md5,0de62ee5d1063521b73822be48e99829",
-                "mosdepth-coverage-per-contig-single-cnt.pdf:md5,8eb8ea3d388864f8ec88b0d968a2c3ee",
-                "mosdepth-coverage-per-contig-single-pct.pdf:md5,83cf89bf8ce74e4752d2364c14a7f6c2",
-                "mosdepth-cumcoverage-dist-id.pdf:md5,e00f39f7dcce76408cce6b22c08efa0d",
-                "picard_deduplication-cnt.pdf:md5,6183ca9143b0b44909f12553ab2b94d3",
-                "picard_deduplication-pct.pdf:md5,5d0a7b71003359dc118526ecb8470872",
-                "samtools-stats-dp.pdf:md5,0ec882996eda6c62aa669989bcab1602",
-                "samtools_alignment_plot-cnt.pdf:md5,7744706887a82360f445c627d69ed26e",
-                "samtools_alignment_plot-pct.pdf:md5,c3c23c9c17baa7f5a6b068392c73e68e",
-                "vcftools_tstv_by_count.pdf:md5,18e6fdfecbb563fc042e07d0e9e47ed0",
-                "vcftools_tstv_by_qual.pdf:md5,324c3954f4f247fd9932e22fec18ab90",
                 "bcftools_stats_indel-lengths.png:md5,7da61a07cfccdcb0816b508eee84b344",
                 "bcftools_stats_vqc_Count_Indels.png:md5,0b948fe27a6ba3a63cac2407657d9d9a",
                 "bcftools_stats_vqc_Count_SNP.png:md5,214564585b4bff3cb9ee448663b0d407",
@@ -348,44 +316,11 @@
                 "mosdepth-coverage-per-contig-single-cnt.png:md5,961ffc2fa00922f7f7310ec0e6972c8e",
                 "mosdepth-coverage-per-contig-single-pct.png:md5,0211b26857513888980624af727e1e6f",
                 "mosdepth-cumcoverage-dist-id.png:md5,8dad0d0233f5c03933483ef9a4d40eb1",
-                "picard_deduplication-cnt.png:md5,492c0bc1bd2a8bba5166b6d115eabf2c",
-                "picard_deduplication-pct.png:md5,e20e03d15ce91de39676e9477b3ff3cb",
                 "samtools-stats-dp.png:md5,3a78427c2e46117f4a3e774129d2a118",
                 "samtools_alignment_plot-cnt.png:md5,11c87333a38f7e744d9b58ac485cfa3a",
                 "samtools_alignment_plot-pct.png:md5,28cef933a83ba7b024ab8dbfdd7a5608",
                 "vcftools_tstv_by_count.png:md5,ca76b833d6ad03b16c0384a7be8d99ed",
                 "vcftools_tstv_by_qual.png:md5,bf48f07becb456d77fb08d812d198f25",
-                "bcftools_stats_indel-lengths.svg:md5,b02f09f7d4387d41e0067794a0e7eceb",
-                "bcftools_stats_vqc_Count_Indels.svg:md5,b770b6cff26482a77bbf6704dd6977e1",
-                "bcftools_stats_vqc_Count_SNP.svg:md5,8d5fae475b91287f3ac47ab4b0200eff",
-                "bcftools_stats_vqc_Count_Transitions.svg:md5,d83ff35633e5557d194663478eb9868b",
-                "bcftools_stats_vqc_Count_Transversions.svg:md5,c658692e93566d20897f45ef461e1577",
-                "fastqc-status-check-heatmap.svg:md5,f36c1b4e2a90b78030de2feb7b8422c6",
-                "fastqc_adapter_content_plot.svg:md5,10095b9620402f12edf31ea184a2f223",
-                "fastqc_per_base_n_content_plot.svg:md5,772accb3783bb6ef0610b88791bbb679",
-                "fastqc_per_base_sequence_quality_plot.svg:md5,a779c450614e9c9750d34841696cae1b",
-                "fastqc_per_sequence_gc_content_plot_Counts.svg:md5,882339e1609351afc80b66c03d0d6459",
-                "fastqc_per_sequence_gc_content_plot_Percentages.svg:md5,530b5343e4dfce4057fbee625abc59b0",
-                "fastqc_per_sequence_quality_scores_plot.svg:md5,ad2282069e638743f5bb1959f7cb8686",
-                "fastqc_sequence_counts_plot-cnt.svg:md5,daf023eea7a547a16da5882193a2f828",
-                "fastqc_sequence_counts_plot-pct.svg:md5,18165da4d7f007f7be60002219e7143f",
-                "fastqc_sequence_duplication_levels_plot.svg:md5,d40f4f1f11e6bc90bf86c5f250fd81f5",
-                "fastqc_sequence_length_distribution_plot.svg:md5,85f75aa4c579e116222c510f286c0d0d",
-                "fastqc_top_overrepresented_sequences_table.svg:md5,cbde7595321992de8586741e91626a6b",
-                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Count.svg:md5,8244055a82e8bc35e9dd53f2d31b08f7",
-                "gatk-base-recalibrator-quality-scores-plot_Pre-recalibration_Percent.svg:md5,625228baa78e7a96e96715de4318ed7b",
-                "gatk-base-recalibrator-reported-empirical-plot.svg:md5,d8f55e2a94e4994e1810d2c11093b73d",
-                "general_stats_table.svg:md5,d6a70b3e8d8b3c46e47ab124b4bee904",
-                "mosdepth-coverage-per-contig-single-cnt.svg:md5,02b7878e52dd4c82c8342b7b398256f1",
-                "mosdepth-coverage-per-contig-single-pct.svg:md5,4253425fda96c5beb8bd72064f746324",
-                "mosdepth-cumcoverage-dist-id.svg:md5,6508cedb2bed66e3bf1243fa6614549b",
-                "picard_deduplication-cnt.svg:md5,b9c7fe26b67610a6b873a40c2928bdbc",
-                "picard_deduplication-pct.svg:md5,136430b84e0c13a51b6f5a11a29d2eef",
-                "samtools-stats-dp.svg:md5,b65d512ffd009af582f739e5cd6064f2",
-                "samtools_alignment_plot-cnt.svg:md5,e697eb4163839e4f3995c945a335f303",
-                "samtools_alignment_plot-pct.svg:md5,b9b6d989253a0ee0eb709b0c900acf0a",
-                "vcftools_tstv_by_count.svg:md5,bce6f3efad96407e902503a77f06c547",
-                "vcftools_tstv_by_qual.svg:md5,4d26d9b21860d15c83e080126e2a239f",
                 "test.strelka.variants.bcftools_stats.txt:md5,86bd4938eed920d36f3f5937102a2967",
                 "test.md.mosdepth.global.dist.txt:md5,b61e1acee11a6ddf7ce3232a5948a6a0",
                 "test.md.mosdepth.region.dist.txt:md5,1a382f98d488d2ae3df83a0d87caafc1",
@@ -408,6 +343,6 @@
             "nf-test": "0.9.0",
             "nextflow": "24.09.0"
         },
-        "timestamp": "2024-10-03T12:25:35.894878"
+        "timestamp": "2024-10-03T13:05:01.408344"
     }
 }
\ No newline at end of file

From e9d430143096d9d6c8a9361cc85c2236ed64c05c Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 13:35:44 +0200
Subject: [PATCH 33/38] update nftignore

---
 tests/.nftignore        | 1 +
 tests/main.nf.test.snap | 3 +--
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/.nftignore b/tests/.nftignore
index a621518f82..a555e30fee 100644
--- a/tests/.nftignore
+++ b/tests/.nftignore
@@ -4,6 +4,7 @@ multiqc/multiqc_data/multiqc.log
 multiqc/multiqc_data/multiqc_data.json
 multiqc/multiqc_data/multiqc_general_stats.txt
 multiqc/multiqc_data/multiqc_picard_dups.txt
+multiqc/multiqc_data/multiqc_software_versions.txt
 multiqc/multiqc_data/multiqc_sources.txt
 multiqc/multiqc_data/picard_deduplication.txt
 multiqc/multiqc_plots/pdf/*
diff --git a/tests/main.nf.test.snap b/tests/main.nf.test.snap
index c2e9a4d4c6..5df884689c 100644
--- a/tests/main.nf.test.snap
+++ b/tests/main.nf.test.snap
@@ -284,7 +284,6 @@
                 "multiqc_citations.txt:md5,ace4ca89138a5f1e2be289c157c00bd9",
                 "multiqc_fastqc.txt:md5,bde0d0bffa62228b33fb68b7e25b6ff8",
                 "multiqc_samtools_stats.txt:md5,0f1e4c6c497d9a952765f9f3068ea4b9",
-                "multiqc_software_versions.txt:md5,6540a5f7ec8a2f928c1bdf6ff78b300b",
                 "picard_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
                 "picard_histogram_1.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
                 "picard_histogram_2.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
@@ -343,6 +342,6 @@
             "nf-test": "0.9.0",
             "nextflow": "24.09.0"
         },
-        "timestamp": "2024-10-03T13:05:01.408344"
+        "timestamp": "2024-10-03T13:34:20.536391"
     }
 }
\ No newline at end of file

From 1856529330bb3e891793e3c25f633f98774f3d56 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 13:38:03 +0200
Subject: [PATCH 34/38] enhance pdiff

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bc44d49a68..3139743797 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -13,7 +13,7 @@ on:
 
 env:
   NFT_DIFF: "pdiff"
-  NFT_DIFF_ARGS: "--line-numbers --expand-tabs=2"
+  NFT_DIFF_ARGS: "--line-numbers --width 120 --expand-tabs=2"
   NFT_VER: "0.9.0"
   NFT_WORKDIR: "~"
   NXF_ANSI_LOG: false

From 2cb513670b072bc3b1632bbe7270eaf48ec53aa4 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 16:01:18 +0200
Subject: [PATCH 35/38] patch deepvariant tests

---
 conf/test/tools_germline_manta.config | 23 +++++++++++++++++++++++
 nextflow.config                       |  1 +
 tests/test_deepvariant.yml            |  4 ++--
 3 files changed, 26 insertions(+), 2 deletions(-)
 create mode 100644 conf/test/tools_germline_manta.config

diff --git a/conf/test/tools_germline_manta.config b/conf/test/tools_germline_manta.config
new file mode 100644
index 0000000000..e50a48cbec
--- /dev/null
+++ b/conf/test/tools_germline_manta.config
@@ -0,0 +1,23 @@
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    Nextflow config file for running minimal tests
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    Defines input files and everything required to run a fast and simple pipeline test.
+
+    Use as follows:
+        nextflow run nf-core/sarek -profile test,, --outdir 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+params {
+    input                  = "${projectDir}/tests/csv/3.0/mapped_single_cram.csv"
+    genome                 = null
+    igenomes_ignore        = true
+    fasta                  = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.fasta"
+    fasta_fai              = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.fasta.fai"
+    intervals              = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.bed"
+    nucleotides_per_second = 20
+    step                   = 'variant_calling'
+    tools                  = null
+    wes                    = true
+}
diff --git a/nextflow.config b/nextflow.config
index 5f42e2fd9f..34ab9dfe5d 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -317,6 +317,7 @@ profiles {
     targeted                   { includeConfig 'conf/test/targeted.config' }
     tools                      { includeConfig 'conf/test/tools.config' }
     tools_germline             { includeConfig 'conf/test/tools_germline.config' }
+    tools_germline_deepvariant { includeConfig 'conf/test/tools_germline_deepvariant.config' }
     tools_somatic              { includeConfig 'conf/test/tools_somatic.config' }
     tools_somatic_ascat        { includeConfig 'conf/test/tools_somatic_ascat.config' }
     tools_tumoronly            { includeConfig 'conf/test/tools_tumoronly.config' }
diff --git a/tests/test_deepvariant.yml b/tests/test_deepvariant.yml
index e79be5e2f6..c5f8c4fd17 100644
--- a/tests/test_deepvariant.yml
+++ b/tests/test_deepvariant.yml
@@ -1,5 +1,5 @@
 - name: Run variant calling on germline sample with deepvariant
-  command: nextflow run main.nf -profile test,tools_germline --tools deepvariant --outdir results
+  command: nextflow run main.nf -profile test,tools_germline_deepvariant --tools deepvariant --outdir results
   tags:
     - deepvariant
     - germline
@@ -31,7 +31,7 @@
     - path: results/reports/mosdepth/sample1/sample1.recal.regions.bed.gz.csi
     - path: results/reports/samtools/sample1/sample1.recal.cram.stats
 - name: Run variant calling on germline sample with deepvariant without intervals
-  command: nextflow run main.nf -profile test,tools_germline --tools deepvariant --no_intervals --outdir results
+  command: nextflow run main.nf -profile test,tools_germline_deepvariant --tools deepvariant --no_intervals --outdir results
   tags:
     - deepvariant
     - germline

From d8e83d876d80ca1bff9074082bc0078baeb36667 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 16:10:18 +0200
Subject: [PATCH 36/38] fix path

---
 conf/test/tools_germline_manta.config | 23 -----------------------
 1 file changed, 23 deletions(-)
 delete mode 100644 conf/test/tools_germline_manta.config

diff --git a/conf/test/tools_germline_manta.config b/conf/test/tools_germline_manta.config
deleted file mode 100644
index e50a48cbec..0000000000
--- a/conf/test/tools_germline_manta.config
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Nextflow config file for running minimal tests
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    Defines input files and everything required to run a fast and simple pipeline test.
-
-    Use as follows:
-        nextflow run nf-core/sarek -profile test,, --outdir 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*/
-
-params {
-    input                  = "${projectDir}/tests/csv/3.0/mapped_single_cram.csv"
-    genome                 = null
-    igenomes_ignore        = true
-    fasta                  = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.fasta"
-    fasta_fai              = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.fasta.fai"
-    intervals              = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.bed"
-    nucleotides_per_second = 20
-    step                   = 'variant_calling'
-    tools                  = null
-    wes                    = true
-}

From edd06242badf0aa00c0d856333c47a03890a2de6 Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 16:25:07 +0200
Subject: [PATCH 37/38] actually add the file

---
 conf/test/tools_germline_deepvariant.config | 23 +++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 conf/test/tools_germline_deepvariant.config

diff --git a/conf/test/tools_germline_deepvariant.config b/conf/test/tools_germline_deepvariant.config
new file mode 100644
index 0000000000..e50a48cbec
--- /dev/null
+++ b/conf/test/tools_germline_deepvariant.config
@@ -0,0 +1,23 @@
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    Nextflow config file for running minimal tests
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    Defines input files and everything required to run a fast and simple pipeline test.
+
+    Use as follows:
+        nextflow run nf-core/sarek -profile test,, --outdir 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
+
+params {
+    input                  = "${projectDir}/tests/csv/3.0/mapped_single_cram.csv"
+    genome                 = null
+    igenomes_ignore        = true
+    fasta                  = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.fasta"
+    fasta_fai              = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.fasta.fai"
+    intervals              = "${params.modules_testdata_base_path}/genomics/homo_sapiens/genome/genome.bed"
+    nucleotides_per_second = 20
+    step                   = 'variant_calling'
+    tools                  = null
+    wes                    = true
+}

From 08be95682ae66fc87d936666fecc24e0c52ca7dc Mon Sep 17 00:00:00 2001
From: maxulysse 
Date: Thu, 3 Oct 2024 17:02:12 +0200
Subject: [PATCH 38/38] no md5sum

---
 tests/test_deepvariant.yml | 77 +++++++++++++-------------------------
 1 file changed, 27 insertions(+), 50 deletions(-)

diff --git a/tests/test_deepvariant.yml b/tests/test_deepvariant.yml
index c5f8c4fd17..05f4be02a4 100644
--- a/tests/test_deepvariant.yml
+++ b/tests/test_deepvariant.yml
@@ -6,30 +6,20 @@
     - variant_calling
   files:
     - path: results/multiqc
-    - path: results/reports/bcftools/deepvariant/sample1/sample1.deepvariant.bcftools_stats.txt
-      # md5sum: a6634ceb1c712de14009b05d273713a7
-    - path: results/reports/vcftools/deepvariant/sample1/sample1.deepvariant.FILTER.summary
-      md5sum: acce7a163f4070226429f9d6bc3fbd2c
-    - path: results/reports/vcftools/deepvariant/sample1/sample1.deepvariant.TsTv.count
-      md5sum: de1632b8413f4c14c78acdc2df5c5224
-    - path: results/reports/vcftools/deepvariant/sample1/sample1.deepvariant.TsTv.qual
-      md5sum: a9c05f0ecb0bb71123e345589bd7089c
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.g.vcf.gz
-    # binary changes md5sums on reruns
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.g.vcf.gz.tbi
-    # binary changes md5sums on reruns
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.vcf.gz
-    # binary changes md5sums on reruns
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.vcf.gz.tbi
-    # binary changes md5sums on reruns
-    - path: results/deepvariant
-      should_exist: false
-    - path: results/reports/mosdepth/sample1/sample1.recal.mosdepth.global.dist.txt
-    - path: results/reports/mosdepth/sample1/sample1.recal.mosdepth.region.dist.txt
-    - path: results/reports/mosdepth/sample1/sample1.recal.mosdepth.summary.txt
-    - path: results/reports/mosdepth/sample1/sample1.recal.regions.bed.gz
-    - path: results/reports/mosdepth/sample1/sample1.recal.regions.bed.gz.csi
-    - path: results/reports/samtools/sample1/sample1.recal.cram.stats
+    - path: results/reports/bcftools/deepvariant/test/test.deepvariant.bcftools_stats.txt
+    - path: results/reports/mosdepth/test/test.recal.mosdepth.global.dist.txt
+    - path: results/reports/mosdepth/test/test.recal.mosdepth.region.dist.txt
+    - path: results/reports/mosdepth/test/test.recal.mosdepth.summary.txt
+    - path: results/reports/mosdepth/test/test.recal.regions.bed.gz
+    - path: results/reports/mosdepth/test/test.recal.regions.bed.gz.csi
+    - path: results/reports/samtools/test/test.recal.cram.stats
+    - path: results/reports/vcftools/deepvariant/test/test.deepvariant.FILTER.summary
+    - path: results/reports/vcftools/deepvariant/test/test.deepvariant.TsTv.count
+    - path: results/reports/vcftools/deepvariant/test/test.deepvariant.TsTv.qual
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.g.vcf.gz
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.g.vcf.gz.tbi
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.vcf.gz
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.vcf.gz.tbi
 - name: Run variant calling on germline sample with deepvariant without intervals
   command: nextflow run main.nf -profile test,tools_germline_deepvariant --tools deepvariant --no_intervals --outdir results
   tags:
@@ -40,31 +30,18 @@
   files:
     - path: results/multiqc
     - path: results/no_intervals.bed
-      md5sum: f3dac01ea66b95fe477446fde2d31489
     - path: results/no_intervals.bed.gz
-      md5sum: f3dac01ea66b95fe477446fde2d31489
     - path: results/no_intervals.bed.gz.tbi
-      md5sum: f3dac01ea66b95fe477446fde2d31489
-    - path: results/reports/bcftools/deepvariant/sample1/sample1.deepvariant.bcftools_stats.txt
-      # md5sum: 0c48d8e315ca23c5dc2e7bf71ea0b6a6
-    - path: results/reports/vcftools/deepvariant/sample1/sample1.deepvariant.FILTER.summary
-      md5sum: 7b17bd18c2d4bf129561c7c6a419a889
-    - path: results/reports/vcftools/deepvariant/sample1/sample1.deepvariant.TsTv.count
-      md5sum: e570b07835a793bbab4f517cabed5a45
-    - path: results/reports/vcftools/deepvariant/sample1/sample1.deepvariant.TsTv.qual
-      md5sum: 03f64b8092fc212bcb746b08f9e676a5
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.g.vcf.gz
-    # binary changes md5sums on reruns
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.g.vcf.gz.tbi
-    # binary changes md5sums on reruns
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.vcf.gz
-    # binary changes md5sums on reruns
-    - path: results/variant_calling/deepvariant/sample1/sample1.deepvariant.vcf.gz.tbi
-    # binary changes md5sums on reruns
-    - path: results/deepvariant
-      should_exist: false
-    - path: results/reports/mosdepth/sample1/sample1.recal.mosdepth.global.dist.txt
-    - path: results/reports/mosdepth/sample1/sample1.recal.mosdepth.summary.txt
-    - path: results/reports/mosdepth/sample1/sample1.recal.per-base.bed.gz
-    - path: results/reports/mosdepth/sample1/sample1.recal.per-base.bed.gz.csi
-    - path: results/reports/samtools/sample1/sample1.recal.cram.stats
+    - path: results/reports/bcftools/deepvariant/test/test.deepvariant.bcftools_stats.txt
+    - path: results/reports/mosdepth/test/test.recal.mosdepth.global.dist.txt
+    - path: results/reports/mosdepth/test/test.recal.mosdepth.summary.txt
+    - path: results/reports/mosdepth/test/test.recal.per-base.bed.gz
+    - path: results/reports/mosdepth/test/test.recal.per-base.bed.gz.csi
+    - path: results/reports/samtools/test/test.recal.cram.stats
+    - path: results/reports/vcftools/deepvariant/test/test.deepvariant.FILTER.summary
+    - path: results/reports/vcftools/deepvariant/test/test.deepvariant.TsTv.count
+    - path: results/reports/vcftools/deepvariant/test/test.deepvariant.TsTv.qual
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.g.vcf.gz
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.g.vcf.gz.tbi
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.vcf.gz
+    - path: results/variant_calling/deepvariant/test/test.deepvariant.vcf.gz.tbi