From b4e40280a46ba3b5464e05fb8031dfbce2fa834a Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke <101190534+nvnieuwk@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:35:22 +0200 Subject: [PATCH] Release PR 0.2.0 (#94) * Birth of a pipeline (#2) * cleaned up the code and docs before starting * cleaned up the github actions * cleaned some more code * removed unused pipeline code * added an easily adjustable input checker * removed some CI * added the variant callers * linting * tests update * ci update * linting * linting * linting * turned off actions * added read counts + delly updates * added scatter count to delly call * added versions and multiqc * updated the manta workflow * updated the whamg workflow * added versions to whamg * added some additional test data * updated the test data * updated the test data * updated the test data * updated the test data * overal updates and improvements * small updates * small updates * metrics part 1 * metrics part 2 * Module evidence qc (#3) * make bincov matrix part 1 * added ploidy and parts of calcmedcov * added WGD * removed delly and added a reheader to MANTA * added all code to the module (some parts are still broken) * small updates * small ploidy matrix fix * small updates to evidenceQC + re-added delly * Module gather batch evidence (#4) * added groundwork for the module * added groundwork for the module * more work done * removed commented lines * Continue module gather batch evidence (#19) * printsvevidence update (not done yet) * restructured the pipeline to match nf-core v2.6 * updated module paths * some small "improvements" * Template update for nf-core/tools version 2.6 * additional fixes to the template * removed wrong file * Added clarifying comments to GSE * updated some of the modules to 4.3.0.0 * fixed some issues caused by gatk4.3.0.0 * latest additions * Refactoring (#20) * refactored gather sample evidence * refactor the rest * New series of fixes and features (#21) * update whamg * update local tests * updated whamg officially * updated whamg + fixed svtk standardize * small work on scramble (still no correct data for this tool) * updated schema * improved whamg bed file integration * added a merge vcfs subworkflow * small fix * update test config * added the samplesheet validation and conversion script * hotfix dev test (#22) * Add smoove & tests (#23) * Template update for nf-core/tools version 2.6 * hotfix dev test * fixed a lot of issues * added smoove * updated the schema * fix samplesheet and schema * add better outdir folders * add tests * tests fix * fix secrets * fix typo * add more tests * add template yml * Template update for nf-core/tools version 2.7.2 * fixes after template merge * linting * more linting * even more linting * black * Refactor the pipeline to prepare for subworkflow export to nf-core (#24) * refactored the pipeline * remove unused modules * removed unused workflows * Add gridss (#25) * refactored the pipeline * remove unused modules * removed unused workflows * add gridss * add stub to local modules * fix stubs * fully add gridss * add tests * copy fix? * add gridss test to ci * exclude gridss vcfs from metrics (not supported) * update min nextflow version to fix caching issue * update gridss * remove TODOs [no ci] * Add genotyping (#26) * update scattering * update delly * bump commit * add --output_callers parameter * small fix to --output_callers * fix schema and test config * removed reheadering from manta * update bcftools/sort * update bcftools/sort * update headers after jasmine merge * small fix * finished genotyping * fix for paragraph/multigrmpy * updated the samplesheet conversion * removed some unused modules * add merging of samples from the same family * removed scattering from whamg * Updated jasmine (added support for bgzip to the module) * fix prettier * fix tests * fix tests again and remove black CI * add linting ci to nf-core.yml * Adopted SVINSSEQ as uniform ins sequence info key * disabled whamg for now * add missing format header * add patch for delly * fix header typo * remove local test profile * updated test profiles and added big tests * add delly args * add new args to schema and config * Add annotation + viola + join checks + cleanup (#29) * add join checks * fix delly mismatches * Added viola * fix header issues in single caller runs * header fix? * appease eclint * add stub to reverse_bed * fix for gridss? * appease eclint again! * typo * fix permissions * fix shebang * fix shebang again * disable gridss * fix tests * remove old code from gatk-sv * Add VEP to the pipeline * add some QOL parameters * update tests * QOL changes (variables and joins) * disable scattering for delly * remove unused gatk modules * update modules * made BED files optional * add metro map and update readme * forgot to save svg * fix linting * fix vep test * free up CI space? * use another cache for vep * edit PosCon3 samplesheet_big.csv (#30) * Add bcftools sort (#31) * add join checks * fix delly mismatches * Added viola * fix header issues in single caller runs * header fix? * appease eclint * add stub to reverse_bed * fix for gridss? * appease eclint again! * typo * fix permissions * fix shebang * fix shebang again * disable gridss * fix tests * remove old code from gatk-sv * Add VEP to the pipeline * add some QOL parameters * update tests * QOL changes (variables and joins) * disable scattering for delly * remove unused gatk modules * update modules * made BED files optional * add metro map and update readme * forgot to save svg * fix linting * fix vep test * free up CI space? * use another cache for vep * add bcftools sort * fix smoove output (#33) * fix smoove output * update according to other modules * Fully implement annotation (#35) * Template update for nf-core/tools version 2.6 * Template update for nf-core/tools version 2.7.2 * first steps * fully implement the annotation * update test * offer a lamb to the linting gods * bug fix * offer a virgin to the linting gods (hope this is enough) * Add dynamic VCFanno config creation * go on a pilgrimage to the mountain of the linting gods and make a blood sacrifice * fix and update annotate test to stub * update vep container on stub runs * add postannotations support to the configs * simplified the vcfanno config code and made it smarter * added new fields from the annotsv vcf to the default configs * added a param for the default annotsv file name * fix small bug with param * fix small bug with param * Add all default configs * sacrificing my firstborn child to the linting gods * Moved the unused configs to a separate folder * update configs * update vep config * add option to annotate on small variants with AnnotSV (real test files should still be added) * Remove unused VEP parameters * fix issues * add tests for small variants vcfs * add an option to also output the annotsv outputs * Merge wrongly placed commits (#40) * fixes for big tests * metro map update * Template update for nf-core/tools version 2.8 * black linting * update modules * update modules * fix local modules * bump * eclint * update genome in docs * update vcfanno configs retina and rpe * fix rpe bed file in config * Cnv support (#50) * Template update for nf-core/tools version 2.6 * Template update for nf-core/tools version 2.7.2 * first steps * fully implement the annotation * update test * offer a lamb to the linting gods * bug fix * offer a virgin to the linting gods (hope this is enough) * Add dynamic VCFanno config creation * go on a pilgrimage to the mountain of the linting gods and make a blood sacrifice * fix and update annotate test to stub * update vep container on stub runs * add postannotations support to the configs * simplified the vcfanno config code and made it smarter * added new fields from the annotsv vcf to the default configs * added a param for the default annotsv file name * fix small bug with param * fix small bug with param * Add all default configs * sacrificing my firstborn child to the linting gods * Moved the unused configs to a separate folder * update configs * update vep config * add option to annotate on small variants with AnnotSV (real test files should still be added) * Remove unused VEP parameters * fix issues * add tests for small variants vcfs * add an option to also output the annotsv outputs * Merge wrongly placed commits (#40) * fixes for big tests * metro map update * Template update for nf-core/tools version 2.8 * black linting * update modules * update modules * fix local modules * bump * eclint * update genome in docs * update vcfanno configs retina and rpe * fix rpe bed file in config * adjust test to new data * remove unused data from workflows * remove simple event annotation * update modules config * remove unused modules * fix compile error * another compile error * remove comments in config * guess what! another compile error * small fixes to annotsv * update viola * circumvent a annotsv bug * add gridss genotyping * filter out variants with 0/0 genotype from gridss * move ref variants filtering to before annotsv * update tests * fix linting and add meta to references * black * install expansionhunter * fix merge conflict issues * fix linting * fix config * fix stub * add expansionhunter * some concurrency debugging * add nf-validation support * revert to using linkedhashmap for now * fix jasmine issue * update tests * fix typos * fix linting * there you go editorconfig * let's make it pretty * update nf-test config * fix even more tests * add concat output and fix tests * fix schema * now be nice please * i'm pretty again * update big test samplesheet [no ci] * fix max_time pattern [no ci] * add bcftools sort to single runs * only apply viola on gridss VCFs and change prefixes * remove unused comment [no ci] * fix input pattern * improve the efficiency of viola * black * added a sort step to gridss * updated the gridss label * patch gridss module * remove estimate_read_length * remove unused code * small typo * add -ends to vcfanno * add full test config * fix full test description * update samplesheet * add exists tags to the samplesheet schema * specify advised resources for gridss * possible fix for gridss OOM? * remove code duplication * remove an unused parameter * added a check for callers support being higher than the amount of sv callers * update metro map * increase gridss memory * try to optimize gridss part 2 * try to optimize gridss part 3 * oops * oops 2 * oops 3 * update to advised amounts * increase viola time * discourage the use of gridss for now * typo * linting fix * rename SV subworkflow * fix expansionhunter catalog and add qdnaseq ref * add qdnaseq * add a check for the qdnaseq reference * fixed some issues with qdnaseq * add cram merging and index creation * update resources for qdnaseq * update resources for qdnaseq * update resources for qdnaseq * fix resources qdnaseq * add wisecondorx * updated the metro map * fix background of metro map * update resolution * update resolution * remove old samplesheet conversion script * moved available callers to a groovy script * removed the manual check for file exists (now fully uses nf-validation) * fix a bug with concat when a cnv caller has been supplied * added some comments for the last fix * update optional input handling * fix small issue with annotsv annotations * fix a no process matching selector warning * revert last changes * temp fix for warning * improve vep cache handling + update modules * typo * fix container declaration * fix for manta issue? * undo last commit * version bump expansionhunter * added support for manta configs * made qdnaseq references gender specific * update manta resources * add contig input to manta * moved the contigs file creation to the manta subwf * fix vep params in schema * fix linting with no template update * fix nf-test tests * fix eclint * fix eclint * change gender to sex * typo * added the sex arg to expansionhunter * fix nf-test config for v0.8.0 * revert nf-test to 0.7.3 * prettier * set default sex to female instead of male * fix tests samplesheet * Fix vep container issue (#52) * add dynamic container fetching for vep * linting fix * moved the function to the process itself * fix conda issue * eclint * fix params schema * fix linting * fix for vep issue? * fix for missing singularity container * Add filtering on annotations + fix linting (#55) * Add filtering on annotations * fix linting * begone trailing whitespace * add annotation filter to test * CNV VCFs (#58) * add vcf creation to wisecondorx * add qdnaseq vcfs * update tests * add a simple qdnaseq filter * small fix in the wisecondorx config * small naming fix * add jasmine * fix for config? * fix tests * prettier * fix tests again * fix output logic * fix jasmine + add annotation * eclint * more output logic fixes * eclint (again) * more output logic fixes * fix cnv outputs * remove obsolete if statement * fix issue with meta joining * Family merging (#61) * add vcf creation to wisecondorx * add qdnaseq vcfs * update tests * add a simple qdnaseq filter * small fix in the wisecondorx config * small naming fix * add jasmine * fix for config? * fix tests * prettier * fix tests again * fix output logic * fix jasmine + add annotation * eclint * more output logic fixes * eclint (again) * more output logic fixes * fix cnv outputs * remove obsolete if statement * fix issue with meta joining * add family name to the samplesheet and meta * changes to jasmine subwf + add family merging subwf * add correct reheadering * add family merging (does not work rn) * some more work * fix repeat VCF error * add z-score to VCF header * small fixes to sex defining * Add proper testing + fix some issues found (#64) * add vcf creation to wisecondorx * add qdnaseq vcfs * update tests * add a simple qdnaseq filter * small fix in the wisecondorx config * small naming fix * add jasmine * fix for config? * fix tests * prettier * fix tests again * fix output logic * fix jasmine + add annotation * eclint * more output logic fixes * eclint (again) * more output logic fixes * fix cnv outputs * remove obsolete if statement * fix issue with meta joining * add family name to the samplesheet and meta * changes to jasmine subwf + add family merging subwf * add correct reheadering * add family merging (does not work rn) * some more work * fix repeat VCF error * first commit * add z-score to VCF header * small fixes to sex defining * add test for bam_cnv_calling * test bam_prepare_samtools * test bam_repeat_estimation_expansionhunter * test bam_sv_calling * test bam_variant_calling_delly * test bam_variant_calling_gridss * test bam_variant_calling_manta * test bam_variant_calling_qdnaseq * test bam_variant_calling_smoove * test bam_variant_calling_wisecondorx * uniformize config * test vcf_annotate_vep_annotsv_vcfanno * test vcf_concat_bcftools * test vcf_merge_callers_jasmine * fix header * update vep annotations * oops * add gnomad to vep * revert vep container changes * add sift * fix merge crams with families * fix join duplication for replicates * fully test jasmine family merge * uniformize tests * fix duplication glitch * add pipeline tests for callers * add families tests * add duplicates tests * remove old tests and add new tests to ci * fix linting * use nf-core dev for linting * update minimum nextflow version * revert nf-core version to latest * upload artifacts * fix artifacts * only upload nf-test folder * fix artifact again? * fix artifact again? * fix artifact again? * prettier * only get artifacts on failure * only get artifacts on failure * only get artifacts on failure * fix qdnaseq test * set nf-test to v0.8.1 * try to fix permission errors * update family jasmine tests * small clarification in the header * Fix annotsv TCL error (#69) * add vcf creation to wisecondorx * add qdnaseq vcfs * update tests * add a simple qdnaseq filter * small fix in the wisecondorx config * small naming fix * add jasmine * fix for config? * fix tests * prettier * fix tests again * fix output logic * fix jasmine + add annotation * eclint * more output logic fixes * eclint (again) * more output logic fixes * fix cnv outputs * remove obsolete if statement * fix issue with meta joining * add family name to the samplesheet and meta * changes to jasmine subwf + add family merging subwf * add correct reheadering * add family merging (does not work rn) * some more work * fix repeat VCF error * first commit * add z-score to VCF header * small fixes to sex defining * add test for bam_cnv_calling * test bam_prepare_samtools * test bam_repeat_estimation_expansionhunter * test bam_sv_calling * test bam_variant_calling_delly * test bam_variant_calling_gridss * test bam_variant_calling_manta * test bam_variant_calling_qdnaseq * test bam_variant_calling_smoove * test bam_variant_calling_wisecondorx * uniformize config * test vcf_annotate_vep_annotsv_vcfanno * test vcf_concat_bcftools * test vcf_merge_callers_jasmine * fix header * update vep annotations * oops * add gnomad to vep * revert vep container changes * add sift * fix merge crams with families * fix join duplication for replicates * fully test jasmine family merge * uniformize tests * fix duplication glitch * add pipeline tests for callers * add families tests * add duplicates tests * remove old tests and add new tests to ci * fix linting * use nf-core dev for linting * update minimum nextflow version * revert nf-core version to latest * upload artifacts * fix artifacts * only upload nf-test folder * fix artifact again? * fix artifact again? * fix artifact again? * prettier * only get artifacts on failure * only get artifacts on failure * only get artifacts on failure * fix qdnaseq test * set nf-test to v0.8.1 * try to fix permission errors * update family jasmine tests * split annotsv input files by svtype and merge them back * small clarification in the header * fix bcftools concat issue * fix linting * don't lint .prettierignore * Add Svync standardization + other fixes (#72) * add vcf creation to wisecondorx * add qdnaseq vcfs * update tests * add a simple qdnaseq filter * small fix in the wisecondorx config * small naming fix * add jasmine * fix for config? * fix tests * prettier * fix tests again * fix output logic * fix jasmine + add annotation * eclint * more output logic fixes * eclint (again) * more output logic fixes * fix cnv outputs * remove obsolete if statement * fix issue with meta joining * add family name to the samplesheet and meta * changes to jasmine subwf + add family merging subwf * add correct reheadering * add family merging (does not work rn) * some more work * fix repeat VCF error * first commit * add z-score to VCF header * small fixes to sex defining * add test for bam_cnv_calling * test bam_prepare_samtools * test bam_repeat_estimation_expansionhunter * test bam_sv_calling * test bam_variant_calling_delly * test bam_variant_calling_gridss * test bam_variant_calling_manta * test bam_variant_calling_qdnaseq * test bam_variant_calling_smoove * test bam_variant_calling_wisecondorx * uniformize config * test vcf_annotate_vep_annotsv_vcfanno * test vcf_concat_bcftools * test vcf_merge_callers_jasmine * fix header * update vep annotations * oops * add gnomad to vep * revert vep container changes * add sift * fix merge crams with families * fix join duplication for replicates * fully test jasmine family merge * uniformize tests * fix duplication glitch * add pipeline tests for callers * add families tests * add duplicates tests * remove old tests and add new tests to ci * fix linting * use nf-core dev for linting * update minimum nextflow version * revert nf-core version to latest * upload artifacts * fix artifacts * only upload nf-test folder * fix artifact again? * fix artifact again? * fix artifact again? * prettier * only get artifacts on failure * only get artifacts on failure * only get artifacts on failure * fix qdnaseq test * set nf-test to v0.8.1 * try to fix permission errors * update family jasmine tests * split annotsv input files by svtype and merge them back * small clarification in the header * fix bcftools concat issue * fix linting * don't lint .prettierignore * deprecate gridss for now * implement delly svync * implement manta svync * implement smoove svync * add better headering to merge callers * small fix to bcftools annotate * fix headers for family merging * remove unused assets * fix some stability issues * simplify expansionhunter handling * reheader with bcftools/reheader again * fix the headering once and for all * add a quick view statement * change view to dump * rename dump tag * extra dump * fix join issue * fix header issues with annotsv * add missing header line for annotsv * fix callers info field * remove some views * add views for hpc debugging * a workaround for double variants in annotsv * a workaround for double variants in annotsv try 2 * remove view statements * fix join error? * fix some linting issues * don't test gridss * drop pinned nf-test version * disable gridss tests for real * fix some tests * update subwf tests * update pipeline tests * fix annotate tests? * fix annotate tests again? * add views to annotation test * fix join error + fix test jasmine * revert join error changes? * another try to fix weird join error * join error fix try 3 * join error fix try 4 * join error fix try 5 * join error fix try 6 * join error fix try 7 * Template v2.13.1 sync + update all modules (#73) * Template update for nf-core/tools version 2.6 * Template update for nf-core/tools version 2.7.2 * update pipeline name * update test-data repo name * update test data config name * update pipeline name * update pipeline name * update nf-core yaml * Template update for nf-core/tools version 2.13.1 * Merge branch 'TEMPLATE' into template-v2.13.1-sync * fix some linting issues * update all modules * fix subwf in modules json * remove unused code * remove unused code * fix jasminesv * fix eclint * prettier * have nf-test in the CI * fix samtools convert stub * prettier * fix tabix outputs + tests * update test snapshots * remove views * rearrange joins * revert last commit * another try :crossed_fingers: * another try 2 :crossed_fingers: * try adding by * fix wrong versions yml * patch bcftools concat * fix bcftools concat versions * fix delly svync config * use midnighter's approach of joining channels * fix linting * fix test * Create beautiful docs with mkdocs (#74) * create beautiful docs * some small fixes * set dev version to beta version * Docs 0.1.0dev (#75) * update docs * fix linting * update description of pipeline * docs-output (#76) * docs * parameters.md adapted * relative links * comments for docs-output PR * parameters.md correction * Last fixes before v0.1.0 release (#77) * fix tests * some esthetic fixes * move the logo in the metro map * made the metro map logo a bit smaller * update parameter docs * bump to version 0.1.0 * update to dev version * update docs building * try to fix the doc building action * merge master into dev * Add keyword shortcuts to the `--callers` parameter (#85) * add more keywords + update docs * update tests * prettier * fix tests * bump wisecondorx to v1.2.6 (#87) * bump wisecondorx to v1.2.6 * add missing arguments to wisecondorx predict * add seed 0 * Fix a wisecondorx arg typo * Fix smoove output when using `--output_callers` (#89) * fix smoove output * fix copy paste error * fix smoove tests * update changelog * Make the workflow pluggable (#91) * make main workflow pluggable * update svync config handling * update bedgovcf config handling * pluggable annotation workflow * update bam_cnv_calling test * update all modules * another wave of module updates * let the pipeline run again * fix last modules * make editorconfig happy * fix tests * Update/fix annotsv + add HPO terms (#93) * make main workflow pluggable * update svync config handling * update bedgovcf config handling * pluggable annotation workflow * update bam_cnv_calling test * update all modules * another wave of module updates * let the pipeline run again * fix last modules * make editorconfig happy * fix tests * update annotsv * add hpo terms * re-add samples to samplesheet * fix the annotsv tests * update changelog * bump version to 0.2.0 * fix wrongly merged conflict in modules.config * fix another weird issue * use latest vep version --------- Co-authored-by: mvheetve <57952494+mvheetve@users.noreply.github.com> --- .github/workflows/build-docs.yml | 10 +- CHANGELOG.md | 24 + assets/multiqc_config.yml | 4 +- assets/schema_input.json | 5 + assets/test.npz | 0 conf/modules.config | 117 ++--- conf/test.config | 2 +- docs/parameters.md | 18 +- main.nf | 60 ++- modules.json | 48 +- .../nf-core/annotsv/annotsv/environment.yml | 7 + modules/nf-core/annotsv/annotsv/main.nf | 20 +- modules/nf-core/annotsv/annotsv/meta.yml | 8 +- .../annotsv/annotsv/tests/main.nf.test | 52 +++ .../annotsv/annotsv/tests/main.nf.test.snap | 63 +++ .../annotsv/annotsv/tests/nextflow.config | 5 + .../nf-core/annotsv/annotsv/tests/tags.yml | 2 + .../installannotations/environment.yml | 2 +- .../annotsv/installannotations/main.nf | 5 +- .../annotsv/installannotations/meta.yml | 2 +- .../installannotations/tests/main.nf.test | 25 + .../tests/main.nf.test.snap | 29 ++ .../annotsv/installannotations/tests/tags.yml | 2 + modules/nf-core/bcftools/annotate/main.nf | 4 +- .../bcftools/annotate/tests/bcf.config | 6 + .../bcftools/annotate/tests/main.nf.test | 108 +++++ .../bcftools/annotate/tests/main.nf.test.snap | 79 ++++ .../nf-core/bcftools/annotate/tests/tags.yml | 2 + .../bcftools/annotate/tests/vcf.config | 6 + modules/nf-core/bcftools/concat/main.nf | 14 +- modules/nf-core/bcftools/concat/meta.yml | 8 +- .../bcftools/concat/tests/main.nf.test | 99 ++++ .../bcftools/concat/tests/main.nf.test.snap | 101 ++++ .../bcftools/concat/tests/nextflow.config | 3 + .../nf-core/bcftools/concat/tests/tags.yml | 2 + modules/nf-core/bcftools/filter/main.nf | 4 +- modules/nf-core/bcftools/filter/meta.yml | 4 +- .../bcftools/filter/tests/main.nf.test | 82 ++++ .../bcftools/filter/tests/main.nf.test.snap | 101 ++++ .../bcftools/filter/tests/nextflow.config | 3 + .../nf-core/bcftools/filter/tests/tags.yml | 2 + modules/nf-core/bcftools/sort/main.nf | 4 +- .../nf-core/bcftools/sort/tests/main.nf.test | 54 +++ .../bcftools/sort/tests/main.nf.test.snap | 68 +++ modules/nf-core/bcftools/sort/tests/tags.yml | 2 + modules/nf-core/bedgovcf/environment.yml | 2 +- modules/nf-core/bedgovcf/main.nf | 6 +- .../nf-core/bedgovcf/tests/main.nf.test.snap | 20 +- modules/nf-core/delly/call/environment.yml | 2 +- modules/nf-core/delly/call/main.nf | 10 +- modules/nf-core/delly/call/meta.yml | 10 + modules/nf-core/delly/call/tests/main.nf.test | 187 ++++++++ .../delly/call/tests/main.nf.test.snap | 247 ++++++++++ modules/nf-core/delly/call/tests/tags.yml | 2 + modules/nf-core/delly/call/tests/vcf.config | 5 + .../ensemblvep/download/environment.yml | 2 +- modules/nf-core/ensemblvep/download/main.nf | 14 +- .../ensemblvep/download/tests/main.nf.test | 60 +++ .../download/tests/main.nf.test.snap | 322 +++++++++++++ .../ensemblvep/download/tests/nextflow.config | 12 + .../ensemblvep/download/tests/tags.yml | 2 + .../nf-core/ensemblvep/vep/environment.yml | 2 +- modules/nf-core/ensemblvep/vep/main.nf | 10 +- .../nf-core/ensemblvep/vep/tests/main.nf.test | 40 +- .../ensemblvep/vep/tests/main.nf.test.snap | 26 ++ .../ensemblvep/vep/tests/nextflow.config | 11 +- .../nf-core/expansionhunter/environment.yml | 2 + modules/nf-core/expansionhunter/main.nf | 8 +- .../expansionhunter/tests/main.nf.test | 35 +- .../expansionhunter/tests/main.nf.test.snap | 133 +++++- modules/nf-core/gawk/main.nf | 5 +- modules/nf-core/gawk/tests/main.nf.test | 56 +++ modules/nf-core/gawk/tests/main.nf.test.snap | 68 +++ modules/nf-core/gawk/tests/nextflow.config | 6 + .../tests/nextflow_with_program_file.config | 5 + modules/nf-core/gawk/tests/tags.yml | 2 + modules/nf-core/gridss/gridss/environment.yml | 7 + modules/nf-core/gridss/gridss/main.nf | 7 +- modules/nf-core/gridss/gridss/meta.yml | 6 +- modules/nf-core/jasminesv/environment.yml | 1 + modules/nf-core/jasminesv/main.nf | 6 +- modules/nf-core/jasminesv/meta.yml | 16 +- modules/nf-core/jasminesv/tests/iris.config | 6 + modules/nf-core/jasminesv/tests/main.nf.test | 185 ++++++++ .../nf-core/jasminesv/tests/main.nf.test.snap | 167 +++++++ .../nf-core/jasminesv/tests/normalize.config | 5 + modules/nf-core/jasminesv/tests/tags.yml | 2 + .../manta/convertinversion/environment.yml | 2 +- .../nf-core/manta/convertinversion/main.nf | 13 + .../nf-core/manta/convertinversion/meta.yml | 9 + .../manta/convertinversion/tests/main.nf.test | 92 ++++ .../convertinversion/tests/main.nf.test.snap | 85 ++++ .../manta/convertinversion/tests/tags.yml | 2 + modules/nf-core/manta/germline/main.nf | 6 +- .../nf-core/manta/germline/tests/main.nf.test | 162 +++++++ .../manta/germline/tests/main.nf.test.snap | 139 ++++++ .../manta/germline/tests/nextflow.config | 5 + modules/nf-core/manta/germline/tests/tags.yml | 2 + modules/nf-core/ngsbits/samplegender/meta.yml | 2 +- .../ngsbits/samplegender/tests/main.nf.test | 47 ++ .../samplegender/tests/main.nf.test.snap | 35 ++ .../ngsbits/samplegender/tests/tags.yml | 2 + .../samtools/convert/samtools-convert.diff | 2 +- .../samtools/convert/tests/main.nf.test | 32 ++ .../samtools/convert/tests/main.nf.test.snap | 65 +++ .../nf-core/samtools/faidx/environment.yml | 3 +- modules/nf-core/samtools/faidx/meta.yml | 4 + .../nf-core/samtools/faidx/tests/main.nf.test | 122 +++++ .../samtools/faidx/tests/main.nf.test.snap | 249 ++++++++++ .../samtools/faidx/tests/nextflow.config | 7 + .../samtools/faidx/tests/nextflow2.config | 6 + modules/nf-core/samtools/faidx/tests/tags.yml | 2 + modules/nf-core/wisecondorx/convert/main.nf | 8 +- modules/nf-core/wisecondorx/convert/meta.yml | 2 +- .../wisecondorx/convert/tests/main.nf.test | 97 ++++ .../convert/tests/main.nf.test.snap | 107 +++++ .../wisecondorx/convert/tests/tags.yml | 2 + modules/nf-core/wisecondorx/predict/main.nf | 8 +- modules/nf-core/wisecondorx/predict/meta.yml | 4 +- .../wisecondorx/predict/tests/main.nf.test | 65 +++ .../predict/tests/main.nf.test.snap | 65 +++ .../wisecondorx/predict/tests/tags.yml | 2 + nextflow.config | 8 +- nextflow_schema.json | 62 +-- subworkflows/local/bam_cnv_calling/main.nf | 10 +- subworkflows/local/bam_sv_calling/main.nf | 20 +- .../local/bam_variant_calling_delly/main.nf | 22 +- .../local/bam_variant_calling_manta/main.nf | 12 +- .../local/bam_variant_calling_qdnaseq/main.nf | 12 +- .../local/bam_variant_calling_smoove/main.nf | 34 +- .../bam_variant_calling_wisecondorx/main.nf | 22 +- .../vcf_annotate_vep_annotsv_vcfanno/main.nf | 39 +- .../local/vcf_merge_callers_jasmine/main.nf | 4 +- .../local/vcf_merge_family_jasmine/main.nf | 4 +- tests/nextflow.config | 4 + tests/pipeline/all_types/all.nf.test | 65 ++- tests/pipeline/all_types/all.nf.test.snap | 442 +++++++++++------- tests/pipeline/cnv/cnv.nf.test | 2 +- tests/pipeline/families/families.nf.test | 8 +- tests/pipeline/sv/sv.nf.test | 2 +- .../local/bam_cnv_calling/main.nf.test | 31 +- .../local/bam_prepare_samtools/main.nf.test | 26 +- .../bam_prepare_samtools/main.nf.test.snap | 28 +- .../main.nf.test.snap | 14 +- .../local/bam_sv_calling/main.nf.test | 63 +-- .../local/bam_sv_calling/main.nf.test.snap | 4 +- .../bam_variant_calling_delly/main.nf.test | 1 + .../main.nf.test.snap | 12 +- .../bam_variant_calling_manta/main.nf.test | 1 + .../bam_variant_calling_qdnaseq/main.nf.test | 1 + .../bam_variant_calling_smoove/main.nf.test | 1 + .../main.nf.test.snap | 4 +- .../main.nf.test | 1 + .../main.nf.test.snap | 12 +- .../main.nf.test | 41 +- .../main.nf.test.snap | 78 +++- .../nextflow.config | 6 +- workflows/structural.nf | 265 ++++++----- 158 files changed, 5032 insertions(+), 770 deletions(-) create mode 100644 assets/test.npz create mode 100644 modules/nf-core/annotsv/annotsv/environment.yml create mode 100644 modules/nf-core/annotsv/annotsv/tests/main.nf.test create mode 100644 modules/nf-core/annotsv/annotsv/tests/main.nf.test.snap create mode 100644 modules/nf-core/annotsv/annotsv/tests/nextflow.config create mode 100644 modules/nf-core/annotsv/annotsv/tests/tags.yml create mode 100644 modules/nf-core/annotsv/installannotations/tests/main.nf.test create mode 100644 modules/nf-core/annotsv/installannotations/tests/main.nf.test.snap create mode 100644 modules/nf-core/annotsv/installannotations/tests/tags.yml create mode 100644 modules/nf-core/bcftools/annotate/tests/bcf.config create mode 100644 modules/nf-core/bcftools/annotate/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/annotate/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/annotate/tests/tags.yml create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf.config create mode 100644 modules/nf-core/bcftools/concat/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/concat/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/concat/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/concat/tests/tags.yml create mode 100644 modules/nf-core/bcftools/filter/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/filter/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/filter/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/filter/tests/tags.yml create mode 100644 modules/nf-core/bcftools/sort/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/sort/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/sort/tests/tags.yml create mode 100644 modules/nf-core/delly/call/tests/main.nf.test create mode 100644 modules/nf-core/delly/call/tests/main.nf.test.snap create mode 100644 modules/nf-core/delly/call/tests/tags.yml create mode 100644 modules/nf-core/delly/call/tests/vcf.config create mode 100644 modules/nf-core/ensemblvep/download/tests/main.nf.test create mode 100644 modules/nf-core/ensemblvep/download/tests/main.nf.test.snap create mode 100644 modules/nf-core/ensemblvep/download/tests/nextflow.config create mode 100644 modules/nf-core/ensemblvep/download/tests/tags.yml create mode 100644 modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap create mode 100644 modules/nf-core/gawk/tests/main.nf.test create mode 100644 modules/nf-core/gawk/tests/main.nf.test.snap create mode 100644 modules/nf-core/gawk/tests/nextflow.config create mode 100644 modules/nf-core/gawk/tests/nextflow_with_program_file.config create mode 100644 modules/nf-core/gawk/tests/tags.yml create mode 100644 modules/nf-core/gridss/gridss/environment.yml create mode 100644 modules/nf-core/jasminesv/tests/iris.config create mode 100644 modules/nf-core/jasminesv/tests/main.nf.test create mode 100644 modules/nf-core/jasminesv/tests/main.nf.test.snap create mode 100644 modules/nf-core/jasminesv/tests/normalize.config create mode 100644 modules/nf-core/jasminesv/tests/tags.yml create mode 100644 modules/nf-core/manta/convertinversion/tests/main.nf.test create mode 100644 modules/nf-core/manta/convertinversion/tests/main.nf.test.snap create mode 100644 modules/nf-core/manta/convertinversion/tests/tags.yml create mode 100644 modules/nf-core/manta/germline/tests/main.nf.test create mode 100644 modules/nf-core/manta/germline/tests/main.nf.test.snap create mode 100644 modules/nf-core/manta/germline/tests/nextflow.config create mode 100644 modules/nf-core/manta/germline/tests/tags.yml create mode 100644 modules/nf-core/ngsbits/samplegender/tests/main.nf.test create mode 100644 modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap create mode 100644 modules/nf-core/ngsbits/samplegender/tests/tags.yml create mode 100644 modules/nf-core/samtools/faidx/tests/main.nf.test create mode 100644 modules/nf-core/samtools/faidx/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/faidx/tests/nextflow.config create mode 100644 modules/nf-core/samtools/faidx/tests/nextflow2.config create mode 100644 modules/nf-core/samtools/faidx/tests/tags.yml create mode 100644 modules/nf-core/wisecondorx/convert/tests/main.nf.test create mode 100644 modules/nf-core/wisecondorx/convert/tests/main.nf.test.snap create mode 100644 modules/nf-core/wisecondorx/convert/tests/tags.yml create mode 100644 modules/nf-core/wisecondorx/predict/tests/main.nf.test create mode 100644 modules/nf-core/wisecondorx/predict/tests/main.nf.test.snap create mode 100644 modules/nf-core/wisecondorx/predict/tests/tags.yml diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index ac17c97c..a7eded4d 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -18,8 +18,11 @@ jobs: with: python-version: 3.x - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV - - name: Obtain version from MANIFEST.MF - run: echo "pipeline_version=$(grep "version" nextflow.config | tail -1 | sed -e s'/[^=]*= //' | cut -d "'" -f 2)" >> $GITHUB_ENV + - name: Obtain version from nextflow config + run: | + version=$(grep "version" nextflow.config | tail -1 | sed -e s'/[^=]*= //' | cut -d "'" -f 2) + [[ $version == *"dev"* ]] && pipeline_version="dev" || pipeline_version=$version + echo "pipeline_version=$pipeline_version" >> $GITHUB_ENV - name: Setup git user run: | git config --global user.name "${{github.actor}}" @@ -33,6 +36,7 @@ jobs: - name: Install dependencies run: pip install mkdocs-material pymdown-extensions pillow cairosvg mike - name: Build docs - run: mike deploy --push --update-aliases ${{ env.pipeline_version }} latest + run: | + [[ ${{ env.pipeline_version }} == "dev" ]] && mike deploy --push ${{ env.pipeline_version }} || mike deploy --push --update-aliases ${{ env.pipeline_version }} latest - name: Set default docs run: mike set-default --push latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d604104..e40e5264 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,34 @@ # nf-cmgg/structural: Changelog +# nf-cmgg/structural: Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## v0.2.0 - [19 July 2024] - Mighty Manneken Pis + +### `Added` + +1. Added keyword shortcuts to the `--callers` parameter (these can also be used as comma-separated entries to the parameter): + - `all`: Use all callers available in the pipeline + - `sv`: Use all SV callers available in the pipeline + - `cnv`: Use all CNV callers available in the pipeline + - `rre`: Use all repeat region expansion callers available in the pipeline +2. Added the possibilty to annotate on HPO terms. Add the right HPO terms to the samplesheet in the `hpo` field + +### `Changes` + +1. Updated all WisecondorX modules to version 1.2.6 and added the `--seed` argument to `WisecondorX predict` +2. Removed support for the `phenotypes` VEP plugin. Common VEP plugin support will be added later +3. Made the main workflow pluggable, making it possible to use this pipeline in a meta pipeline +4. Updated all modules to their latest version + +### `Fixed` + +1. The smoove outputs are now correct when using `--output_callers` + ## v0.1.0 - [3 April 2024] - Amazing Atomium +Initial release of nf-cmgg/structural, created with the [nf-core](https://nf-co.re/) template. Initial release of nf-cmgg/structural, created with the [nf-core](https://nf-co.re/) template. ### `Added` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index fa0a9adc..dc167595 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,6 +1,6 @@ report_comment: > - This report has been generated by the nf-core/structural analysis pipeline. For information about how to interpret these results, please see the documentation. + This report has been generated by the nf-core/structural analysis pipeline. For information about how to interpret these results, please see the documentation. report_section_order: "nf-cmgg-structural-methods-description": order: -1000 diff --git a/assets/schema_input.json b/assets/schema_input.json index 358cd2d1..62dec9ff 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -41,6 +41,11 @@ "type": "string", "meta": ["sex"], "enum": ["male", "female"] + }, + "hpo": { + "type": "string", + "meta": ["hpo"], + "description": "HPO terms to be used for annotation with AnnotSV. Should be space or semicolon separated." } }, "required": ["sample", "cram"] diff --git a/assets/test.npz b/assets/test.npz new file mode 100644 index 00000000..e69de29b diff --git a/conf/modules.config b/conf/modules.config index 4180ec0f..f6c31019 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -10,16 +10,24 @@ ---------------------------------------------------------------------------------------- */ -def output_callers = params.output_callers -def callers = params.callers.tokenize(",") -def count_types = 0 - -// When making changes here, make sure to also update the following files: lib/GlobalVariables.groovy +// When making changes here, make sure to also update the following files: workflows/structural.nf def svCallers = ["delly", "manta", "smoove"] //, "gridss" def cnvCallers = ["qdnaseq", "wisecondorx"] def repeatsCallers = ["expansionhunter"] def annotationCallers = svCallers + cnvCallers +def allCallers = svCallers + cnvCallers + repeatsCallers + +def output_callers = params.output_callers +def lower_cased_callers = params.callers.toLowerCase() +def callers = lower_cased_callers.tokenize(",").collect { + if(it == "all") {return allCallers} + if(it == "sv") {return svCallers} + if(it == "cnv") {return cnvCallers} + if(it == "rre") {return repeatsCallers} + return it +}.flatten() +def count_types = 0 def foundSvCallers = callers.intersect(svCallers) def foundCnvCallers = callers.intersect(cnvCallers) @@ -74,7 +82,7 @@ process { // if("delly" in callers){ - withName: "^.*:BAM_VARIANT_CALLING_DELLY:DELLY_CALL\$" { + withName: "^.*BAM_VARIANT_CALLING_DELLY:DELLY_CALL\$" { ext.args = {"--svtype ${params.delly_sv_types} --map-qual ${params.delly_map_qual} --min-clique-size ${params.delly_min_clique_size}"} ext.suffix = "vcf" ext.prefix = { "${meta.id}.delly" } @@ -99,7 +107,7 @@ process { // // if("whamg" in callers){ - // withName: "^.*:BAM_VARIANT_CALLING_WHAMG:WHAMG\$" { + // withName: "^.*BAM_VARIANT_CALLING_WHAMG:WHAMG\$" { // ext.prefix = { "${meta.id}.whamg" } // ext.args = {[ // meta.region ? "-r ${meta.region}" : "" , @@ -121,22 +129,22 @@ process { if("manta" in callers){ - withName: "^.*:BAM_VARIANT_CALLING_MANTA:GAWK\$" { + withName: "^.*BAM_VARIANT_CALLING_MANTA:GAWK\$" { ext.suffix = "bed" ext.prefix = "contigs" ext.args2 = '\'BEGIN {FS="\t"}; \$1 ~ /^chr[1-9XY][1-9]?\$/ {print \$1 FS "0" FS \$2 }\'' } - withName: "^.*:MANTA_.*\$" { + withName: "^.*MANTA_.*\$" { container = "quay.io/cmgg/manta:1.6.0" } - withName: "^.*:BAM_VARIANT_CALLING_MANTA:MANTA_GERMLINE\$" { + withName: "^.*BAM_VARIANT_CALLING_MANTA:MANTA_GERMLINE\$" { label = "process_high" cpus = { check_max( 20 * task.attempt, 'cpus' ) } } - withName: "^.*:BAM_VARIANT_CALLING_MANTA:MANTA_CONVERTINVERSION\$" { + withName: "^.*BAM_VARIANT_CALLING_MANTA:MANTA_CONVERTINVERSION\$" { ext.prefix = { "${meta.id}.manta" } publishDir = [[ enabled: !params.annotate && foundSvCallers.size() == 1 && (count_types == 1 || !params.concat_output), @@ -159,7 +167,7 @@ process { // // if("scramble" in callers){ - // withName: "^.*:.*:BAM_VARIANT_CALLING_SCRAMBLE:SCRAMBLE_CLUSTERANALYSIS\$" { + // withName: "^.*.*:BAM_VARIANT_CALLING_SCRAMBLE:SCRAMBLE_CLUSTERANALYSIS\$" { // ext.args = "--eval-meis" // } // } @@ -169,7 +177,7 @@ process { // if("smoove" in callers){ - withName: "^.*:BAM_VARIANT_CALLING_SMOOVE:BCFTOOLS_SORT\$" { + withName: "^.*BAM_VARIANT_CALLING_SMOOVE:BCFTOOLS_SORT\$" { ext.prefix = { "${meta.id}.smoove" } publishDir = [[ enabled: !params.annotate && foundSvCallers.size() == 1 && (count_types == 1 || !params.concat_output), @@ -186,7 +194,8 @@ process { ]] } - withName: "^.*:BAM_VARIANT_CALLING_SMOOVE:TABIX_TABIX\$" { + withName: "^.*BAM_VARIANT_CALLING_SMOOVE:TABIX_CALLER\$" { + ext.when = output_callers || (!params.annotate && foundSvCallers.size() == 1 && (count_types == 1 || !params.concat_output)) publishDir = [[ enabled: !params.annotate && foundSvCallers.size() == 1 && (count_types == 1 || !params.concat_output), overwrite: true, @@ -208,7 +217,7 @@ process { // if("gridss" in callers){ - withName: "^.*:BAM_VARIANT_CALLING_GRIDSS:GRIDSS_GRIDSS\$" { + withName: "^.*BAM_VARIANT_CALLING_GRIDSS:GRIDSS_GRIDSS\$" { cpus = { check_max( 8 * task.attempt, 'cpus' ) } memory = { check_max( 32.GB * task.attempt, 'memory' ) } ext.prefix = { "${meta.id}.gridss" } @@ -226,7 +235,7 @@ process { ] } - withName: "^.*:BAM_VARIANT_CALLING_GRIDSS:TABIX_TABIX\$" { + withName: "^.*BAM_VARIANT_CALLING_GRIDSS:TABIX_TABIX\$" { publishDir = [ enabled: output_callers, overwrite: true, @@ -236,13 +245,13 @@ process { ] } - withName: "^.*:BAM_VARIANT_CALLING_GRIDSS:VIOLA\$" { + withName: "^.*BAM_VARIANT_CALLING_GRIDSS:VIOLA\$" { time = { check_max( 20.h * task.attempt, 'time') } ext.prefix = { "${meta.id}.viola" } ext.args = { meta.read_length ? "--read_length ${meta.read_length}" : ""} } - withName: "^.*:BAM_VARIANT_CALLING_GRIDSS:BCFTOOLS_SORT\$" { + withName: "^.*BAM_VARIANT_CALLING_GRIDSS:BCFTOOLS_SORT\$" { ext.prefix = { "${meta.id}.gridss" } publishDir = [ enabled: !params.annotate && foundSvCallers.size() == 1 && (count_types == 1 || !params.concat_output), @@ -253,7 +262,7 @@ process { ] } - withName: "^.*:BAM_VARIANT_CALLING_GRIDSS:TABIX_TABIX\$" { + withName: "^.*BAM_VARIANT_CALLING_GRIDSS:TABIX_TABIX\$" { publishDir = [ enabled: !params.annotate && foundSvCallers.size() == 1 && (count_types == 1 || !params.concat_output), overwrite: true, @@ -274,7 +283,7 @@ process { if(foundCnvCallers){ if("qdnaseq" in callers) { - withName: "^.*:BAM_VARIANT_CALLING_QDNASEQ:QDNASEQ.*\$" { + withName: "^.*BAM_VARIANT_CALLING_QDNASEQ:QDNASEQ.*\$" { cpus = 1 memory = { check_max(50.GB * task.attempt, 'memory') } ext.prefix = { "${meta.id}.qdnaseq" } @@ -293,7 +302,7 @@ process { ]] } - withName: "^.*:BAM_VARIANT_CALLING_QDNASEQ:GAWK\$" { + withName: "^.*BAM_VARIANT_CALLING_QDNASEQ:GAWK\$" { ext.prefix = { "${meta.id}.qdnaseq.abberations" } ext.suffix = "bed" ext.args = "-F '\\t'" @@ -316,7 +325,8 @@ process { } if("wisecondorx" in callers) { - withName: "^.*:BAM_VARIANT_CALLING_WISECONDORX:WISECONDORX_PREDICT\$" { + withName: "^.*BAM_VARIANT_CALLING_WISECONDORX:WISECONDORX_PREDICT\$" { + ext.args = "--seed 0 --bed --plot" memory = { check_max(50.GB * task.attempt, 'memory') } ext.prefix = { "${meta.id}.wisecondorx" } publishDir = [[ @@ -335,7 +345,7 @@ process { } } - withName: "^.*:BAM_CNV_CALLING:[^:]*:BEDGOVCF\$" { + withName: "^.*BAM_CNV_CALLING:[^:]*:BEDGOVCF\$" { ext.prefix = { "${meta.id}.${meta.caller}" } ext.args = { meta.caller == "qdnaseq" ? "--skip 1" : "--header" } publishDir = [[ @@ -353,7 +363,7 @@ process { ]] } - withName: "^.*:BAM_CNV_CALLING:[^:]*:TABIX_TABIX\$" { + withName: "^.*BAM_CNV_CALLING:[^:]*:TABIX_TABIX\$" { publishDir = [[ enabled: !params.annotate && foundCnvCallers.size() == 1 && (count_types == 1 || !params.concat_output), overwrite: true, @@ -378,7 +388,7 @@ process { */ if(foundCnvCallers.size() > 1 || foundSvCallers.size() > 1) { - withName: "^.*:VCF_MERGE_CALLERS_JASMINE:JASMINESV\$" { + withName: "^.*VCF_MERGE_CALLERS_JASMINE:JASMINESV\$" { ext.args = {[ meta.variant_type == "sv" ? "min_support=${params.sv_callers_support}" : "", meta.variant_type == "cnv" ? "min_support=${params.cnv_callers_support}" : "", @@ -386,15 +396,15 @@ process { ].join(' ').trim()} } - withName: "^.*:VCF_MERGE_CALLERS_JASMINE:FIX_CALLERS\$" { + withName: "^.*VCF_MERGE_CALLERS_JASMINE:FIX_CALLERS\$" { ext.prefix = { "${meta.id}.callers-corrected" } } - withName: "^.*:VCF_MERGE_CALLERS_JASMINE:BCFTOOLS_CONSENSUS_REHEADER\$" { + withName: "^.*VCF_MERGE_CALLERS_JASMINE:BCFTOOLS_CONSENSUS_REHEADER\$" { ext.prefix = { "${meta.id}.reheadered" } } - withName: "^.*:VCF_MERGE_CALLERS_JASMINE:BCFTOOLS_SORT\$" { + withName: "^.*VCF_MERGE_CALLERS_JASMINE:BCFTOOLS_SORT\$" { ext.prefix = { "${meta.id}.${meta.variant_type}" } publishDir = [ enabled: !params.annotate && (count_types == 1 || !params.concat_output), @@ -405,7 +415,7 @@ process { ] } - withName: "^.*:VCF_MERGE_CALLERS_JASMINE:TABIX_TABIX\$" { + withName: "^.*VCF_MERGE_CALLERS_JASMINE:TABIX_TABIX\$" { publishDir = [ enabled: !params.annotate && (count_types == 1 || !params.concat_output), overwrite: true, @@ -432,22 +442,26 @@ process { if(params.annotate){ - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:BCFTOOLS_FILTER\$" { + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:BCFTOOLS_FILTER\$" { ext.prefix = {"${meta.id}.filter"} ext.args = "-e 'GT=\"ref\"' --output-type z" } - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:ANNOTSV_ANNOTSV\$" { - ext.args = "-SVminSize 20" + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:ANNOTSV_ANNOTSV\$" { + ext.args = {[ + "-SVminSize 20", + "-vcf 1", + meta.hpo ? "-hpo ${meta.hpo}" : "" + ].join(" ")} ext.prefix = {"${meta.id}.annot"} } - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:BCFTOOLS_CONCAT\$" { - ext.prefix = params.annotsv_file_name + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:BCFTOOLS_CONCAT\$" { + ext.prefix = "annotsv_annotated" ext.args = "--output-type z --naive-force" } - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:ENSEMBLVEP_VEP\$" { + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:ENSEMBLVEP_VEP\$" { ext.prefix = {"${meta.id}.vep"} ext.args = {[ // specify we use VCF files @@ -467,18 +481,16 @@ process { // create stats file "--stats_file ${prefix}.summary.html", // proteins - '--domains --biotype --canonical --mane --ccds --protein --polyphen s --sift s', - // plugins - (params.vep_phenotypes) ? "--plugin Phenotypes,file=${params.phenotypes.split('/')[-1]}": "" + '--domains --biotype --canonical --mane --ccds --protein --polyphen s --sift s' ].join(' ').trim()} } - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:VCFANNO\$" { + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:VCFANNO\$" { ext.args = "-permissive-overlap -ends" } if(!params.annotations_filter) { - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:TABIX_ANNOTATED\$" { + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:TABIX_ANNOTATED\$" { ext.prefix = { "${meta.id}.${meta.variant_type}.annotated" } publishDir = [ enabled: (count_types == 1 || !params.concat_output), @@ -491,7 +503,7 @@ process { } if(params.annotations_filter) { - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:BCFTOOLS_FILTER_COMMON\$" { + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:BCFTOOLS_FILTER_COMMON\$" { ext.prefix = {"${meta.id}.${meta.variant_type}.annotated"} ext.args = "${params.annotations_filter} --output-type z" publishDir = [ @@ -504,7 +516,7 @@ process { } - withName: "^.*:VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:TABIX_FILTER\$" { + withName: "^.*VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO:TABIX_FILTER\$" { publishDir = [ enabled: (count_types == 1 || !params.concat_output), overwrite: true, @@ -525,11 +537,11 @@ process { if(foundRepeatsCallers){ - withName: "^.*:BAM_REPEAT_ESTIMATION_EXPANSIONHUNTER:EXPANSIONHUNTER\$" { + withName: "^.*BAM_REPEAT_ESTIMATION_EXPANSIONHUNTER:EXPANSIONHUNTER\$" { ext.args = {"--sex ${meta.sex}"} } - withName: "^.*:BAM_REPEAT_ESTIMATION_EXPANSIONHUNTER:BCFTOOLS_ANNOTATE\$" { + withName: "^.*BAM_REPEAT_ESTIMATION_EXPANSIONHUNTER:BCFTOOLS_ANNOTATE\$" { ext.args = "-c INFO/REPREF:=INFO/REF --output-type z" ext.prefix = { "${meta.id}.expansionhunter" } ext.tabix = true @@ -548,7 +560,7 @@ process { ]] } - withName: "^.*:BAM_REPEAT_ESTIMATION_EXPANSIONHUNTER:TABIX_TABIX\$" { + withName: "^.*BAM_REPEAT_ESTIMATION_EXPANSIONHUNTER:TABIX_TABIX\$" { publishDir = [[ enabled: (count_types == 1 || !params.concat_output), overwrite: true, @@ -573,7 +585,7 @@ process { if(count_types > 1 && params.concat_output){ - withName: "^.*:VCF_CONCAT_BCFTOOLS:BCFTOOLS_CONCAT\$" { + withName: "^.*VCF_CONCAT_BCFTOOLS:BCFTOOLS_CONCAT\$" { ext.args = "--output-type z --allow-overlaps" publishDir = [ enabled: true, @@ -584,7 +596,7 @@ process { ] } - withName: "^.*:VCF_CONCAT_BCFTOOLS:TABIX_TABIX\$" { + withName: "^.*VCF_CONCAT_BCFTOOLS:TABIX_TABIX\$" { publishDir = [ enabled: true, overwrite: true, @@ -601,30 +613,29 @@ process { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - withName: "^.*:VCF_MERGE_FAMILY_JASMINE:JASMINESV\$" { + withName: "^.*VCF_MERGE_FAMILY_JASMINE:JASMINESV\$" { ext.args = "--output_genotypes" } - withName: "^.*:VCF_MERGE_FAMILY_JASMINE:FIX_CALLERS\$" { + withName: "^.*VCF_MERGE_FAMILY_JASMINE:FIX_CALLERS\$" { ext.prefix = { "${meta.id}.callers-corrected" } } - withName: "^.*:VCF_MERGE_FAMILY_JASMINE:BCFTOOLS_CONSENSUS_REHEADER\$" { + withName: "^.*VCF_MERGE_FAMILY_JASMINE:BCFTOOLS_CONSENSUS_REHEADER\$" { ext.prefix = { "${meta.id}.reheadered" } } - withName: "^.*:VCF_MERGE_FAMILY_JASMINE:BCFTOOLS_SORT\$" { + withName: "^.*VCF_MERGE_FAMILY_JASMINE:BCFTOOLS_SORT\$" { ext.args = "--output-type z" publishDir = [ enabled: true, overwrite: true, path: { "${params.outdir}/${meta.family}" }, - mode: params.publish_dir_mode, saveAs: { filename -> filename != "versions.yml" ? filename : null } ] } - withName: "^.*:VCF_MERGE_FAMILY_JASMINE:TABIX_TABIX\$" { + withName: "^.*VCF_MERGE_FAMILY_JASMINE:TABIX_TABIX\$" { publishDir = [ enabled: true, overwrite: true, diff --git a/conf/test.config b/conf/test.config index 715a83b6..9c5666fd 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,7 +27,7 @@ params { // Fasta references fasta = "https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/genome/seq/SVcontrol/reference.fasta" fai = "https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/genome/seq/SVcontrol/reference.fasta.fai" - bwa = "https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/genome/seq/SVcontrol/bwa.tar.gz" + // bwa = "https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/genome/seq/SVcontrol/bwa.tar.gz" expansionhunter_catalog = params.test_data["homo_sapiens"]["genome"]["expansionhunter"] qdnaseq_male = params.test_data["homo_sapiens"]["genome"]["genome_qdnaseq"] qdnaseq_female = params.test_data["homo_sapiens"]["genome"]["genome_qdnaseq"] diff --git a/docs/parameters.md b/docs/parameters.md index d3a14c85..5661031a 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -82,15 +82,15 @@ Less common options for the pipeline, typically set in a config file. Options specific to the execution of this pipeline -| Parameter | Description | Type | Default | Required | Hidden | -| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `callers` | A comma-seperated list of callers to use. Can be one or more these: smoove | delly | manta | gridss | expansionhunter. At the moment Gridss runs very slowly compared to all other tools so it's only advised to use it when it's needed. | `string` | manta,smoove,delly,expansionhunter,wisecondorx | | | -| `output_callers` | Output the VCF files from different callers. Warning: This produces a lot of additional output and should only be used for testing purposes | `boolean` | | | | -| `sv_callers_support` | The minimum amount of SV callers that should detect a variant. All variants that have a lower amount of callers supporting it, will be removed. (Only used when more than one caller is given) | `integer` | 1 | | | -| `cnv_callers_support` | The minimum amount of CNV callers that should detect a variant. All variants that have a lower amount of callers supporting it, will be removed. (Only used when more than one caller is given) | `integer` | 1 | | | -| `annotate` | Run the annotation with Ensembl VEP and AnnotSV (and optionally VCFanno). | `boolean` | | | | -| `concat_output` | Also output a concatenated VCF with all variant types analysed included. | `boolean` | | | | -| `annotations_filter` | The filter arguments to use after annotating.
HelpA common use case for this is to filter out common variants. You can supply a VCF file with common variants to VCFanno and filter out the matching variants using this parameter
| `string` | | | | +| Parameter | Description | Type | Default | Required | Hidden | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------- | -------- | ------ | +| `callers` | A comma-seperated list of callers to use. Can be one or more these: smoove/delly/manta/expansionhunter/qdnaseq/wisecondorx.
HelpFollowing keywords can also be used as shortcuts to certain callers:
- all: Use all callers
- sv: Use all SV callers
- cnv: Use all CNV callers
- rre: Use all RRE callers
| `string` | manta,smoove,delly,expansionhunter,wisecondorx | | | +| `output_callers` | Output the VCF files from different callers. Warning: This produces a lot of additional output and should only be used for testing purposes | `boolean` | | | | +| `sv_callers_support` | The minimum amount of SV callers that should detect a variant. All variants that have a lower amount of callers supporting it, will be removed. (Only used when more than one caller is given) | `integer` | 1 | | | +| `cnv_callers_support` | The minimum amount of CNV callers that should detect a variant. All variants that have a lower amount of callers supporting it, will be removed. (Only used when more than one caller is given) | `integer` | 1 | | | +| `annotate` | Run the annotation with Ensembl VEP and AnnotSV (and optionally VCFanno). | `boolean` | | | | +| `concat_output` | Also output a concatenated VCF with all variant types analysed included. | `boolean` | | | | +| `annotations_filter` | The filter arguments to use after annotating.
HelpA common use case for this is to filter out common variants. You can supply a VCF file with common variants to VCFanno and filter out the matching variants using this parameter
| `string` | | | | ## Delly parameters diff --git a/main.nf b/main.nf index 89d97d73..8b24bb3b 100644 --- a/main.nf +++ b/main.nf @@ -21,15 +21,25 @@ include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_stru params.fasta = getGenomeAttribute('fasta') params.fai = getGenomeAttribute('fai') params.vep_cache = getGenomeAttribute('vep_cache') -params.bwa = getGenomeAttribute('bwa') -params.phenotypes = getGenomeAttribute('phenotypes') -params.phenotypes_tbi = getGenomeAttribute('phenotypes_tbi') +// params.bwa = getGenomeAttribute('bwa') params.annotsv_annotations = getGenomeAttribute('annotsv_annotations') params.expansionhunter_catalog = getGenomeAttribute('expansionhunter_catalog') params.qdnaseq_male = getGenomeAttribute("qdnaseq_male_${params.qdnaseq_bin_size.toInteger() / 1000}kbp".toString()) params.qdnaseq_female = getGenomeAttribute("qdnaseq_female_${params.qdnaseq_bin_size.toInteger() / 1000}kbp".toString()) params.wisecondorx_reference = getGenomeAttribute('wisecondorx_reference') +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CONFIG FILES +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() +ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() +ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS @@ -40,8 +50,6 @@ include { STRUCTURAL } from './workflows/structural' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_structural_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_structural_pipeline' - - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NAMED WORKFLOWS FOR PIPELINE @@ -62,7 +70,47 @@ workflow NFCMGG_STRUCTURAL { // WORKFLOW: Run pipeline // STRUCTURAL ( - samplesheet + // channels + samplesheet, + ch_multiqc_config, + ch_multiqc_custom_config, + ch_multiqc_logo, + ch_multiqc_custom_methods_description, + + // file inputs + params.fasta, + params.fai, + params.expansionhunter_catalog ?: "https://github.com/Illumina/ExpansionHunter/raw/master/variant_catalog/grch38/variant_catalog.json", + params.qdnaseq_female, + params.qdnaseq_male, + params.wisecondorx_reference, + params.vep_cache, + params.annotsv_annotations, + params.annotsv_candidate_genes, + params.annotsv_gene_transcripts, + params.vcfanno_lua, + params.vcfanno_resources, + params.vcfanno_toml, + params.blacklist, + params.manta_config ?: "${projectDir}/assets/manta_config.ini", + "${projectDir}/assets/svync", + "${projectDir}/assets/bedgovcf", + "${projectDir}/assets/vcfanno", + + // boolean inputs + params.annotate, + params.concat_output, + + // value inputs + params.callers, + params.sv_callers_support, + params.cnv_callers_support, + params.genome, + params.species, + params.vep_assembly, + params.vep_cache_version, + params.annotations_filter, + params.outdir ) emit: diff --git a/modules.json b/modules.json index 3cf03ef4..d15be54c 100644 --- a/modules.json +++ b/modules.json @@ -7,41 +7,39 @@ "nf-core": { "annotsv/annotsv": { "branch": "master", - "git_sha": "a8741f8d429a47dfe07f64e776187318519a8f2b", - "installed_by": ["modules"], - "patch": "modules/nf-core/annotsv/annotsv/annotsv-annotsv.diff" + "git_sha": "a94ad45fa5b350961c374c46f79bc86cd5853353", + "installed_by": ["modules"] }, "annotsv/installannotations": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "a94ad45fa5b350961c374c46f79bc86cd5853353", "installed_by": ["modules"] }, "bcftools/annotate": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "2ad29c2aed06d815d9f68ad7ba20b3b1c574ce9c", "installed_by": ["modules"], "patch": "modules/nf-core/bcftools/annotate/bcftools-annotate.diff" }, "bcftools/concat": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"], - "patch": "modules/nf-core/bcftools/concat/bcftools-concat.diff" + "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", + "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "a3893076a76e91b3ff152faddf872f00778fb224", "installed_by": ["modules"], "patch": "modules/nf-core/bcftools/filter/bcftools-filter.diff" }, "bcftools/sort": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", "installed_by": ["modules"] }, "bedgovcf": { "branch": "master", - "git_sha": "338a5572efbda56110cea2f657615920d8dce58c", + "git_sha": "71a96063a7e09be7ea48f069d134a56ce86c9ba6", "installed_by": ["modules"] }, "bwa/index": { @@ -51,50 +49,50 @@ }, "delly/call": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "92bf2a8afa318a64f9d333cf87b510c662fd4274", "installed_by": ["modules"], "patch": "modules/nf-core/delly/call/delly-call.diff" }, "ensemblvep/download": { "branch": "master", - "git_sha": "214d575774c172062924ad3564b4f66655600730", + "git_sha": "3db4f8488315cd7d7cf3fcb64251f6603210e831", "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", - "git_sha": "76a0696a60c41c57fc5f6040ac31b11ce5d4d8dd", + "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", - "git_sha": "3c4b0007393248aa7419a9ec3d14f391cd702f48", + "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", "installed_by": ["modules"] }, "gawk": { "branch": "master", - "git_sha": "dc3527855e7358c6d8400828754c0caa5f11698f", + "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", "installed_by": ["modules"] }, "gridss/gridss": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"], "patch": "modules/nf-core/gridss/gridss/gridss-gridss.diff" }, "jasminesv": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "92bf2a8afa318a64f9d333cf87b510c662fd4274", "installed_by": ["modules"], "patch": "modules/nf-core/jasminesv/jasminesv.diff" }, "manta/convertinversion": { "branch": "master", - "git_sha": "1e2b7fb7106852388610c0360d234b0829eb980e", + "git_sha": "92bf2a8afa318a64f9d333cf87b510c662fd4274", "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "ebc1733b77c702f19fe42076a5edfcbaa0d84f66", "installed_by": ["modules"] }, "multiqc": { @@ -104,18 +102,18 @@ }, "ngsbits/samplegender": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "023e119cfa102f319b6dcfd06abecf7f3c2b8df1", "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", - "git_sha": "1b93e06140e6807cc408519759f68bd26da63a00", + "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", "installed_by": ["modules"], "patch": "modules/nf-core/samtools/convert/samtools-convert.diff" }, "samtools/faidx": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "f153f1f10e1083c49935565844cccb7453021682", "installed_by": ["modules"] }, "samtools/index": { @@ -160,12 +158,12 @@ }, "wisecondorx/convert": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "dc7e9607d9977555ca1235a51a40d097bc66954c", "installed_by": ["modules"] }, "wisecondorx/predict": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "dc7e9607d9977555ca1235a51a40d097bc66954c", "installed_by": ["modules"] } } diff --git a/modules/nf-core/annotsv/annotsv/environment.yml b/modules/nf-core/annotsv/annotsv/environment.yml new file mode 100644 index 00000000..e5f4a3e4 --- /dev/null +++ b/modules/nf-core/annotsv/annotsv/environment.yml @@ -0,0 +1,7 @@ +name: annotsv_annotsv +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::annotsv=3.4.2 diff --git a/modules/nf-core/annotsv/annotsv/main.nf b/modules/nf-core/annotsv/annotsv/main.nf index d93eb307..e9d47db7 100644 --- a/modules/nf-core/annotsv/annotsv/main.nf +++ b/modules/nf-core/annotsv/annotsv/main.nf @@ -2,10 +2,10 @@ process ANNOTSV_ANNOTSV { tag "$meta.id" label 'process_low' - conda "bioconda::annotsv=3.3.6" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/annotsv:3.3.6--py311hdfd78af_0' : - 'biocontainers/annotsv:3.3.6--py311hdfd78af_0' }" + 'oras://community.wave.seqera.io/library/annotsv:3.4.2--141a0ee560de1897' : + 'community.wave.seqera.io/library/annotsv:3.4.2--010fa21247b5b64b' }" input: tuple val(meta), path(sv_vcf), path(sv_vcf_index), path(candidate_small_variants) @@ -17,7 +17,7 @@ process ANNOTSV_ANNOTSV { output: tuple val(meta), path("*.tsv") , emit: tsv tuple val(meta), path("*.unannotated.tsv") , emit: unannotated_tsv, optional: true - tuple val(meta), path("*.vcf") , emit: vcf + tuple val(meta), path("*.vcf") , emit: vcf, optional: true path "versions.yml" , emit: versions when: @@ -39,15 +39,11 @@ process ANNOTSV_ANNOTSV { ${small_variants} \\ ${fp_snv} \\ ${transcripts} \\ - -outputFile ${prefix}.raw.tsv \\ + -outputFile ${prefix}.tsv \\ -SVinputFile ${sv_vcf} \\ ${args} mv *_AnnotSV/* . - awk 'BEGIN { FS=OFS="\t" } { if (NR > 1 && NF >= 8) \$1 = \$1 "_" NR; print }' ${prefix}.raw.tsv > ${prefix}.tsv - - variantconvert convert -i ${prefix}.tsv -o ${prefix}.vcf -fi annotsv -fo vcf -c /usr/local/share/python3/variantconvert/configs/GRCh38/annotsv3_from_vcf.json - sed -i 's/contig= versions.yml "${task.process}": @@ -59,10 +55,14 @@ process ANNOTSV_ANNOTSV { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def create_vcf = args.contains("-vcf 1") ? "touch ${prefix}.vcf" : "" + """ + echo "$args" + touch ${prefix}.tsv touch ${prefix}.unannotated.tsv - touch ${prefix}.vcf + ${create_vcf} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/annotsv/annotsv/meta.yml b/modules/nf-core/annotsv/annotsv/meta.yml index 35aa1346..f690f0aa 100644 --- a/modules/nf-core/annotsv/annotsv/meta.yml +++ b/modules/nf-core/annotsv/annotsv/meta.yml @@ -12,8 +12,8 @@ tools: homepage: "https://lbgi.fr/AnnotSV/" documentation: "https://lbgi.fr/AnnotSV/" tool_dev_url: "https://github.com/lgmgeo/AnnotSV" - licence: "GPL-3.0" - + doi: 10.1093/bioinformatics/bty304 + licence: ["GPL-3.0"] input: - meta: type: map @@ -65,7 +65,6 @@ input: type: file description: OPTIONAL - A file containing the preferred gene transcripts to be used in priority during annotation (either space-separated or tab-separated) pattern: "*.txt" - output: - meta: type: map @@ -89,6 +88,7 @@ output: description: | OPTIONAL - A VCF file containing the annotated variants (created when `-vcf 1` is specified in the args) pattern: "*.vcf" - authors: - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/modules/nf-core/annotsv/annotsv/tests/main.nf.test b/modules/nf-core/annotsv/annotsv/tests/main.nf.test new file mode 100644 index 00000000..c6fcefb6 --- /dev/null +++ b/modules/nf-core/annotsv/annotsv/tests/main.nf.test @@ -0,0 +1,52 @@ +nextflow_process { + + name "Test Process ANNOTSV_ANNOTSV" + script "../main.nf" + process "ANNOTSV_ANNOTSV" + + tag "modules" + tag "modules_nfcore" + tag "annotsv" + tag "annotsv/annotsv" + + test("homo_sapiens - sv_vcf, sv_tbi, snv_vcf, annotations - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/vcf/sv_query.vcf.gz"), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/vcf/sv_query.vcf.gz.tbi"), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.vcf.gz") + ] + input[1] = [ + [ id:'annotations' ], + [] + ] + input[2] = Channel.of('GENE1', 'GENE2', 'GENE3') + .collectFile(name:'gene_candidates.txt') + .map { [[ id:'genes' ], it] } + input[3] = [ + [ id:'false_positives' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz") + ] + input[4] = Channel.of('GENE1 GENE2 GENE3') + .collectFile(name:'gene_transcripts.txt') + .map { [[ id:'gene_transcripts'], it] } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/annotsv/annotsv/tests/main.nf.test.snap b/modules/nf-core/annotsv/annotsv/tests/main.nf.test.snap new file mode 100644 index 00000000..fd46d7e7 --- /dev/null +++ b/modules/nf-core/annotsv/annotsv/tests/main.nf.test.snap @@ -0,0 +1,63 @@ +{ + "homo_sapiens - sv_vcf, sv_tbi, snv_vcf, annotations - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.unannotated.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.unannotated.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,a5c7d9d19db00a62006faa1bafa917ec" + ], + "tsv": [ + [ + { + "id": "test" + }, + [ + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.unannotated.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "unannotated_tsv": [ + [ + { + "id": "test" + }, + "test.unannotated.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + + ], + "versions": [ + "versions.yml:md5,a5c7d9d19db00a62006faa1bafa917ec" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-29T15:10:39.33144868" + } +} \ No newline at end of file diff --git a/modules/nf-core/annotsv/annotsv/tests/nextflow.config b/modules/nf-core/annotsv/annotsv/tests/nextflow.config new file mode 100644 index 00000000..297daf51 --- /dev/null +++ b/modules/nf-core/annotsv/annotsv/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: ANNOTSV_ANNOTSV { + ext.args = "-vcf 1" + } +} diff --git a/modules/nf-core/annotsv/annotsv/tests/tags.yml b/modules/nf-core/annotsv/annotsv/tests/tags.yml new file mode 100644 index 00000000..54453426 --- /dev/null +++ b/modules/nf-core/annotsv/annotsv/tests/tags.yml @@ -0,0 +1,2 @@ +annotsv/annotsv: + - "modules/nf-core/annotsv/annotsv/**" diff --git a/modules/nf-core/annotsv/installannotations/environment.yml b/modules/nf-core/annotsv/installannotations/environment.yml index 69d2f7a7..b759f91d 100644 --- a/modules/nf-core/annotsv/installannotations/environment.yml +++ b/modules/nf-core/annotsv/installannotations/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::annotsv=3.3.6 + - bioconda::annotsv=3.4.2 diff --git a/modules/nf-core/annotsv/installannotations/main.nf b/modules/nf-core/annotsv/installannotations/main.nf index a9685e39..371e1bbf 100644 --- a/modules/nf-core/annotsv/installannotations/main.nf +++ b/modules/nf-core/annotsv/installannotations/main.nf @@ -4,8 +4,8 @@ process ANNOTSV_INSTALLANNOTATIONS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/annotsv:3.3.6--py311hdfd78af_0' : - 'biocontainers/annotsv:3.3.6--py311hdfd78af_0' }" + 'oras://community.wave.seqera.io/library/annotsv:3.4.2--141a0ee560de1897' : + 'community.wave.seqera.io/library/annotsv:3.4.2--010fa21247b5b64b' }" output: path "AnnotSV_annotations", emit: annotations @@ -27,6 +27,7 @@ process ANNOTSV_INSTALLANNOTATIONS { stub: """ mkdir AnnotSV_annotations + touch AnnotSV_annotations/stub_file.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/annotsv/installannotations/meta.yml b/modules/nf-core/annotsv/installannotations/meta.yml index 18a4708b..a04c4f1d 100644 --- a/modules/nf-core/annotsv/installannotations/meta.yml +++ b/modules/nf-core/annotsv/installannotations/meta.yml @@ -11,7 +11,7 @@ tools: homepage: "https://lbgi.fr/AnnotSV/" documentation: "https://lbgi.fr/AnnotSV/" tool_dev_url: "https://github.com/lgmgeo/AnnotSV" - licence: "['GPL v3']" + licence: ["GPL v3"] output: - versions: type: file diff --git a/modules/nf-core/annotsv/installannotations/tests/main.nf.test b/modules/nf-core/annotsv/installannotations/tests/main.nf.test new file mode 100644 index 00000000..ed322ece --- /dev/null +++ b/modules/nf-core/annotsv/installannotations/tests/main.nf.test @@ -0,0 +1,25 @@ +nextflow_process { + + name "Test Process ANNOTSV_INSTALLANNOTATIONS" + script "../main.nf" + process "ANNOTSV_INSTALLANNOTATIONS" + + tag "modules" + tag "modules_nfcore" + tag "annotsv" + tag "annotsv/installannotations" + + test("homo_sapiens - stub") { + + options "-stub" + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/annotsv/installannotations/tests/main.nf.test.snap b/modules/nf-core/annotsv/installannotations/tests/main.nf.test.snap new file mode 100644 index 00000000..bb45f1bd --- /dev/null +++ b/modules/nf-core/annotsv/installannotations/tests/main.nf.test.snap @@ -0,0 +1,29 @@ +{ + "homo_sapiens - stub": { + "content": [ + { + "0": [ + [ + "stub_file.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,d0b3dc5e0199653fd81ffd3754e65f9c" + ], + "annotations": [ + [ + "stub_file.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d0b3dc5e0199653fd81ffd3754e65f9c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-29T15:14:54.723053976" + } +} \ No newline at end of file diff --git a/modules/nf-core/annotsv/installannotations/tests/tags.yml b/modules/nf-core/annotsv/installannotations/tests/tags.yml new file mode 100644 index 00000000..232bec39 --- /dev/null +++ b/modules/nf-core/annotsv/installannotations/tests/tags.yml @@ -0,0 +1,2 @@ +annotsv/installannotations: + - "modules/nf-core/annotsv/installannotations/**" diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf index cb7dad5a..463bb86e 100644 --- a/modules/nf-core/bcftools/annotate/main.nf +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -59,8 +59,10 @@ process BCFTOOLS_ANNOTATE { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" """ - touch ${prefix}.${extension} + ${create_cmd} ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/annotate/tests/bcf.config b/modules/nf-core/bcftools/annotate/tests/bcf.config new file mode 100644 index 00000000..b8496b33 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/bcf.config @@ -0,0 +1,6 @@ +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 diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test b/modules/nf-core/bcftools/annotate/tests/main.nf.test new file mode 100644 index 00000000..9abf9475 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test @@ -0,0 +1,108 @@ +nextflow_process { + + name "Test Process BCFTOOLS_ANNOTATE" + script "../main.nf" + process "BCFTOOLS_ANNOTATE" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/annotate" + + test("sarscov2 - [vcf, tbi, vcf2, tbi2, []] - 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), + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match("vcf") } + ) + } + + } + + + test("sarscov2 - [vcf, [], [], [], header] - bcf_output") { + + config "./bcf.config" + + when { + process { + """ + vcf = Channel.of([ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + [], + [], + [] + ]) + + header = Channel.of( + '##INFO=', + '##INFO=' + ) + .collectFile(name:"headers.vcf", newLine:true) + + input[0] = vcf.combine(header) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match("bcf") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, vcf2, tbi2, []] - stub") { + + config "./vcf.config" + options "-stub" + + 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), + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap new file mode 100644 index 00000000..72b06878 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap @@ -0,0 +1,79 @@ +{ + "bcf": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_ann.bcf" + ] + ], + [ + "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T09:21:58.526449656" + }, + "vcf": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-02T16:47:47.127427579" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-02T16:43:43.707474961" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/annotate/tests/tags.yml b/modules/nf-core/bcftools/annotate/tests/tags.yml new file mode 100644 index 00000000..f97a1afc --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/annotate: + - "modules/nf-core/bcftools/annotate/**" diff --git a/modules/nf-core/bcftools/annotate/tests/vcf.config b/modules/nf-core/bcftools/annotate/tests/vcf.config new file mode 100644 index 00000000..cb809f61 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf.config @@ -0,0 +1,6 @@ +process { + withName: 'BCFTOOLS_ANNOTATE' { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type z" + } +} diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index 65ea8204..0de66665 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_CONCAT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcfs), path(tbis) @@ -40,22 +40,22 @@ process BCFTOOLS_CONCAT { | bcftools sort \\ ${args2} \\ --output ${prefix}.vcf.gz \\ - --output-type z + --output-type z cat <<-END_VERSIONS > versions.yml "${task.process}": - bcftools: \$( bcftools --version |& sed '1!d; s/^.*bcftools //' ) + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ stub: - prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": - bcftools: \$( bcftools --version |& sed '1!d; s/^.*bcftools //' ) + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index e8c83cd6..91cb54d5 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -5,7 +5,6 @@ keywords: - concat - bcftools - VCF - tools: - concat: description: | @@ -21,12 +20,12 @@ input: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - vcfs: - type: files + type: list description: | List containing 2 or more vcf files e.g. [ 'file1.vcf', 'file2.vcf' ] - tbi: - type: files + type: list description: | List containing 2 or more index files (optional) e.g. [ 'file1.tbi', 'file2.tbi' ] @@ -47,3 +46,6 @@ output: authors: - "@abhi18av" - "@nvnieuwk" +maintainers: + - "@abhi18av" + - "@nvnieuwk" diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test b/modules/nf-core/bcftools/concat/tests/main.nf.test new file mode 100644 index 00000000..d5d9f787 --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test @@ -0,0 +1,99 @@ +nextflow_process { + + name "Test Process BCFTOOLS_CONCAT" + script "../main.nf" + process "BCFTOOLS_CONCAT" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/concat" + + config "./nextflow.config" + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]") { + + when { + process { + """ + 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.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) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], []]") { + + when { + process { + """ + 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) + ], + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub") { + + options "-stub" + when { + process { + """ + 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.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) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap new file mode 100644 index 00000000..90d3fc06 --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "sarscov2 - [[vcf1, vcf2], []]": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + "1": [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + "versions": [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T13:22:49.766749302" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + "1": [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + "versions": [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T13:22:41.119912312" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T13:22:59.90466392" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/nextflow.config b/modules/nf-core/bcftools/concat/tests/nextflow.config new file mode 100644 index 00000000..f3e1e98c --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = "--no-version" +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/tags.yml b/modules/nf-core/bcftools/concat/tests/tags.yml new file mode 100644 index 00000000..21710d4e --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/concat: + - "modules/nf-core/bcftools/concat/**" diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf index 4bec2146..cc9a2361 100644 --- a/modules/nf-core/bcftools/filter/main.nf +++ b/modules/nf-core/bcftools/filter/main.nf @@ -54,8 +54,10 @@ process BCFTOOLS_FILTER { if ("$vcf" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" + def create_file = extension.endsWith(".gz") ? "echo '' | gzip > ${prefix}.${extension}" : "touch ${prefix}.${extension}" + """ - touch ${prefix}.${extension} + ${create_file} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/filter/meta.yml b/modules/nf-core/bcftools/filter/meta.yml index 5b111fc3..deb93b13 100644 --- a/modules/nf-core/bcftools/filter/meta.yml +++ b/modules/nf-core/bcftools/filter/meta.yml @@ -21,7 +21,7 @@ input: - vcf: type: file description: VCF input file - pattern: "*.{vcf}" + pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}" output: - meta: type: map @@ -31,7 +31,7 @@ output: - vcf: type: file description: VCF filtered output file - pattern: "*.{vcf}" + pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/bcftools/filter/tests/main.nf.test b/modules/nf-core/bcftools/filter/tests/main.nf.test new file mode 100644 index 00000000..eaf100e8 --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/main.nf.test @@ -0,0 +1,82 @@ +nextflow_process { + + name "Test Process BCFTOOLS_FILTER" + script "../main.nf" + process "BCFTOOLS_FILTER" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/filter" + + config "./nextflow.config" + + test("sarscov2 - vcf") { + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("vcf") } + ) + } + + } + + test("sarscov2 - vcf - bcf output") { + + when { + process { + """ + input[0] = [ + [id:"bcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bcf output") } + ) + } + + } + + test("sarscov2 - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("vcf - stub") } + ) + } + + } + +} diff --git a/modules/nf-core/bcftools/filter/tests/main.nf.test.snap b/modules/nf-core/bcftools/filter/tests/main.nf.test.snap new file mode 100644 index 00000000..f8e17aa0 --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "vcf": { + "content": [ + { + "0": [ + [ + { + "id": "vcf_test" + }, + "vcf_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + ], + "vcf": [ + [ + { + "id": "vcf_test" + }, + "vcf_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-27T16:57:32.940161987" + }, + "bcf output": { + "content": [ + { + "0": [ + [ + { + "id": "bcf_test" + }, + "bcf_test.bcf.gz:md5,c8a304c8d2892039201154153c8cd536" + ] + ], + "1": [ + "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + ], + "vcf": [ + [ + { + "id": "bcf_test" + }, + "bcf_test.bcf.gz:md5,c8a304c8d2892039201154153c8cd536" + ] + ], + "versions": [ + "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-27T16:45:14.586866398" + }, + "vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "vcf_test" + }, + "vcf_test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + ], + "vcf": [ + [ + { + "id": "vcf_test" + }, + "vcf_test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-27T17:05:52.80837892" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/filter/tests/nextflow.config b/modules/nf-core/bcftools/filter/tests/nextflow.config new file mode 100644 index 00000000..4e960c8d --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = {"--no-version${meta.id == 'bcf_test' ? ' --output-type b' : ' --output-type z'}"} +} diff --git a/modules/nf-core/bcftools/filter/tests/tags.yml b/modules/nf-core/bcftools/filter/tests/tags.yml new file mode 100644 index 00000000..d5e01080 --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/filter: + - "modules/nf-core/bcftools/filter/**" diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index c982944c..246148d6 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -49,9 +49,9 @@ process BCFTOOLS_SORT { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" - + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" """ - touch ${prefix}.${extension} + ${create_cmd} ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test b/modules/nf-core/bcftools/sort/tests/main.nf.test new file mode 100644 index 00000000..8a496dda --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test @@ -0,0 +1,54 @@ +nextflow_process { + + name "Test Process BCFTOOLS_SORT" + script "../main.nf" + process "BCFTOOLS_SORT" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/sort" + + test("sarscov2 - vcf") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("vcf") } + ) + } + + } + + test("sarscov2 - vcf - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..6200cc42 --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "vcf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-02T16:55:21.237927554" + }, + "sarscov2 - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T12:32:50.506309198" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/tests/tags.yml b/modules/nf-core/bcftools/sort/tests/tags.yml new file mode 100644 index 00000000..6e9520dd --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/sort: + - "modules/nf-core/bcftools/sort/**" diff --git a/modules/nf-core/bedgovcf/environment.yml b/modules/nf-core/bedgovcf/environment.yml index 61cfbccf..f19a947e 100644 --- a/modules/nf-core/bedgovcf/environment.yml +++ b/modules/nf-core/bedgovcf/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::bedgovcf=0.1.0 + - bioconda::bedgovcf=0.1.1 diff --git a/modules/nf-core/bedgovcf/main.nf b/modules/nf-core/bedgovcf/main.nf index f39f404e..e8641591 100644 --- a/modules/nf-core/bedgovcf/main.nf +++ b/modules/nf-core/bedgovcf/main.nf @@ -4,8 +4,8 @@ process BEDGOVCF { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bedgovcf:0.1.0--h9ee0642_0': - 'biocontainers/bedgovcf:0.1.0--h9ee0642_0' }" + 'https://depot.galaxyproject.org/singularity/bedgovcf:0.1.1--h9ee0642_1': + 'biocontainers/bedgovcf:0.1.1--h9ee0642_1' }" input: tuple val(meta), path(bed), path(config) @@ -39,7 +39,7 @@ process BEDGOVCF { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bedgovcf/tests/main.nf.test.snap b/modules/nf-core/bedgovcf/tests/main.nf.test.snap index 2e34fe4c..dddabbc4 100644 --- a/modules/nf-core/bedgovcf/tests/main.nf.test.snap +++ b/modules/nf-core/bedgovcf/tests/main.nf.test.snap @@ -7,7 +7,7 @@ { "id": "test" }, - "test.vcf.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "1": [ @@ -18,7 +18,7 @@ { "id": "test" }, - "test.vcf.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "versions": [ @@ -26,7 +26,11 @@ ] } ], - "timestamp": "2023-11-14T12:45:41.931292108" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-05-02T10:51:08.632383757" }, "homo_sapiens - [bed, config] - fai": { "content": [ @@ -36,7 +40,7 @@ { "id": "test" }, - "test.vcf.gz:md5,a9cb689f02723f7e0e4d674ef144b48c" + "test.vcf.gz:md5,49f3bd11396cb17cba8f97005b22384c" ] ], "1": [ @@ -47,7 +51,7 @@ { "id": "test" }, - "test.vcf.gz:md5,a9cb689f02723f7e0e4d674ef144b48c" + "test.vcf.gz:md5,49f3bd11396cb17cba8f97005b22384c" ] ], "versions": [ @@ -55,6 +59,10 @@ ] } ], - "timestamp": "2023-11-14T12:45:36.218283171" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-05-02T10:50:05.709267287" } } \ No newline at end of file diff --git a/modules/nf-core/delly/call/environment.yml b/modules/nf-core/delly/call/environment.yml index 0460979c..39da8995 100644 --- a/modules/nf-core/delly/call/environment.yml +++ b/modules/nf-core/delly/call/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::delly=1.1.6 + - bioconda::delly=1.2.6 diff --git a/modules/nf-core/delly/call/main.nf b/modules/nf-core/delly/call/main.nf index 7ae800d9..13366047 100644 --- a/modules/nf-core/delly/call/main.nf +++ b/modules/nf-core/delly/call/main.nf @@ -4,13 +4,13 @@ process DELLY_CALL { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/delly:1.1.6--ha41ced6_0' : - 'biocontainers/delly:1.1.6--ha41ced6_0' }" + 'https://depot.galaxyproject.org/singularity/delly:1.2.6--hb7e2ac5_1' : + 'biocontainers/delly:1.2.6--hb7e2ac5_1' }" input: tuple val(meta), path(input), path(input_index), path(vcf), path(vcf_index), path(exclude_bed) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*.{bcf,vcf.gz}") , emit: bcf @@ -55,7 +55,7 @@ process DELLY_CALL { def suffix = task.ext.suffix ?: "bcf" def bcf_output = suffix == "bcf" ? "touch ${prefix}.bcf && touch ${prefix}.bcf.csi" : "" - def vcf_output = suffix == "vcf" ? "touch ${prefix}.vcf.gz && touch ${prefix}.vcf.gz.tbi" : "" + def vcf_output = suffix == "vcf" ? "echo '' | gzip > ${prefix}.vcf.gz && touch ${prefix}.vcf.gz.tbi" : "" """ ${bcf_output} diff --git a/modules/nf-core/delly/call/meta.yml b/modules/nf-core/delly/call/meta.yml index a9f4c9f4..cc378ffd 100644 --- a/modules/nf-core/delly/call/meta.yml +++ b/modules/nf-core/delly/call/meta.yml @@ -38,10 +38,20 @@ input: type: file description: An optional bed file containing regions to exclude from the called VCF pattern: "*.bed" + - meta2: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test', single_end:false ] - fasta: type: file description: The reference fasta file pattern: "*.{fasta,fa}" + - meta3: + type: map + description: | + Groovy Map containing fasta index information + e.g. [ id:'test', single_end:false ] - fai: type: file description: Index of reference fasta file to identify split-reads diff --git a/modules/nf-core/delly/call/tests/main.nf.test b/modules/nf-core/delly/call/tests/main.nf.test new file mode 100644 index 00000000..80cad20d --- /dev/null +++ b/modules/nf-core/delly/call/tests/main.nf.test @@ -0,0 +1,187 @@ +nextflow_process { + + name "Test Process DELLY_CALL" + script "../main.nf" + process "DELLY_CALL" + + tag "modules" + tag "modules_nfcore" + tag "delly" + tag "delly/call" + + test("homo_sapiens - bam, bai, [], [], [], fasta, fai") { + + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + 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:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bam") } + ) + } + + } + + test("homo_sapiens - cram, crai, [], [], [], fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + 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:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("cram") } + ) + } + + } + + test("homo_sapiens - cram, crai, [], [], bed, fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + 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), + [], + [], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/multi_intervals.bed", checkIfExists:true) + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("bed") } + ) + } + + } + + test("homo_sapiens - cram, crai, vcf, tbi, [], fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + 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), + 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/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi", checkIfExists:true), + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("genotype") } + ) + } + + } + + test("homo_sapiens - bam, bai, [], [], [], fasta, fai - stub") { + + config "./vcf.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + 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:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta", checkIfExists:true) + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai", checkIfExists:true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/delly/call/tests/main.nf.test.snap b/modules/nf-core/delly/call/tests/main.nf.test.snap new file mode 100644 index 00000000..c89636d9 --- /dev/null +++ b/modules/nf-core/delly/call/tests/main.nf.test.snap @@ -0,0 +1,247 @@ +{ + "bed": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:15.181069181" + }, + "cram": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:01.798279112" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:44.135939928" + }, + "bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,021dae61db384dae43a46386a66d1408" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,4cb176febbc8c26d717a6c6e67b9c905" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,021dae61db384dae43a46386a66d1408" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,4cb176febbc8c26d717a6c6e67b9c905" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:37:45.689766253" + }, + "genotype": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "2": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ], + "bcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,592702d7765f246cd0f7f32f23b607b9" + ] + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bcf.csi:md5,c198abfc14584c5ac69c004057927e0b" + ] + ], + "versions": [ + "versions.yml:md5,cf72d737ee881a7cd7eab87abf93b94c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:38:29.129594523" + } +} \ No newline at end of file diff --git a/modules/nf-core/delly/call/tests/tags.yml b/modules/nf-core/delly/call/tests/tags.yml new file mode 100644 index 00000000..bab4f0bd --- /dev/null +++ b/modules/nf-core/delly/call/tests/tags.yml @@ -0,0 +1,2 @@ +delly/call: + - "modules/nf-core/delly/call/**" diff --git a/modules/nf-core/delly/call/tests/vcf.config b/modules/nf-core/delly/call/tests/vcf.config new file mode 100644 index 00000000..22e93313 --- /dev/null +++ b/modules/nf-core/delly/call/tests/vcf.config @@ -0,0 +1,5 @@ +process { + withName: "DELLY_CALL" { + ext.suffix = "vcf" + } +} \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/download/environment.yml b/modules/nf-core/ensemblvep/download/environment.yml index beebaca6..2ea8642f 100644 --- a/modules/nf-core/ensemblvep/download/environment.yml +++ b/modules/nf-core/ensemblvep/download/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::ensembl-vep=110.0 + - bioconda::ensembl-vep=111.0 diff --git a/modules/nf-core/ensemblvep/download/main.nf b/modules/nf-core/ensemblvep/download/main.nf index a770cbfc..f9e025a5 100644 --- a/modules/nf-core/ensemblvep/download/main.nf +++ b/modules/nf-core/ensemblvep/download/main.nf @@ -4,24 +4,25 @@ process ENSEMBLVEP_DOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:110.0--pl5321h2a3209d_0' : - 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:111.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:111.0--pl5321h2a3209d_0' }" input: tuple val(meta), val(assembly), val(species), val(cache_version) output: - tuple val(meta), path("vep_cache"), emit: cache - path "versions.yml" , emit: versions + tuple val(meta), path(prefix), emit: cache + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: 'vep_cache' """ vep_install \\ - --CACHEDIR vep_cache \\ + --CACHEDIR $prefix \\ --SPECIES $species \\ --ASSEMBLY $assembly \\ --CACHE_VERSION $cache_version \\ @@ -34,8 +35,9 @@ process ENSEMBLVEP_DOWNLOAD { """ stub: + prefix = task.ext.prefix ?: 'vep_cache' """ - mkdir vep_cache + mkdir $prefix cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test b/modules/nf-core/ensemblvep/download/tests/main.nf.test new file mode 100644 index 00000000..760c9d56 --- /dev/null +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process ENSEMBLVEP_DOWNLOAD" + script "../main.nf" + process "ENSEMBLVEP_DOWNLOAD" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "ensemblvep" + tag "ensemblvep/download" + + test("celegans - download") { + + when { + process { + """ + input[0] = Channel.of([ + [id:"111_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("celegans - download - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [id:"111_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap new file mode 100644 index 00000000..6ea596fb --- /dev/null +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap @@ -0,0 +1,322 @@ +{ + "celegans - download": { + "content": [ + { + "0": [ + [ + { + "id": "111_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,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,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,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,779fda1352c0b1d635aa752c185e6ce2" + ], + [ + "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,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" + ], + "chr_synonyms.txt:md5,8a6fce00cc7817ec727c49b7954f10bc", + "info.txt:md5,33ccb74a030a9a345051628c337cb8af" + ] + ] + ] + ] + ], + "1": [ + "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + ], + "cache": [ + [ + { + "id": "111_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,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,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,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,779fda1352c0b1d635aa752c185e6ce2" + ], + [ + "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,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" + ], + "chr_synonyms.txt:md5,8a6fce00cc7817ec727c49b7954f10bc", + "info.txt:md5,33ccb74a030a9a345051628c337cb8af" + ] + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-04-15T17:20:01.921038" + }, + "celegans - download - stub": { + "content": [ + { + "0": [ + [ + { + "id": "111_WBcel235" + }, + [ + + ] + ] + ], + "1": [ + "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + ], + "cache": [ + [ + { + "id": "111_WBcel235" + }, + [ + + ] + ] + ], + "versions": [ + "versions.yml:md5,954fd177c394ba167d575a6aac47390b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-04-15T18:09:54.909036" + } +} \ 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 new file mode 100644 index 00000000..882bce41 --- /dev/null +++ b/modules/nf-core/ensemblvep/download/tests/nextflow.config @@ -0,0 +1,12 @@ +params { + vep_cache_version = "111" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" +} + +process { + withName: ENSEMBLVEP_DOWNLOAD { + ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + ext.prefix = { "${params.vep_cache_version}_${params.vep_genome}" } + } +} diff --git a/modules/nf-core/ensemblvep/download/tests/tags.yml b/modules/nf-core/ensemblvep/download/tests/tags.yml new file mode 100644 index 00000000..26671f3d --- /dev/null +++ b/modules/nf-core/ensemblvep/download/tests/tags.yml @@ -0,0 +1,2 @@ +ensemblvep/download: + - "modules/nf-core/ensemblvep/download/**" diff --git a/modules/nf-core/ensemblvep/vep/environment.yml b/modules/nf-core/ensemblvep/vep/environment.yml index 7a127746..91457c05 100644 --- a/modules/nf-core/ensemblvep/vep/environment.yml +++ b/modules/nf-core/ensemblvep/vep/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::ensembl-vep=110.0 + - bioconda::ensembl-vep=111.0 diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index a7fc5ad1..e82471aa 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:110.0--pl5321h2a3209d_0' : - 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:111.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:111.0--pl5321h2a3209d_0' }" input: tuple val(meta), path(vcf), path(custom_extra_files) @@ -57,9 +57,9 @@ process ENSEMBLVEP_VEP { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz - touch ${prefix}.tab.gz - touch ${prefix}.json.gz + echo "" | gzip > ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.tab.gz + echo "" | gzip > ${prefix}.json.gz touch ${prefix}.summary.html cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test b/modules/nf-core/ensemblvep/vep/tests/main.nf.test index f072dcab..4aff84a3 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test @@ -1,26 +1,31 @@ nextflow_process { name "Test Process ENSEMBLVEP_VEP" - script "modules/nf-core/ensemblvep/vep/main.nf" + script "../main.nf" process "ENSEMBLVEP_VEP" config "./nextflow.config" + tag "modules" tag "modules_nfcore" tag "ensemblvep" tag "ensemblvep/vep" tag "ensemblvep/download" - test("test_ensemblvep_vep_fasta_vcf") { - config "./vcf.config" setup { run("ENSEMBLVEP_DOWNLOAD") { script "../../download/main.nf" + process { """ - input[0] = Channel.of([[id:"${params.vep_cache_version}_${params.vep_genome}"], params.vep_genome, params.vep_species, params.vep_cache_version]) + input[0] = Channel.of([ + [id:"111_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) """ } } @@ -31,7 +36,7 @@ nextflow_process { """ input[0] = Channel.of([ [ 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), [] ]) input[1] = params.vep_genome @@ -40,7 +45,7 @@ nextflow_process { input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } input[5] = Channel.value([ [id:"fasta"], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) input[6] = [] """ @@ -49,23 +54,29 @@ nextflow_process { then { assertAll( - {assert process.success}, - {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") } ) } } test("test_ensemblvep_vep_fasta_tab_gz") { - config "./tab.gz.config" setup { run("ENSEMBLVEP_DOWNLOAD") { script "../../download/main.nf" + process { """ - input[0] = Channel.of([[id:"${params.vep_cache_version}_${params.vep_genome}"], params.vep_genome, params.vep_species, params.vep_cache_version]) + input[0] = Channel.of([ + [id:"111_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) """ } } @@ -76,7 +87,7 @@ nextflow_process { """ input[0] = Channel.of([ [ 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), [] ]) input[1] = params.vep_genome @@ -85,7 +96,7 @@ nextflow_process { input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } input[5] = Channel.value([ [id:"fasta"], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) input[6] = [] """ @@ -94,8 +105,9 @@ nextflow_process { then { assertAll( - {assert process.success}, - {assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v110.0")} + { 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") } ) } } diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap new file mode 100644 index 00000000..f937b299 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap @@ -0,0 +1,26 @@ +{ + "test_ensemblvep_vep_fasta_tab_gz": { + "content": [ + [ + "versions.yml:md5,bd2ba1b4741a7d0a224160b50859f4ba" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-04-15T17:35:20.694114" + }, + "test_ensemblvep_vep_fasta_vcf": { + "content": [ + [ + "versions.yml:md5,bd2ba1b4741a7d0a224160b50859f4ba" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-04-15T17:34:41.093843" + } +} \ 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 cfaef733..882bce41 100644 --- a/modules/nf-core/ensemblvep/vep/tests/nextflow.config +++ b/modules/nf-core/ensemblvep/vep/tests/nextflow.config @@ -1,13 +1,12 @@ params { - vep_cache_version = "110" - vep_genome = "WBcel235" - vep_species = "caenorhabditis_elegans" + vep_cache_version = "111" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" } process { - withName: ENSEMBLVEP_DOWNLOAD { - ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + ext.prefix = { "${params.vep_cache_version}_${params.vep_genome}" } } - } diff --git a/modules/nf-core/expansionhunter/environment.yml b/modules/nf-core/expansionhunter/environment.yml index 76edd1ef..8023159a 100644 --- a/modules/nf-core/expansionhunter/environment.yml +++ b/modules/nf-core/expansionhunter/environment.yml @@ -3,5 +3,7 @@ channels: - conda-forge - bioconda - defaults + dependencies: - bioconda::expansionhunter=5.0.0 + - bioconda::htslib=1.18 diff --git a/modules/nf-core/expansionhunter/main.nf b/modules/nf-core/expansionhunter/main.nf index bea5916a..dbcb175f 100644 --- a/modules/nf-core/expansionhunter/main.nf +++ b/modules/nf-core/expansionhunter/main.nf @@ -40,7 +40,7 @@ process EXPANSIONHUNTER { cat <<-END_VERSIONS > versions.yml "${task.process}": - expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | head -1 | sed 's/^.*ExpansionHunter v//') bgzip: \$(echo \$(bgzip -h 2>&1) | sed 's/^.*Version: //;s/Usage:.*//') END_VERSIONS """ @@ -48,13 +48,13 @@ process EXPANSIONHUNTER { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz - touch ${prefix}.json.gz + echo "" | gzip > ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.json.gz touch ${prefix}_realigned.bam cat <<-END_VERSIONS > versions.yml "${task.process}": - expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | head -1 | sed 's/^.*ExpansionHunter v//') bgzip: \$(echo \$(bgzip -h 2>&1) | sed 's/^.*Version: //;s/Usage:.*//') END_VERSIONS """ diff --git a/modules/nf-core/expansionhunter/tests/main.nf.test b/modules/nf-core/expansionhunter/tests/main.nf.test index 6204460a..ef15e133 100644 --- a/modules/nf-core/expansionhunter/tests/main.nf.test +++ b/modules/nf-core/expansionhunter/tests/main.nf.test @@ -7,7 +7,7 @@ nextflow_process { tag "modules_nfcore" tag "expansionhunter" - test("expansionhunter") { + test("homo_sapiens - [bam,bai], fasta, fai, cat") { when { process { @@ -25,10 +25,35 @@ nextflow_process { then { assertAll( - {assert process.success}, - {assert path(process.out.vcf.get(0).get(1)).linesGzip.size() == 8}, - {assert path(process.out.json.get(0).get(1)).linesGzip.size() == 27}, - {assert snapshot(process.out.bam).match()} + {assert process.success}, + {assert snapshot(process.out).match("expansionhunter")} + ) + } + + } + + test("homo_sapiens - [bam,bai], fasta, fai, cat - stub") { + + options "-stub" + + when { + 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']['test_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:'fasta_fai'],file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)] + input[3] = [[id:'catalogue'],file(params.test_data['homo_sapiens']['genome']['repeat_expansions'], checkIfExists: true)] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match("stub")} ) } diff --git a/modules/nf-core/expansionhunter/tests/main.nf.test.snap b/modules/nf-core/expansionhunter/tests/main.nf.test.snap index a98fb599..a4e09f4c 100644 --- a/modules/nf-core/expansionhunter/tests/main.nf.test.snap +++ b/modules/nf-core/expansionhunter/tests/main.nf.test.snap @@ -1,15 +1,132 @@ { "expansionhunter": { "content": [ - [ - [ - { - "id": "test" - }, - "test_realigned.bam:md5,b37a72c0b97b45e63636a9758f3144d7" + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,cfd4a1d35c0e469b99eb6aaa6d22de76" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,60d7dc4662c837bba2715d54b64a9bfe" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test_realigned.bam:md5,b37a72c0b97b45e63636a9758f3144d7" + ] + ], + "3": [ + "versions.yml:md5,056b525f67ba23c361f0c65f47256dca" + ], + "bam": [ + [ + { + "id": "test" + }, + "test_realigned.bam:md5,b37a72c0b97b45e63636a9758f3144d7" + ] + ], + "json": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,60d7dc4662c837bba2715d54b64a9bfe" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,cfd4a1d35c0e469b99eb6aaa6d22de76" + ] + ], + "versions": [ + "versions.yml:md5,056b525f67ba23c361f0c65f47256dca" ] - ] + } ], - "timestamp": "2024-01-26T17:35:10.45442497" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T12:20:15.18545069" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test_realigned.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,056b525f67ba23c361f0c65f47256dca" + ], + "bam": [ + [ + { + "id": "test" + }, + "test_realigned.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test" + }, + "test.json.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,056b525f67ba23c361f0c65f47256dca" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T12:20:28.430115" } } \ No newline at end of file diff --git a/modules/nf-core/gawk/main.nf b/modules/nf-core/gawk/main.nf index f856a1f8..578b448c 100644 --- a/modules/nf-core/gawk/main.nf +++ b/modules/nf-core/gawk/main.nf @@ -41,10 +41,11 @@ process GAWK { stub: prefix = task.ext.prefix ?: "${meta.id}" - suffix = task.ext.suffix ?: "${input.getExtension}" + suffix = task.ext.suffix ?: "${input.getExtension()}" + def create_cmd = suffix.endsWith("gz") ? "echo '' | gzip >" : "touch" """ - touch ${prefix}.${suffix} + ${create_cmd} ${prefix}.${suffix} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gawk/tests/main.nf.test b/modules/nf-core/gawk/tests/main.nf.test new file mode 100644 index 00000000..fce82ca9 --- /dev/null +++ b/modules/nf-core/gawk/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process GAWK" + script "../main.nf" + process "GAWK" + + tag "modules" + tag "modules_nfcore" + tag "gawk" + + test("convert fasta to bed") { + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("convert fasta to bed with program file") { + config "./nextflow_with_program_file.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[1] = Channel.of('BEGIN {FS="\t"}; {print \$1 FS "0" FS \$2}').collectFile(name:"program.txt") + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/gawk/tests/main.nf.test.snap b/modules/nf-core/gawk/tests/main.nf.test.snap new file mode 100644 index 00000000..ce207478 --- /dev/null +++ b/modules/nf-core/gawk/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "convert fasta to bed with program file": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "1": [ + "versions.yml:md5,4c320d8c98ca80690afd7651da1ba520" + ], + "output": [ + [ + { + "id": "test" + }, + "test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "versions": [ + "versions.yml:md5,4c320d8c98ca80690afd7651da1ba520" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-05T11:00:28.097563" + }, + "convert fasta to bed": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "1": [ + "versions.yml:md5,4c320d8c98ca80690afd7651da1ba520" + ], + "output": [ + [ + { + "id": "test" + }, + "test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "versions": [ + "versions.yml:md5,4c320d8c98ca80690afd7651da1ba520" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-05T10:28:15.625869" + } +} \ No newline at end of file diff --git a/modules/nf-core/gawk/tests/nextflow.config b/modules/nf-core/gawk/tests/nextflow.config new file mode 100644 index 00000000..6e5d43a3 --- /dev/null +++ b/modules/nf-core/gawk/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: GAWK { + ext.suffix = "bed" + ext.args2 = '\'BEGIN {FS="\t"}; {print \$1 FS "0" FS \$2}\'' + } +} diff --git a/modules/nf-core/gawk/tests/nextflow_with_program_file.config b/modules/nf-core/gawk/tests/nextflow_with_program_file.config new file mode 100644 index 00000000..693ad419 --- /dev/null +++ b/modules/nf-core/gawk/tests/nextflow_with_program_file.config @@ -0,0 +1,5 @@ +process { + withName: GAWK { + ext.suffix = "bed" + } +} diff --git a/modules/nf-core/gawk/tests/tags.yml b/modules/nf-core/gawk/tests/tags.yml new file mode 100644 index 00000000..72e4531d --- /dev/null +++ b/modules/nf-core/gawk/tests/tags.yml @@ -0,0 +1,2 @@ +gawk: + - "modules/nf-core/gawk/**" diff --git a/modules/nf-core/gridss/gridss/environment.yml b/modules/nf-core/gridss/gridss/environment.yml new file mode 100644 index 00000000..88b38561 --- /dev/null +++ b/modules/nf-core/gridss/gridss/environment.yml @@ -0,0 +1,7 @@ +name: gridss_gridss +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gridss=2.13.2 diff --git a/modules/nf-core/gridss/gridss/main.nf b/modules/nf-core/gridss/gridss/main.nf index efd45a7c..60e8b76f 100644 --- a/modules/nf-core/gridss/gridss/main.nf +++ b/modules/nf-core/gridss/gridss/main.nf @@ -1,8 +1,8 @@ process GRIDSS_GRIDSS { tag "$meta.id" - label 'process_high' + label 'process_medium' - conda "bioconda::gridss=2.13.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gridss:2.13.2--h270b39a_0': 'biocontainers/gridss:2.13.2--h270b39a_0' }" @@ -37,7 +37,8 @@ process GRIDSS_GRIDSS { --reference ${fasta} \\ --threads ${task.cpus} \\ ${assembly} \\ - ${args} \\ + --jvmheap ${task.memory.toGiga() - 1}g \\ + --otherjvmheap ${task.memory.toGiga() - 1}g \\ ${inputs} cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/gridss/gridss/meta.yml b/modules/nf-core/gridss/gridss/meta.yml index 3ac3842e..bf5539c1 100644 --- a/modules/nf-core/gridss/gridss/meta.yml +++ b/modules/nf-core/gridss/gridss/meta.yml @@ -9,12 +9,10 @@ keywords: tools: - "gridss": description: "GRIDSS: the Genomic Rearrangement IDentification Software Suite" - documentation: "https://github.com/PapenfussLab/gridss/wiki/GRIDSS-Documentation" tool_dev_url: "https://github.com/PapenfussLab/gridss" doi: "10.1186/s13059-021-02423-x" licence: "['GPL v3']" - input: - meta: type: map @@ -40,7 +38,6 @@ input: - bwa_index: type: directory description: OPTIONAL - The BWA index created from the reference fasta, will be generated by Gridss in the setupreference step - output: - meta: type: map @@ -59,6 +56,7 @@ output: type: file description: The assembly BAM file created by Gridss' assembly step pattern: "*.assembly.bam" - authors: - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/modules/nf-core/jasminesv/environment.yml b/modules/nf-core/jasminesv/environment.yml index 3f04bc0f..7b26adfe 100644 --- a/modules/nf-core/jasminesv/environment.yml +++ b/modules/nf-core/jasminesv/environment.yml @@ -5,3 +5,4 @@ channels: - defaults dependencies: - bioconda::jasminesv=1.1.5 + - bioconda::htslib=1.15.1 diff --git a/modules/nf-core/jasminesv/main.nf b/modules/nf-core/jasminesv/main.nf index 08decefb..7272f5d9 100644 --- a/modules/nf-core/jasminesv/main.nf +++ b/modules/nf-core/jasminesv/main.nf @@ -9,8 +9,8 @@ process JASMINESV { input: tuple val(meta), path(vcfs), path(bams), path(sample_dists), path(vcf_list) - path(fasta) - path(fasta_fai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fasta_fai) path(chr_norm) output: @@ -65,7 +65,7 @@ process JASMINESV { def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/jasminesv/meta.yml b/modules/nf-core/jasminesv/meta.yml index e53ed304..5d8b111c 100644 --- a/modules/nf-core/jasminesv/meta.yml +++ b/modules/nf-core/jasminesv/meta.yml @@ -12,7 +12,7 @@ tools: homepage: "https://github.com/mkirsche/Jasmine/wiki/Jasmine-User-Manual" documentation: "https://github.com/mkirsche/Jasmine/wiki/Jasmine-User-Manual" tool_dev_url: "https://github.com/mkirsche/Jasmine" - licence: "['MIT']" + licence: ["MIT"] input: - meta: type: map @@ -20,22 +20,32 @@ input: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - vcfs: - type: files + type: list description: | The VCF files that need to be merged pattern: "*.{vcf,vcf.gz}" - bams: - type: files + type: list description: Optional - The BAM files from which the VCFs were created pattern: "*.bam" - sample_dists: type: file description: Optional - A txt file containing the distance thresholds for each sample pattern: "*.txt" + - meta2: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test', single_end:false ] - fasta: type: file description: Optional - The reference FASTA file used to create the VCFs pattern: "*.{fasta,fa}" + - meta3: + type: map + description: | + Groovy Map containing fasta index information + e.g. [ id:'test', single_end:false ] - fasta_fai: type: file description: Optional - The index of the reference FASTA file used to create the VCFs diff --git a/modules/nf-core/jasminesv/tests/iris.config b/modules/nf-core/jasminesv/tests/iris.config new file mode 100644 index 00000000..f61a65bb --- /dev/null +++ b/modules/nf-core/jasminesv/tests/iris.config @@ -0,0 +1,6 @@ +process { + withName: "JASMINESV" { + ext.args = "--run_iris" + ext.args2 = {"threads=1,--pacbio,min_ins_length=30"} + } +} diff --git a/modules/nf-core/jasminesv/tests/main.nf.test b/modules/nf-core/jasminesv/tests/main.nf.test new file mode 100644 index 00000000..851f3383 --- /dev/null +++ b/modules/nf-core/jasminesv/tests/main.nf.test @@ -0,0 +1,185 @@ +nextflow_process { + + name "Test Process JASMINESV" + script "../main.nf" + process "JASMINESV" + + tag "modules" + tag "modules_nfcore" + tag "jasminesv" + + test("homo_sapiens - [vcf, vcf2], [], [], [], [], []") { + + 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/test2.genome.vcf", checkIfExists:true), + ], + [], + [] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("vcf") } + ) + } + + } + + test("homo_sapiens - [vcf_gz, vcf_gz2], [], [], [], [], []") { + + when { + process { + """ + input[0] = [ + [ id:"test" ], + [ + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz", checkIfExists:true), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz", checkIfExists:true), + ], + [], + [] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("vcf_gz") } + ) + } + + } + + test("homo_sapiens - [vcf, vcf2], [bam, bam2], [], fasta, fai, []") { + + config "./iris.config" + + 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/test2.genome.vcf", 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] = [ + [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] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("iris") } + ) + } + + } + + test("homo_sapiens - [vcf, vcf2], [bam, bam2], [], fasta, fai, txt") { + + config "./normalize.config" + + 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/test2.genome.vcf", 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] = [ + [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] = Channel.of("chr21 21", "chr22 22").collectFile(name:"chr_norm.txt", newLine:true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("normalize") } + ) + } + + } + + test("homo_sapiens - [vcf, vcf2], [], [], [], [], [] - 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/test2.genome.vcf", checkIfExists:true), + ], + [], + [] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/jasminesv/tests/main.nf.test.snap b/modules/nf-core/jasminesv/tests/main.nf.test.snap new file mode 100644 index 00000000..12032759 --- /dev/null +++ b/modules/nf-core/jasminesv/tests/main.nf.test.snap @@ -0,0 +1,167 @@ +{ + "iris": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,4140a44d52426b17c4882a2b4d7508fb" + ] + ], + "1": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,4140a44d52426b17c4882a2b4d7508fb" + ] + ], + "versions": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:31:25.797756867" + }, + "vcf_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,aec8e2a90831e84b5e0f8dfa6b80fef5" + ] + ], + "1": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,aec8e2a90831e84b5e0f8dfa6b80fef5" + ] + ], + "versions": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:31:17.166819477" + }, + "normalize": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,ee57b923cb0a6e2af25790942281fa09" + ] + ], + "1": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,ee57b923cb0a6e2af25790942281fa09" + ] + ], + "versions": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:31:33.298107095" + }, + "vcf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,a5f2ea4423010007d26bd61adb169eb7" + ] + ], + "1": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,a5f2ea4423010007d26bd61adb169eb7" + ] + ], + "versions": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:31:09.71125551" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,4551c0b18f219ada906fbca1f71e06b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T11:31:41.394853501" + } +} \ No newline at end of file diff --git a/modules/nf-core/jasminesv/tests/normalize.config b/modules/nf-core/jasminesv/tests/normalize.config new file mode 100644 index 00000000..df20a56c --- /dev/null +++ b/modules/nf-core/jasminesv/tests/normalize.config @@ -0,0 +1,5 @@ +process { + withName: "JASMINESV" { + ext.args = "--normalize_chrs" + } +} diff --git a/modules/nf-core/jasminesv/tests/tags.yml b/modules/nf-core/jasminesv/tests/tags.yml new file mode 100644 index 00000000..52e09e5b --- /dev/null +++ b/modules/nf-core/jasminesv/tests/tags.yml @@ -0,0 +1,2 @@ +jasminesv: + - "modules/nf-core/jasminesv/**" diff --git a/modules/nf-core/manta/convertinversion/environment.yml b/modules/nf-core/manta/convertinversion/environment.yml index c238cf4d..433a423f 100644 --- a/modules/nf-core/manta/convertinversion/environment.yml +++ b/modules/nf-core/manta/convertinversion/environment.yml @@ -4,6 +4,6 @@ channels: - bioconda - defaults dependencies: + - bioconda::htslib=1.16 - bioconda::manta=1.6.0 - bioconda::samtools=1.16.1 - - bioconda::htslib=1.16 diff --git a/modules/nf-core/manta/convertinversion/main.nf b/modules/nf-core/manta/convertinversion/main.nf index dde263d0..462b2e5e 100644 --- a/modules/nf-core/manta/convertinversion/main.nf +++ b/modules/nf-core/manta/convertinversion/main.nf @@ -33,4 +33,17 @@ process MANTA_CONVERTINVERSION { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + manta: \$( configManta.py --version ) + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) + END_VERSIONS + """ } diff --git a/modules/nf-core/manta/convertinversion/meta.yml b/modules/nf-core/manta/convertinversion/meta.yml index cd1d3cef..865ef87c 100644 --- a/modules/nf-core/manta/convertinversion/meta.yml +++ b/modules/nf-core/manta/convertinversion/meta.yml @@ -22,6 +22,15 @@ input: type: file description: VCF file produces by Manta pattern: "*.vcf.gz" + - meta2: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.{fasta,fa,fna}" output: - meta: type: map diff --git a/modules/nf-core/manta/convertinversion/tests/main.nf.test b/modules/nf-core/manta/convertinversion/tests/main.nf.test new file mode 100644 index 00000000..58adf6e3 --- /dev/null +++ b/modules/nf-core/manta/convertinversion/tests/main.nf.test @@ -0,0 +1,92 @@ +nextflow_process { + + name "Test Process MANTA_CONVERTINVERSION" + script "../main.nf" + process "MANTA_CONVERTINVERSION" + + tag "modules" + tag "modules_nfcore" + tag "manta" + tag "manta/convertinversion" + tag "manta/tumoronly" + + setup { + run("MANTA_TUMORONLY") { + script "../../tumoronly/main.nf" + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram"), + file(params.modules_testdata_base_path + "genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai"), + [], + [] + ] + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta") + ] + input[2] = [ + [ id:'fai' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai") + ] + input[3] = [] + """ + } + } + + } + + test("homo_sapiens - vcf, fasta") { + + when { + process { + """ + input[0] = MANTA_TUMORONLY.out.tumor_sv_vcf + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta") + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : path(it).linesGzip[-7..-3] } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - vcf, fasta - stub") { + + options "-stub" + + when { + process { + """ + input[0] = MANTA_TUMORONLY.out.tumor_sv_vcf + input[1] = [ + [ id:'fasta' ], + file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/chr21/sequence/genome.fasta") + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/manta/convertinversion/tests/main.nf.test.snap b/modules/nf-core/manta/convertinversion/tests/main.nf.test.snap new file mode 100644 index 00000000..0fba8d69 --- /dev/null +++ b/modules/nf-core/manta/convertinversion/tests/main.nf.test.snap @@ -0,0 +1,85 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d9a3c2c54bad36a8310d42eae3d57801" + ], + "tbi": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d9a3c2c54bad36a8310d42eae3d57801" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T10:26:25.996091364" + }, + "homo_sapiens - vcf, fasta": { + "content": [ + [ + [ + { + "id": "test" + }, + [ + "##FILTER=", + "##ALT=", + "##ALT=", + "##ALT=", + "##ALT=" + ] + ] + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,d9a3c2c54bad36a8310d42eae3d57801" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T13:34:11.206457972" + } +} \ No newline at end of file diff --git a/modules/nf-core/manta/convertinversion/tests/tags.yml b/modules/nf-core/manta/convertinversion/tests/tags.yml new file mode 100644 index 00000000..14d94b28 --- /dev/null +++ b/modules/nf-core/manta/convertinversion/tests/tags.yml @@ -0,0 +1,2 @@ +manta/convertinversion: + - "modules/nf-core/manta/convertinversion/**" diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index 5d5666c6..c1b339a9 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -66,11 +66,11 @@ process MANTA_GERMLINE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.candidate_small_indels.vcf.gz + echo "" | gzip > ${prefix}.candidate_small_indels.vcf.gz touch ${prefix}.candidate_small_indels.vcf.gz.tbi - touch ${prefix}.candidate_sv.vcf.gz + echo "" | gzip > ${prefix}.candidate_sv.vcf.gz touch ${prefix}.candidate_sv.vcf.gz.tbi - touch ${prefix}.diploid_sv.vcf.gz + echo "" | gzip > ${prefix}.diploid_sv.vcf.gz touch ${prefix}.diploid_sv.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/manta/germline/tests/main.nf.test b/modules/nf-core/manta/germline/tests/main.nf.test new file mode 100644 index 00000000..1d49ad23 --- /dev/null +++ b/modules/nf-core/manta/germline/tests/main.nf.test @@ -0,0 +1,162 @@ +nextflow_process { + + name "Test Process MANTA_GERMLINE" + script "../main.nf" + process "MANTA_GERMLINE" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "manta" + tag "manta/germline" + + test("human - cram") { + + 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), + [],[] + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = Channel.of("[manta]", "enableRemoteReadRetrievalForInsertionsInGermlineCallingModes = 0") + .collectFile(name:"manta_options.ini", newLine:true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.candidate_small_indels_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.candidate_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.diploid_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert snapshot(process.out.version).match("version") } + ) + } + + } + + test("human - cram - bed") { + + when { + process { + """ + input[0] = [ [ id:'bed_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.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz.tbi', checkIfExists: true) + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.candidate_small_indels_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.candidate_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.diploid_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert snapshot(process.out.version).match("bed_version") } + ) + } + + } + + test("human - cram - bed - jointcalling") { + + when { + process { + """ + input[0] = [ [ id:'bed_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/test2.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.crai', checkIfExists: true) + ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz.tbi', checkIfExists: true) + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.candidate_small_indels_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.candidate_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.diploid_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert snapshot(process.out.version).match("joint_version") } + ) + } + + } + test("human - cram - 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), + [],[] + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/manta/germline/tests/main.nf.test.snap b/modules/nf-core/manta/germline/tests/main.nf.test.snap new file mode 100644 index 00000000..79d5541e --- /dev/null +++ b/modules/nf-core/manta/germline/tests/main.nf.test.snap @@ -0,0 +1,139 @@ +{ + "human - cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + "versions.yml:md5,18070b443a26855ef64dafa179dfba01" + ], + "candidate_small_indels_vcf": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "candidate_small_indels_vcf_tbi": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "candidate_sv_vcf": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "candidate_sv_vcf_tbi": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "diploid_sv_vcf": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "diploid_sv_vcf_tbi": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,18070b443a26855ef64dafa179dfba01" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-21T17:54:09.788372" + }, + "joint_version": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T15:03:07.745972" + }, + "bed_version": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-21T13:49:38.745653" + }, + "version": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-21T13:49:14.885769" + } +} \ No newline at end of file diff --git a/modules/nf-core/manta/germline/tests/nextflow.config b/modules/nf-core/manta/germline/tests/nextflow.config new file mode 100644 index 00000000..22acb242 --- /dev/null +++ b/modules/nf-core/manta/germline/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: MANTA_GERMLINE { + ext.args = '--exome ' + } +} diff --git a/modules/nf-core/manta/germline/tests/tags.yml b/modules/nf-core/manta/germline/tests/tags.yml new file mode 100644 index 00000000..99d1a73c --- /dev/null +++ b/modules/nf-core/manta/germline/tests/tags.yml @@ -0,0 +1,2 @@ +manta/germline: + - "modules/nf-core/manta/germline/**" diff --git a/modules/nf-core/ngsbits/samplegender/meta.yml b/modules/nf-core/ngsbits/samplegender/meta.yml index 997bc06e..961462b3 100644 --- a/modules/nf-core/ngsbits/samplegender/meta.yml +++ b/modules/nf-core/ngsbits/samplegender/meta.yml @@ -12,7 +12,7 @@ tools: homepage: "https://github.com/imgag/ngs-bits" documentation: "https://github.com/imgag/ngs-bits" tool_dev_url: "https://github.com/imgag/ngs-bits" - licence: "['MIT license']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/ngsbits/samplegender/tests/main.nf.test b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test new file mode 100644 index 00000000..2cf4757b --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test @@ -0,0 +1,47 @@ +nextflow_process { + + name "Test Process NGSBITS_SAMPLEGENDER" + script "../main.nf" + process "NGSBITS_SAMPLEGENDER" + + tag "modules" + tag "modules_nfcore" + tag "ngsbits" + tag "ngsbits/samplegender" + + // Only a stub test here because the modules needs the full chrX and chrY + test("homo_sapiens - bam, bai, [], [], sry - stub") { + + options "-stub" + + when { + 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']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + ] + input[1] = [ + [ id:'reference'], // meta map + [] + ] + input[2] = [ + [ id:'reference'], // meta map + [] + ] + input[3] = "sry" + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap new file mode 100644 index 00000000..48fd8af9 --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "homo_sapiens - bam, bai, [], [], sry - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,72f3e70be3e6a734bf39d1a6bf6d604b" + ], + "tsv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,72f3e70be3e6a734bf39d1a6bf6d604b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T15:36:37.639882564" + } +} \ No newline at end of file diff --git a/modules/nf-core/ngsbits/samplegender/tests/tags.yml b/modules/nf-core/ngsbits/samplegender/tests/tags.yml new file mode 100644 index 00000000..8b7a0da9 --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/tests/tags.yml @@ -0,0 +1,2 @@ +ngsbits/samplegender: + - "modules/nf-core/ngsbits/samplegender/**" diff --git a/modules/nf-core/samtools/convert/samtools-convert.diff b/modules/nf-core/samtools/convert/samtools-convert.diff index c43eb28d..892709e4 100644 --- a/modules/nf-core/samtools/convert/samtools-convert.diff +++ b/modules/nf-core/samtools/convert/samtools-convert.diff @@ -1,7 +1,7 @@ Changes in module 'nf-core/samtools/convert' --- modules/nf-core/samtools/convert/main.nf +++ modules/nf-core/samtools/convert/main.nf -@@ -42,4 +42,19 @@ +@@ -57,4 +57,19 @@ samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test b/modules/nf-core/samtools/convert/tests/main.nf.test index d2ab5839..91a0c69e 100644 --- a/modules/nf-core/samtools/convert/tests/main.nf.test +++ b/modules/nf-core/samtools/convert/tests/main.nf.test @@ -72,4 +72,36 @@ nextflow_process { ) } } + + test("sarscov2 - [bam, bai], fasta, fai - 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] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'fai' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + } } 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 9d56a4ec..3d6f88c4 100644 --- a/modules/nf-core/samtools/convert/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/convert/tests/main.nf.test.snap @@ -43,6 +43,71 @@ }, "timestamp": "2024-03-06T11:14:36.643960504" }, + "stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,dd0aaf61f39c9ce91c74090f3c7ce1d0" + ], + "bai": [ + + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,dd0aaf61f39c9ce91c74090f3c7ce1d0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-03T12:01:40.896170698" + }, "bam_to_cram_index": { "content": [ "test.cram.crai" diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 3e95dd71..d5f8e70e 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -3,6 +3,7 @@ channels: - conda-forge - bioconda - defaults + dependencies: - - bioconda::samtools=1.19.2 - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index e189af28..f3c25de2 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -39,6 +39,10 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - fa: + type: file + description: FASTA file + pattern: "*.{fa}" - fai: type: file description: FASTA index file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 00000000..17244ef2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,122 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + + test("test_samtools_faidx") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + 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_samtools_faidx_stub_fasta") { + + config "./nextflow2.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + 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_samtools_faidx_stub_fai") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 00000000..3e651ef6 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,249 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:22:39.412601" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:23:22.427966" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:24:04.107537" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:24:45.868463" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:25:27.550554" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 00000000..f76a3ba0 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = 'MT192765.1 -o extract.fa' + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/nextflow2.config b/modules/nf-core/samtools/faidx/tests/nextflow2.config new file mode 100644 index 00000000..33ebbd5d --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow2.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = '-o extract.fa' + } +} diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml new file mode 100644 index 00000000..e4a83948 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/faidx: + - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/wisecondorx/convert/main.nf b/modules/nf-core/wisecondorx/convert/main.nf index 3602b1eb..e284edb0 100644 --- a/modules/nf-core/wisecondorx/convert/main.nf +++ b/modules/nf-core/wisecondorx/convert/main.nf @@ -5,8 +5,8 @@ process WISECONDORX_CONVERT { // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/wisecondorx:1.2.5--pyh5e36f6f_0': - 'biocontainers/wisecondorx:1.2.5--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/wisecondorx:1.2.7--pyhdfd78af_0': + 'biocontainers/wisecondorx:1.2.7--pyhdfd78af_0' }" input: tuple val(meta), path(bam), path(bai) @@ -24,7 +24,7 @@ process WISECONDORX_CONVERT { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" - def VERSION = '1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.2.7' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ WisecondorX convert \\ @@ -41,7 +41,7 @@ process WISECONDORX_CONVERT { stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.2.7' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.npz diff --git a/modules/nf-core/wisecondorx/convert/meta.yml b/modules/nf-core/wisecondorx/convert/meta.yml index b6d0b457..d70d9d69 100644 --- a/modules/nf-core/wisecondorx/convert/meta.yml +++ b/modules/nf-core/wisecondorx/convert/meta.yml @@ -11,7 +11,7 @@ tools: documentation: "https://github.com/CenterForMedicalGeneticsGhent/WisecondorX" tool_dev_url: "https://github.com/CenterForMedicalGeneticsGhent/WisecondorX" doi: "10.1093/nar/gky1263" - licence: "['Attribution-NonCommercial-ShareAlike CC BY-NC-SA']" + licence: ["Attribution-NonCommercial-ShareAlike CC BY-NC-SA"] input: - meta: type: map diff --git a/modules/nf-core/wisecondorx/convert/tests/main.nf.test b/modules/nf-core/wisecondorx/convert/tests/main.nf.test new file mode 100644 index 00000000..1e093e9a --- /dev/null +++ b/modules/nf-core/wisecondorx/convert/tests/main.nf.test @@ -0,0 +1,97 @@ +nextflow_process { + + name "Test Process WISECONDORX_CONVERT" + script "../main.nf" + process "WISECONDORX_CONVERT" + + tag "modules" + tag "modules_nfcore" + tag "wisecondorx" + tag "wisecondorx/convert" + + test("sarscov2 - bam, bai, [], []") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam_bai'], checkIfExists: true) + ] + input[1] = [[], []] + input[2] = [[], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - cram, crai, fasta, fai") { + + when { + 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) + ] + + input[1] = [ + [ id:'test' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + + input[2] = [ + [ id:'test' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam, bai - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam_bai'], checkIfExists: true) + ] + input[1] = [[], []] + input[2] = [[], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/wisecondorx/convert/tests/main.nf.test.snap b/modules/nf-core/wisecondorx/convert/tests/main.nf.test.snap new file mode 100644 index 00000000..aa1f22c2 --- /dev/null +++ b/modules/nf-core/wisecondorx/convert/tests/main.nf.test.snap @@ -0,0 +1,107 @@ +{ + "sarscov2 - cram, crai, fasta, fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.npz:md5,154337aa93ceddf15ea7382969588524" + ] + ], + "1": [ + "versions.yml:md5,dc34a4dc3f7c98e236b54d2b58c81e92" + ], + "npz": [ + [ + { + "id": "test", + "single_end": false + }, + "test.npz:md5,154337aa93ceddf15ea7382969588524" + ] + ], + "versions": [ + "versions.yml:md5,dc34a4dc3f7c98e236b54d2b58c81e92" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-25T10:32:21.089786336" + }, + "sarscov2 - bam, bai, [], []": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.npz:md5,00c8acf1727e9eb78e56bce28b09ee3b" + ] + ], + "1": [ + "versions.yml:md5,dc34a4dc3f7c98e236b54d2b58c81e92" + ], + "npz": [ + [ + { + "id": "test", + "single_end": false + }, + "test.npz:md5,00c8acf1727e9eb78e56bce28b09ee3b" + ] + ], + "versions": [ + "versions.yml:md5,dc34a4dc3f7c98e236b54d2b58c81e92" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-25T10:32:11.059476585" + }, + "sarscov2 - bam, bai - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.npz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,dc34a4dc3f7c98e236b54d2b58c81e92" + ], + "npz": [ + [ + { + "id": "test", + "single_end": false + }, + "test.npz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,dc34a4dc3f7c98e236b54d2b58c81e92" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-25T10:32:28.177177149" + } +} \ No newline at end of file diff --git a/modules/nf-core/wisecondorx/convert/tests/tags.yml b/modules/nf-core/wisecondorx/convert/tests/tags.yml new file mode 100644 index 00000000..0c3526e8 --- /dev/null +++ b/modules/nf-core/wisecondorx/convert/tests/tags.yml @@ -0,0 +1,2 @@ +wisecondorx/convert: + - "modules/nf-core/wisecondorx/convert/**" diff --git a/modules/nf-core/wisecondorx/predict/main.nf b/modules/nf-core/wisecondorx/predict/main.nf index 460df23f..1cba5900 100644 --- a/modules/nf-core/wisecondorx/predict/main.nf +++ b/modules/nf-core/wisecondorx/predict/main.nf @@ -5,8 +5,8 @@ process WISECONDORX_PREDICT { // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/wisecondorx:1.2.5--pyh5e36f6f_0': - 'biocontainers/wisecondorx:1.2.5--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/wisecondorx:1.2.7--pyhdfd78af_0': + 'biocontainers/wisecondorx:1.2.7--pyhdfd78af_0' }" input: tuple val(meta), path(npz) @@ -32,7 +32,7 @@ process WISECONDORX_PREDICT { def plots = args.contains("--plot") ? "mv ${prefix}.plots/* ." : "" - def VERSION = '1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.2.7' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ WisecondorX predict \\ @@ -53,7 +53,7 @@ process WISECONDORX_PREDICT { stub: def args = task.ext.args ?: '--bed --plot' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.2.7' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. def bed = args.contains("--bed") ? "touch ${prefix}_aberrations.bed && touch ${prefix}_bins.bed && touch ${prefix}_chr_statistics.txt && touch ${prefix}_segments.bed" : "" def plot = args.contains("--plot") ? "touch genome_wide.png && touch chr22.png && touch chr1.png" : "" diff --git a/modules/nf-core/wisecondorx/predict/meta.yml b/modules/nf-core/wisecondorx/predict/meta.yml index bb2313e0..0f347ee3 100644 --- a/modules/nf-core/wisecondorx/predict/meta.yml +++ b/modules/nf-core/wisecondorx/predict/meta.yml @@ -12,7 +12,7 @@ tools: documentation: "https://github.com/CenterForMedicalGeneticsGhent/WisecondorX" tool_dev_url: "https://github.com/CenterForMedicalGeneticsGhent/WisecondorX" doi: "10.1093/nar/gky1263" - licence: "['Attribution-NonCommercial-ShareAlike CC BY-NC-SA']" + licence: ["Attribution-NonCommercial-ShareAlike CC BY-NC-SA"] input: - meta: type: map @@ -51,7 +51,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - - abberations_bed: + - aberrations_bed: type: file description: OPTIONAL - Output abberations in BED format. This gets created with the `--bed` option pattern: "*_aberrations.bed" diff --git a/modules/nf-core/wisecondorx/predict/tests/main.nf.test b/modules/nf-core/wisecondorx/predict/tests/main.nf.test new file mode 100644 index 00000000..27b47525 --- /dev/null +++ b/modules/nf-core/wisecondorx/predict/tests/main.nf.test @@ -0,0 +1,65 @@ +nextflow_process { + + name "Test Process WISECONDORX_PREDICT" + script "../main.nf" + process "WISECONDORX_PREDICT" + + tag "modules" + tag "modules_nfcore" + tag "wisecondorx" + tag "wisecondorx/predict" + tag "wisecondorx/convert" + + test("sarscov2 - npz, reference, []") { + + // Stub because the reference is too large + options "-stub" + + setup { + run("WISECONDORX_CONVERT") { + script "../../convert/main.nf" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam_bai'], checkIfExists: true) + ] + input[1] = [[], []] + input[2] = [[], []] + """ + } + } + } + + when { + process { + """ + input[0] = WISECONDORX_CONVERT.out.npz + input[1] = [ + [ id:'reference' ], + file("reference.npz") + ] + input[2] = [[], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + process.out.aberrations_bed.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.bins_bed.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.segments_bed.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.chr_statistics.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.chr_plots.collect { it.collect { it instanceof Map ? it : it.collect { file(it).name } }}, + process.out.genome_plot.collect { it.collect { it instanceof Map ? it : file(it).name }} + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/wisecondorx/predict/tests/main.nf.test.snap b/modules/nf-core/wisecondorx/predict/tests/main.nf.test.snap new file mode 100644 index 00000000..59e9a214 --- /dev/null +++ b/modules/nf-core/wisecondorx/predict/tests/main.nf.test.snap @@ -0,0 +1,65 @@ +{ + "sarscov2 - npz, reference, []": { + "content": [ + [ + "versions.yml:md5,7760ef13f826776ae67780d937c82729" + ], + [ + [ + { + "id": "test" + }, + "test_aberrations.bed" + ] + ], + [ + [ + { + "id": "test" + }, + "test_bins.bed" + ] + ], + [ + [ + { + "id": "test" + }, + "test_segments.bed" + ] + ], + [ + [ + { + "id": "test" + }, + "test_chr_statistics.txt" + ] + ], + [ + [ + { + "id": "test" + }, + [ + "chr1.png", + "chr22.png" + ] + ] + ], + [ + [ + { + "id": "test" + }, + "genome_wide.png" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-25T10:31:51.830934617" + } +} \ No newline at end of file diff --git a/modules/nf-core/wisecondorx/predict/tests/tags.yml b/modules/nf-core/wisecondorx/predict/tests/tags.yml new file mode 100644 index 00000000..e65cbf96 --- /dev/null +++ b/modules/nf-core/wisecondorx/predict/tests/tags.yml @@ -0,0 +1,2 @@ +wisecondorx/predict: + - "modules/nf-core/wisecondorx/predict/**" diff --git a/nextflow.config b/nextflow.config index 77c91beb..4d789742 100644 --- a/nextflow.config +++ b/nextflow.config @@ -37,14 +37,12 @@ params { // AnnotSV options annotsv_candidate_genes = null annotsv_gene_transcripts = null - annotsv_file_name = "annotsv_annotated" // VEP options vep_assembly = "GRCh38" - vep_cache_version = 108 - vep_version = 109.3 + vep_cache_version = 112 + vep_version = 112.0 species = "homo_sapiens" - vep_phenotypes = false // VCFanno options vcfanno_toml = null @@ -281,7 +279,7 @@ manifest { description = 'A bioinformatics best-practice analysis pipeline for calling structural variants (SVs), copy number variants (CNVs) and repeat region expansions (RREs) from short DNA reads' mainScript = 'main.nf' nextflowVersion = '!>=23.10.0' - version = '0.1.0' + version = '0.2.0' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index 41ee6c4e..a7878c8b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -73,12 +73,6 @@ "pattern": "^\\S+\\.fai$", "mimetype": "text/plain" }, - "bwa": { - "type": "string", - "description": "Path to the BWA index folder", - "exists": true, - "format": "path" - }, "expansionhunter_catalog": { "type": "string", "description": "Path to the expansionhunter catalog", @@ -277,12 +271,6 @@ "fa_icon": "fas fa-file-upload", "hidden": true }, - "monochromeLogs": { - "type": "boolean", - "description": "Do not use coloured log outputs.", - "fa_icon": "fas fa-palette", - "hidden": true - }, "hook_url": { "type": "string", "description": "Incoming hook URL for messaging service", @@ -316,27 +304,6 @@ "default": true, "fa_icon": "fas fa-check-square", "hidden": true - }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." } } }, @@ -349,7 +316,8 @@ "callers": { "type": "string", "default": "manta,smoove,delly,expansionhunter,wisecondorx", - "description": "A comma-seperated list of callers to use. Can be one or more these: smoove|delly|manta|gridss|expansionhunter. At the moment Gridss runs very slowly compared to all other tools so it's only advised to use it when it's needed." + "description": "A comma-seperated list of callers to use. Can be one or more these: smoove/delly/manta/expansionhunter/qdnaseq/wisecondorx.", + "help_text": "Following keywords can also be used as shortcuts to certain callers: \n- all: Use all callers\n- sv: Use all SV callers\n- cnv: Use all CNV callers\n- rre: Use all RRE callers" }, "output_callers": { "type": "boolean", @@ -469,26 +437,6 @@ "type": "string", "default": "homo_sapiens", "description": "The species used for the analysis. Should be all lowercase and spaces should be underscorses." - }, - "vep_phenotypes": { - "type": "boolean", - "description": "Use the Phenotypes VEP plugin", - "help_text": "This requires `--phenotypes` and `--phenotypes_tbi`. " - }, - "phenotypes": { - "type": "string", - "description": "Path to the phenotypes GFF file", - "exists": true, - "format": "file-path", - "pattern": "^\\S+\\.gff$", - "mimetype": "text/plain" - }, - "phenotypes_tbi": { - "type": "string", - "description": "Path to the phenotypes GFF index file", - "exists": true, - "format": "file-path", - "mimetype": "application/octet-stream" } } }, @@ -518,12 +466,6 @@ "exists": true, "format": "file-path", "mimetype": "text/plain" - }, - "annotsv_file_name": { - "type": "string", - "default": "annotsv_annotated", - "hidden": true, - "description": "The default name of the AnnotSV VCFs. This should not be changed unless absolutely necessary." } } }, diff --git a/subworkflows/local/bam_cnv_calling/main.nf b/subworkflows/local/bam_cnv_calling/main.nf index b37e386e..b4f8fb2c 100644 --- a/subworkflows/local/bam_cnv_calling/main.nf +++ b/subworkflows/local/bam_cnv_calling/main.nf @@ -19,11 +19,11 @@ workflow BAM_CNV_CALLING { ch_qdnaseq_female // channel: [mandatory] [ meta, qdnaseq_reference ] => The female reference for qDNAseq ch_wisecondorx_reference // channel: [mandatory] [ meta, wisecondorx_reference ] => The reference for WisecondorX ch_blacklist // channel: [optional] [ meta, bed ] => The blacklist regions to be excluded from the Wisecondorx analysis + ch_bedgovcf_configs // channel: [mandatory] [ configs ] => A list of bedgovcf configs + val_callers // value: [mandatory] => List of all CNV callers to use main: - val_callers = params.callers.tokenize(",").intersect(GlobalVariables.cnvCallers) - ch_versions = Channel.empty() ch_reports = Channel.empty() ch_called_vcfs = Channel.empty() @@ -34,7 +34,8 @@ workflow BAM_CNV_CALLING { ch_fasta, ch_fai, ch_qdnaseq_male, - ch_qdnaseq_female + ch_qdnaseq_female, + ch_bedgovcf_configs ) ch_versions = ch_versions.mix(BAM_VARIANT_CALLING_QDNASEQ.out.versions) ch_called_vcfs = ch_called_vcfs.mix(BAM_VARIANT_CALLING_QDNASEQ.out.vcf) @@ -46,7 +47,8 @@ workflow BAM_CNV_CALLING { ch_fasta, ch_fai, ch_wisecondorx_reference, - ch_blacklist + ch_blacklist, + ch_bedgovcf_configs ) ch_versions = ch_versions.mix(BAM_VARIANT_CALLING_WISECONDORX.out.versions) ch_called_vcfs = ch_called_vcfs.mix(BAM_VARIANT_CALLING_WISECONDORX.out.vcf) diff --git a/subworkflows/local/bam_sv_calling/main.nf b/subworkflows/local/bam_sv_calling/main.nf index debcf1f3..471f4b29 100644 --- a/subworkflows/local/bam_sv_calling/main.nf +++ b/subworkflows/local/bam_sv_calling/main.nf @@ -12,16 +12,15 @@ include { VCF_MERGE_CALLERS_JASMINE } from '../vcf_m workflow BAM_SV_CALLING { take: - ch_crams // channel: [mandatory] [ meta, cram, crai, bed ] => The aligned CRAMs per sample with the regions they should be called on - ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file - ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file - ch_bwa_index // channel: [optional] [ meta, index ] => The BWA MEM index - ch_manta_config // channel: [optional] [ config ] => The config to pass to Manta + ch_crams // channel: [mandatory] [ meta, cram, crai, bed ] => The aligned CRAMs per sample with the regions they should be called on + ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file + ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file + ch_manta_config // channel: [optional] [ config ] => The config to pass to Manta + ch_svync_configs // channel: [mandatory] [ configs ] => A list of svync config files + val_callers // value: [mandatory] => List of all SV callers to use main: - val_callers = params.callers.tokenize(",").intersect(GlobalVariables.svCallers) - ch_versions = Channel.empty() ch_reports = Channel.empty() ch_called_vcfs = Channel.empty() @@ -36,6 +35,7 @@ workflow BAM_SV_CALLING { ch_fasta, ch_fai, ch_manta_config, + ch_svync_configs ) ch_called_vcfs = ch_called_vcfs.mix(BAM_VARIANT_CALLING_MANTA.out.manta_vcfs) @@ -50,7 +50,8 @@ workflow BAM_SV_CALLING { BAM_VARIANT_CALLING_DELLY( ch_crams, ch_fasta, - ch_fai + ch_fai, + ch_svync_configs ) ch_called_vcfs = ch_called_vcfs.mix(BAM_VARIANT_CALLING_DELLY.out.delly_vcfs) @@ -65,7 +66,8 @@ workflow BAM_SV_CALLING { BAM_VARIANT_CALLING_SMOOVE( ch_crams, ch_fasta, - ch_fai + ch_fai, + ch_svync_configs ) ch_called_vcfs = ch_called_vcfs.mix(BAM_VARIANT_CALLING_SMOOVE.out.smoove_vcfs) diff --git a/subworkflows/local/bam_variant_calling_delly/main.nf b/subworkflows/local/bam_variant_calling_delly/main.nf index 42cb5f67..e7045483 100644 --- a/subworkflows/local/bam_variant_calling_delly/main.nf +++ b/subworkflows/local/bam_variant_calling_delly/main.nf @@ -8,9 +8,10 @@ include { SVYNC } from '../../../modules/nf-core/svync/main' workflow BAM_VARIANT_CALLING_DELLY { take: - ch_crams // channel: [mandatory] [ meta, cram, crai ] => The aligned CRAMs per sample with the regions they should be called on - ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file - ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file + ch_crams // channel: [mandatory] [ meta, cram, crai ] => The aligned CRAMs per sample with the regions they should be called on + ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file + ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file + ch_svync_configs // channel: [mandatory] [ configs ] => A list of svync config files main: @@ -29,16 +30,23 @@ workflow BAM_VARIANT_CALLING_DELLY { DELLY_CALL( ch_delly_input, - ch_fasta.map{it[1]}, - ch_fai.map{it[1]} + ch_fasta, + ch_fai ) ch_versions = ch_versions.mix(DELLY_CALL.out.versions.first()) + ch_svync_configs + .map { + it.find { it.toString().contains("delly") } + } + .set { ch_delly_svync_config } + DELLY_CALL.out.bcf .join(DELLY_CALL.out.csi, failOnDuplicate:true, failOnMismatch:true) - .map { meta, vcf, tbi -> + .combine(ch_delly_svync_config) + .map { meta, vcf, tbi, config -> new_meta = meta + [caller:"delly"] - [ new_meta, vcf, tbi, file("${projectDir}/assets/svync/delly.yaml") ] + [ new_meta, vcf, tbi, config ] } .dump(tag: 'delly_vcfs', pretty: true) .set { ch_delly_vcfs } diff --git a/subworkflows/local/bam_variant_calling_manta/main.nf b/subworkflows/local/bam_variant_calling_manta/main.nf index 66517d29..ff4e71e0 100644 --- a/subworkflows/local/bam_variant_calling_manta/main.nf +++ b/subworkflows/local/bam_variant_calling_manta/main.nf @@ -14,6 +14,7 @@ workflow BAM_VARIANT_CALLING_MANTA { ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file ch_manta_config // channel: [optional] [ config ] => The config to pass to Manta + ch_svync_configs // channel: [mandatory] [ configs ] => A list of svync configs main: @@ -70,11 +71,18 @@ workflow BAM_VARIANT_CALLING_MANTA { ch_versions = ch_versions.mix(MANTA_CONVERTINVERSION.out.versions.first()) + ch_svync_configs + .map { + it.find { it.toString().contains("manta") } + } + .set { ch_manta_svync_config } + MANTA_CONVERTINVERSION.out.vcf .join(MANTA_CONVERTINVERSION.out.tbi, failOnDuplicate:true, failOnMismatch:true) - .map{ meta, vcf, tbi -> + .combine(ch_manta_svync_config) + .map{ meta, vcf, tbi, config -> new_meta = meta + [caller:"manta"] - [ new_meta, vcf, tbi, file("${projectDir}/assets/svync/manta.yaml") ] + [ new_meta, vcf, tbi, config ] } .dump(tag: 'manta_vcfs', pretty: true) .set { ch_manta_vcfs } diff --git a/subworkflows/local/bam_variant_calling_qdnaseq/main.nf b/subworkflows/local/bam_variant_calling_qdnaseq/main.nf index 06bab3d8..1643d7a3 100644 --- a/subworkflows/local/bam_variant_calling_qdnaseq/main.nf +++ b/subworkflows/local/bam_variant_calling_qdnaseq/main.nf @@ -16,6 +16,7 @@ workflow BAM_VARIANT_CALLING_QDNASEQ { ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file ch_qdnaseq_male // channel: [mandatory] [ meta, qdnaseq_reference ] => The male reference to be used for qDNAseq ch_qdnaseq_female // channel: [mandatory] [ meta, qdnaseq_reference ] => The female reference to be used for qDNAseq + ch_bedgovcf_configs // channel: [mandatory] [ configs ] => A list of bedgovcf configs main: @@ -65,9 +66,16 @@ workflow BAM_VARIANT_CALLING_QDNASEQ { ) ch_versions = ch_versions.mix(GAWK.out.versions.first()) + ch_bedgovcf_configs + .map { + it.find { it.toString().contains("qdnaseq") } + } + .set { ch_qdnaseq_bedgovcf_config } + GAWK.out.output - .map { meta, bed -> - [ meta, bed, file("${projectDir}/assets/bedgovcf/qdnaseq.yaml", checkIfExists:true)] + .combine(ch_qdnaseq_bedgovcf_config) + .map { meta, bed, config -> + [ meta, bed, config ] } .set { ch_bedgovcf_input } diff --git a/subworkflows/local/bam_variant_calling_smoove/main.nf b/subworkflows/local/bam_variant_calling_smoove/main.nf index 13cdc61d..9dede86e 100644 --- a/subworkflows/local/bam_variant_calling_smoove/main.nf +++ b/subworkflows/local/bam_variant_calling_smoove/main.nf @@ -1,17 +1,19 @@ // -// Run Delly +// Run Smoove // -include { SMOOVE_CALL } from '../../../modules/nf-core/smoove/call/main' -include { BCFTOOLS_SORT } from '../../../modules/nf-core/bcftools/sort/main' -include { TABIX_TABIX } from '../../../modules/nf-core/tabix/tabix/main' -include { SVYNC } from '../../../modules/nf-core/svync/main' +include { SMOOVE_CALL } from '../../../modules/nf-core/smoove/call/main' +include { BCFTOOLS_SORT } from '../../../modules/nf-core/bcftools/sort/main' +include { TABIX_TABIX } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_CALLER } from '../../../modules/nf-core/tabix/tabix/main' +include { SVYNC } from '../../../modules/nf-core/svync/main' workflow BAM_VARIANT_CALLING_SMOOVE { take: - ch_crams // channel: [mandatory] [ meta, cram, crai ] => The aligned CRAMs per sample with the regions they should be called on - ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file - ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file + ch_crams // channel: [mandatory] [ meta, cram, crai ] => The aligned CRAMs per sample with the regions they should be called on + ch_fasta // channel: [mandatory] [ meta, fasta ] => The fasta reference file + ch_fai // channel: [mandatory] [ meta, fai ] => The index of the fasta reference file + ch_svync_configs // channel: [mandatory] [ configs ] => A list of svync config files main: @@ -41,11 +43,23 @@ workflow BAM_VARIANT_CALLING_SMOOVE { ) ch_versions = ch_versions.mix(BCFTOOLS_SORT.out.versions.first()) + TABIX_CALLER( + BCFTOOLS_SORT.out.vcf + ) + ch_versions = ch_versions.mix(TABIX_CALLER.out.versions.first()) + + ch_svync_configs + .map { + it.find { it.toString().contains("smoove") } + } + .set { ch_smoove_svync_config } + BCFTOOLS_SORT.out.vcf + .combine(ch_smoove_svync_config) .map( - { meta, vcf -> + { meta, vcf, config -> new_meta = meta + [caller:'smoove'] - [ new_meta, vcf, [], file("${projectDir}/assets/svync/smoove.yaml") ] + [ new_meta, vcf, [], config ] } ) .dump(tag: 'smoove_vcfs', pretty: true) diff --git a/subworkflows/local/bam_variant_calling_wisecondorx/main.nf b/subworkflows/local/bam_variant_calling_wisecondorx/main.nf index 74fa3ea1..61ef91ea 100644 --- a/subworkflows/local/bam_variant_calling_wisecondorx/main.nf +++ b/subworkflows/local/bam_variant_calling_wisecondorx/main.nf @@ -6,11 +6,12 @@ include { TABIX_TABIX } from '../../../modules/nf-core/tabix/tabix/main' workflow BAM_VARIANT_CALLING_WISECONDORX { take: - ch_crams // channel: [ val(meta), path(cram), path(crai) ] - ch_fasta // channel: [ val(meta2), path(fasta) ] - ch_fai // channel: [ val(meta3), path(fai) ] - ch_ref // channel: [ val(meta4), path(reference) ] - ch_blacklist // channel: [ val(meta5), path(blacklist) ] + ch_crams // channel: [ val(meta), path(cram), path(crai) ] + ch_fasta // channel: [ val(meta2), path(fasta) ] + ch_fai // channel: [ val(meta3), path(fai) ] + ch_ref // channel: [ val(meta4), path(reference) ] + ch_blacklist // channel: [ val(meta5), path(blacklist) ] + ch_bedgovcf_configs // channel: [mandatory] [ configs ] => A list of bedgovcf configs main: @@ -37,9 +38,16 @@ workflow BAM_VARIANT_CALLING_WISECONDORX { ) ch_versions = ch_versions.mix(WISECONDORX_PREDICT.out.versions.first()) + ch_bedgovcf_configs + .map { + it.find { it.toString().contains("wisecondorx") } + } + .set { ch_wisecondorx_bedgovcf_config } + WISECONDORX_PREDICT.out.aberrations_bed - .map { meta, bed -> - [ meta, bed, file("${projectDir}/assets/bedgovcf/wisecondorx.yaml", checkIfExists:true)] + .combine(ch_wisecondorx_bedgovcf_config) + .map { meta, bed, config -> + [ meta, bed, config] } .set { ch_bedgovcf_input } diff --git a/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf b/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf index 2a087c45..320f4557 100644 --- a/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf +++ b/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf @@ -30,6 +30,12 @@ workflow VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO { ch_vcfanno_lua // channel: [optional] [ path(lua) ] => The lua script to influence VCFanno val_vcfanno_resources // list: [optional] [ path(file1, file2, file3...) ] => The extra VCFanno files val_variant_types // list: [mandatory] => The variant types + genome // string: [mandatory] => The genome used by the variant callers + species // string: [mandatory] => The species used by VEP + vep_cache_version // integer: [mandatory] => The VEP cache version to use + filter // string: [optional] => A filter pattern to use after annotating + vcfanno_toml // file: [optional] => A vcfanno TOML config + default_vcfanno_tomls // list: [mandatory] => A list of default vcfanno configs to be concatenated with the input TOML main: @@ -126,9 +132,9 @@ workflow VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO { ENSEMBLVEP_VEP( ch_vcfs, - params.genome, - params.species, - params.vep_cache_version, + genome, + species, + vep_cache_version, ch_vep_cache, ch_fasta, ch_vep_extra_files @@ -152,7 +158,7 @@ workflow VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO { ) .set { ch_vcfanno_input } - Channel.fromList(create_vcfanno_toml(val_vcfanno_resources)) + Channel.fromList(create_vcfanno_toml(val_vcfanno_resources, vcfanno_toml, default_vcfanno_tomls)) .collectFile(name:"vcfanno.toml", newLine:true) .collect() .set { ch_vcfanno_toml } @@ -165,7 +171,7 @@ workflow VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO { ) ch_versions = ch_versions.mix(VCFANNO.out.versions) - if(!params.annotations_filter) { + if(!filter) { TABIX_ANNOTATED( VCFANNO.out.vcf ) @@ -175,7 +181,7 @@ workflow VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO { .set { ch_annotated_vcfs } } - if(params.annotations_filter) { + if(filter) { BCFTOOLS_FILTER_COMMON( VCFANNO.out.vcf ) @@ -196,21 +202,21 @@ workflow VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO { versions = ch_versions } -def create_vcfanno_toml(vcfanno_resources) { - def params_toml_files = params.vcfanno_toml ? parse_toml(params.vcfanno_toml) : [postannotation:[]] - def assets_toml_files = parse_toml("${projectDir}/assets/vcfanno/*.toml") +def create_vcfanno_toml(vcfanno_resources, input_vcfanno_toml, List vcfanno_defaults) { + def vcfanno_toml = input_vcfanno_toml ? parse_toml(input_vcfanno_toml) : [:] + def default_tomls = parse_toml(vcfanno_defaults) def resources = vcfanno_resources.collect { it.fileName.toString() } - resources.add("${params.annotsv_file_name}.vcf.gz" as String) + resources.add("annotsv_annotated.vcf.gz" as String) def output = [] for (file_name in resources) { - if (params_toml_files.containsKey(file_name)){ - output.add(params_toml_files[file_name]) + if (vcfanno_toml.containsKey(file_name)){ + output.add(vcfanno_toml[file_name]) } - else if (assets_toml_files.containsKey(file_name)){ - output.add(assets_toml_files[file_name]) + else if (default_tomls.containsKey(file_name)){ + output.add(default_tomls[file_name]) } } - postannotation = params_toml_files.postannotation != [] ? params_toml_files.postannotation : assets_toml_files.postannotation + postannotation = vcfanno_toml.postannotation != [] ? vcfanno_toml.postannotation : default_tomls.postannotation if (postannotation != []){ output.add(postannotation) } @@ -220,8 +226,7 @@ def create_vcfanno_toml(vcfanno_resources) { def parse_toml(tomls) { def output = [:] output.postannotation = [] - tomls_files = file(tomls, checkIfExists:true) - toml_list = tomls_files instanceof LinkedList ? tomls_files : [tomls_files] + toml_list = tomls instanceof List ? tomls : [tomls] for (toml in toml_list) { def info = "" def file = "" diff --git a/subworkflows/local/vcf_merge_callers_jasmine/main.nf b/subworkflows/local/vcf_merge_callers_jasmine/main.nf index 1f6d8466..37038704 100644 --- a/subworkflows/local/vcf_merge_callers_jasmine/main.nf +++ b/subworkflows/local/vcf_merge_callers_jasmine/main.nf @@ -36,8 +36,8 @@ workflow VCF_MERGE_CALLERS_JASMINE { JASMINESV( ch_jasmine_input, - ch_fasta.map{it[1]}, - ch_fai.map{it[1]}, + ch_fasta, + ch_fai, [] ) ch_versions = ch_versions.mix(JASMINESV.out.versions.first()) diff --git a/subworkflows/local/vcf_merge_family_jasmine/main.nf b/subworkflows/local/vcf_merge_family_jasmine/main.nf index 894abc0b..e429c00c 100644 --- a/subworkflows/local/vcf_merge_family_jasmine/main.nf +++ b/subworkflows/local/vcf_merge_family_jasmine/main.nf @@ -47,8 +47,8 @@ workflow VCF_MERGE_FAMILY_JASMINE { JASMINESV( ch_jasmine_input, - ch_fasta.map{it[1]}, - ch_fai.map{it[1]}, + ch_fasta, + ch_fai, [] ) ch_versions = ch_versions.mix(JASMINESV.out.versions.first()) diff --git a/tests/nextflow.config b/tests/nextflow.config index 1187f6bd..85a76ae6 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -55,6 +55,10 @@ params { repeats_vcf2 = "https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/vcf/SVcontrol/repeats/PosCon2.repeats.vcf.gz" repeats_tbi2 = "https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/vcf/SVcontrol/repeats/PosCon2.repeats.vcf.gz.tbi" + svync_configs = "${projectDir}/assets/svync" + bedgovcf_configs = "${projectDir}/assets/bedgovcf" + vcfanno_tomls = "${projectDir}/assets/vcfanno" + igenomes_ignore = true genomes_ignore = true } diff --git a/tests/pipeline/all_types/all.nf.test b/tests/pipeline/all_types/all.nf.test index 477c637b..26a5b1b5 100644 --- a/tests/pipeline/all_types/all.nf.test +++ b/tests/pipeline/all_types/all.nf.test @@ -13,7 +13,7 @@ nextflow_pipeline { when { params { outdir = "${outputDir}" - callers = "manta,smoove,delly,expansionhunter,qdnaseq,wisecondorx" //,gridss + callers = "all" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' @@ -28,15 +28,9 @@ nextflow_pipeline { path("$outputDir") .list() - .findAll { - !it.toString().endsWith("pipeline_info") - } - .collect { - it.list().collect { it.toString().split("/")[-1] } - }, - path("$outputDir").list().collect{ - it.toString().split("/")[-1] - } + .findAll { !it.toString().endsWith("pipeline_info") } + .collect { getRecursiveFileNames(it, "${outputDir}") } + .flatten() ).match("all")} ) } @@ -48,7 +42,7 @@ nextflow_pipeline { when { params { outdir = "${outputDir}" - callers = "manta,smoove,delly,expansionhunter,qdnaseq,wisecondorx" //,gridss + callers = "all" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' @@ -64,19 +58,50 @@ nextflow_pipeline { path("$outputDir") .list() - .findAll { - !it.toString().endsWith("pipeline_info") - } - .collect { - it.list().collect { it.toString().split("/")[-1] } - }, - path("$outputDir").list().collect{ - it.toString().split("/")[-1] - } + .findAll { !it.toString().endsWith("pipeline_info") } + .collect { getRecursiveFileNames(it, "${outputDir}") } + .flatten() ).match("concat")} ) } } + test("output callers") { + + when { + params { + outdir = "${outputDir}" + callers = "all" + max_cpus = 2 + max_memory = '6.GB' + max_time = '6.h' + output_callers = true + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.stdout, + + path("$outputDir") + .list() + .findAll { !it.toString().endsWith("pipeline_info") } + .collect { getRecursiveFileNames(it, "${outputDir}") } + .flatten() + ).match("output callers")} + ) + } + + } + +} + +def getRecursiveFileNames(fileOrDir, outputDir) { + if(file(fileOrDir.toString()).isDirectory()) { + return fileOrDir.list().collect { getRecursiveFileNames(it, outputDir) } + } + return fileOrDir.toString().replace("${outputDir}/", "") } diff --git a/tests/pipeline/all_types/all.nf.test.snap b/tests/pipeline/all_types/all.nf.test.snap index 03da173b..4396f4df 100644 --- a/tests/pipeline/all_types/all.nf.test.snap +++ b/tests/pipeline/all_types/all.nf.test.snap @@ -5,106 +5,87 @@ ], [ - [ - "PosCon1.cnv.vcf.gz", - "PosCon1.cnv.vcf.gz.tbi", - "PosCon1.expansionhunter.vcf.gz", - "PosCon1.expansionhunter.vcf.gz.tbi", - "PosCon1.qdnaseq.abberations.bed", - "PosCon1.qdnaseq.bed", - "PosCon1.qdnaseq.cna", - "PosCon1.qdnaseq_segments.txt", - "PosCon1.sv.vcf.gz", - "PosCon1.sv.vcf.gz.tbi", - "PosCon1.wisecondorx_aberrations.bed", - "PosCon1.wisecondorx_bins.bed", - "PosCon1.wisecondorx_chr_statistics.txt", - "PosCon1.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "PosCon2.cnv.vcf.gz", - "PosCon2.cnv.vcf.gz.tbi", - "PosCon2.expansionhunter.vcf.gz", - "PosCon2.expansionhunter.vcf.gz.tbi", - "PosCon2.qdnaseq.abberations.bed", - "PosCon2.qdnaseq.bed", - "PosCon2.qdnaseq.cna", - "PosCon2.qdnaseq_segments.txt", - "PosCon2.sv.vcf.gz", - "PosCon2.sv.vcf.gz.tbi", - "PosCon2.wisecondorx_aberrations.bed", - "PosCon2.wisecondorx_bins.bed", - "PosCon2.wisecondorx_chr_statistics.txt", - "PosCon2.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "PosCon3.cnv.vcf.gz", - "PosCon3.cnv.vcf.gz.tbi", - "PosCon3.expansionhunter.vcf.gz", - "PosCon3.expansionhunter.vcf.gz.tbi", - "PosCon3.qdnaseq.abberations.bed", - "PosCon3.qdnaseq.bed", - "PosCon3.qdnaseq.cna", - "PosCon3.qdnaseq_segments.txt", - "PosCon3.sv.vcf.gz", - "PosCon3.sv.vcf.gz.tbi", - "PosCon3.wisecondorx_aberrations.bed", - "PosCon3.wisecondorx_bins.bed", - "PosCon3.wisecondorx_chr_statistics.txt", - "PosCon3.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "PosCon4.cnv.vcf.gz", - "PosCon4.cnv.vcf.gz.tbi", - "PosCon4.expansionhunter.vcf.gz", - "PosCon4.expansionhunter.vcf.gz.tbi", - "PosCon4.qdnaseq.abberations.bed", - "PosCon4.qdnaseq.bed", - "PosCon4.qdnaseq.cna", - "PosCon4.qdnaseq_segments.txt", - "PosCon4.sv.vcf.gz", - "PosCon4.sv.vcf.gz.tbi", - "PosCon4.wisecondorx_aberrations.bed", - "PosCon4.wisecondorx_bins.bed", - "PosCon4.wisecondorx_chr_statistics.txt", - "PosCon4.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "multiqc_data", - "multiqc_plots", - "multiqc_report.html" - ] - ], - [ - "PosCon1", - "PosCon2", - "PosCon3", - "PosCon4", - "multiqc", - "pipeline_info" + "PosCon1/PosCon1.cnv.vcf.gz", + "PosCon1/PosCon1.cnv.vcf.gz.tbi", + "PosCon1/PosCon1.expansionhunter.vcf.gz", + "PosCon1/PosCon1.expansionhunter.vcf.gz.tbi", + "PosCon1/PosCon1.qdnaseq.abberations.bed", + "PosCon1/PosCon1.qdnaseq.bed", + "PosCon1/PosCon1.qdnaseq.cna", + "PosCon1/PosCon1.qdnaseq_segments.txt", + "PosCon1/PosCon1.sv.vcf.gz", + "PosCon1/PosCon1.sv.vcf.gz.tbi", + "PosCon1/PosCon1.wisecondorx_aberrations.bed", + "PosCon1/PosCon1.wisecondorx_bins.bed", + "PosCon1/PosCon1.wisecondorx_chr_statistics.txt", + "PosCon1/PosCon1.wisecondorx_segments.bed", + "PosCon1/chr1.png", + "PosCon1/chr22.png", + "PosCon1/genome_wide.png", + "PosCon1/statistics.out", + "PosCon2/PosCon2.cnv.vcf.gz", + "PosCon2/PosCon2.cnv.vcf.gz.tbi", + "PosCon2/PosCon2.expansionhunter.vcf.gz", + "PosCon2/PosCon2.expansionhunter.vcf.gz.tbi", + "PosCon2/PosCon2.qdnaseq.abberations.bed", + "PosCon2/PosCon2.qdnaseq.bed", + "PosCon2/PosCon2.qdnaseq.cna", + "PosCon2/PosCon2.qdnaseq_segments.txt", + "PosCon2/PosCon2.sv.vcf.gz", + "PosCon2/PosCon2.sv.vcf.gz.tbi", + "PosCon2/PosCon2.wisecondorx_aberrations.bed", + "PosCon2/PosCon2.wisecondorx_bins.bed", + "PosCon2/PosCon2.wisecondorx_chr_statistics.txt", + "PosCon2/PosCon2.wisecondorx_segments.bed", + "PosCon2/chr1.png", + "PosCon2/chr22.png", + "PosCon2/genome_wide.png", + "PosCon2/statistics.out", + "PosCon3/PosCon3.cnv.vcf.gz", + "PosCon3/PosCon3.cnv.vcf.gz.tbi", + "PosCon3/PosCon3.expansionhunter.vcf.gz", + "PosCon3/PosCon3.expansionhunter.vcf.gz.tbi", + "PosCon3/PosCon3.qdnaseq.abberations.bed", + "PosCon3/PosCon3.qdnaseq.bed", + "PosCon3/PosCon3.qdnaseq.cna", + "PosCon3/PosCon3.qdnaseq_segments.txt", + "PosCon3/PosCon3.sv.vcf.gz", + "PosCon3/PosCon3.sv.vcf.gz.tbi", + "PosCon3/PosCon3.wisecondorx_aberrations.bed", + "PosCon3/PosCon3.wisecondorx_bins.bed", + "PosCon3/PosCon3.wisecondorx_chr_statistics.txt", + "PosCon3/PosCon3.wisecondorx_segments.bed", + "PosCon3/chr1.png", + "PosCon3/chr22.png", + "PosCon3/genome_wide.png", + "PosCon3/statistics.out", + "PosCon4/PosCon4.cnv.vcf.gz", + "PosCon4/PosCon4.cnv.vcf.gz.tbi", + "PosCon4/PosCon4.expansionhunter.vcf.gz", + "PosCon4/PosCon4.expansionhunter.vcf.gz.tbi", + "PosCon4/PosCon4.qdnaseq.abberations.bed", + "PosCon4/PosCon4.qdnaseq.bed", + "PosCon4/PosCon4.qdnaseq.cna", + "PosCon4/PosCon4.qdnaseq_segments.txt", + "PosCon4/PosCon4.sv.vcf.gz", + "PosCon4/PosCon4.sv.vcf.gz.tbi", + "PosCon4/PosCon4.wisecondorx_aberrations.bed", + "PosCon4/PosCon4.wisecondorx_bins.bed", + "PosCon4/PosCon4.wisecondorx_chr_statistics.txt", + "PosCon4/PosCon4.wisecondorx_segments.bed", + "PosCon4/chr1.png", + "PosCon4/chr22.png", + "PosCon4/genome_wide.png", + "PosCon4/statistics.out", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html" ] ], "meta": { "nf-test": "0.8.4", "nextflow": "24.02.0" }, - "timestamp": "2024-03-29T09:29:12.284680489" + "timestamp": "2024-04-29T11:31:57.107814635" }, "concat": { "content": [ @@ -112,89 +93,210 @@ ], [ - [ - "PosCon1.qdnaseq.abberations.bed", - "PosCon1.qdnaseq.bed", - "PosCon1.qdnaseq.cna", - "PosCon1.qdnaseq_segments.txt", - "PosCon1.vcf.gz", - "PosCon1.vcf.gz.tbi", - "PosCon1.wisecondorx_aberrations.bed", - "PosCon1.wisecondorx_bins.bed", - "PosCon1.wisecondorx_chr_statistics.txt", - "PosCon1.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "PosCon2.qdnaseq.abberations.bed", - "PosCon2.qdnaseq.bed", - "PosCon2.qdnaseq.cna", - "PosCon2.qdnaseq_segments.txt", - "PosCon2.vcf.gz", - "PosCon2.vcf.gz.tbi", - "PosCon2.wisecondorx_aberrations.bed", - "PosCon2.wisecondorx_bins.bed", - "PosCon2.wisecondorx_chr_statistics.txt", - "PosCon2.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "PosCon3.qdnaseq.abberations.bed", - "PosCon3.qdnaseq.bed", - "PosCon3.qdnaseq.cna", - "PosCon3.qdnaseq_segments.txt", - "PosCon3.vcf.gz", - "PosCon3.vcf.gz.tbi", - "PosCon3.wisecondorx_aberrations.bed", - "PosCon3.wisecondorx_bins.bed", - "PosCon3.wisecondorx_chr_statistics.txt", - "PosCon3.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "PosCon4.qdnaseq.abberations.bed", - "PosCon4.qdnaseq.bed", - "PosCon4.qdnaseq.cna", - "PosCon4.qdnaseq_segments.txt", - "PosCon4.vcf.gz", - "PosCon4.vcf.gz.tbi", - "PosCon4.wisecondorx_aberrations.bed", - "PosCon4.wisecondorx_bins.bed", - "PosCon4.wisecondorx_chr_statistics.txt", - "PosCon4.wisecondorx_segments.bed", - "chr1.png", - "chr22.png", - "genome_wide.png", - "statistics.out" - ], - [ - "multiqc_data", - "multiqc_plots", - "multiqc_report.html" - ] + "PosCon1/PosCon1.qdnaseq.abberations.bed", + "PosCon1/PosCon1.qdnaseq.bed", + "PosCon1/PosCon1.qdnaseq.cna", + "PosCon1/PosCon1.qdnaseq_segments.txt", + "PosCon1/PosCon1.vcf.gz", + "PosCon1/PosCon1.vcf.gz.tbi", + "PosCon1/PosCon1.wisecondorx_aberrations.bed", + "PosCon1/PosCon1.wisecondorx_bins.bed", + "PosCon1/PosCon1.wisecondorx_chr_statistics.txt", + "PosCon1/PosCon1.wisecondorx_segments.bed", + "PosCon1/chr1.png", + "PosCon1/chr22.png", + "PosCon1/genome_wide.png", + "PosCon1/statistics.out", + "PosCon2/PosCon2.qdnaseq.abberations.bed", + "PosCon2/PosCon2.qdnaseq.bed", + "PosCon2/PosCon2.qdnaseq.cna", + "PosCon2/PosCon2.qdnaseq_segments.txt", + "PosCon2/PosCon2.vcf.gz", + "PosCon2/PosCon2.vcf.gz.tbi", + "PosCon2/PosCon2.wisecondorx_aberrations.bed", + "PosCon2/PosCon2.wisecondorx_bins.bed", + "PosCon2/PosCon2.wisecondorx_chr_statistics.txt", + "PosCon2/PosCon2.wisecondorx_segments.bed", + "PosCon2/chr1.png", + "PosCon2/chr22.png", + "PosCon2/genome_wide.png", + "PosCon2/statistics.out", + "PosCon3/PosCon3.qdnaseq.abberations.bed", + "PosCon3/PosCon3.qdnaseq.bed", + "PosCon3/PosCon3.qdnaseq.cna", + "PosCon3/PosCon3.qdnaseq_segments.txt", + "PosCon3/PosCon3.vcf.gz", + "PosCon3/PosCon3.vcf.gz.tbi", + "PosCon3/PosCon3.wisecondorx_aberrations.bed", + "PosCon3/PosCon3.wisecondorx_bins.bed", + "PosCon3/PosCon3.wisecondorx_chr_statistics.txt", + "PosCon3/PosCon3.wisecondorx_segments.bed", + "PosCon3/chr1.png", + "PosCon3/chr22.png", + "PosCon3/genome_wide.png", + "PosCon3/statistics.out", + "PosCon4/PosCon4.qdnaseq.abberations.bed", + "PosCon4/PosCon4.qdnaseq.bed", + "PosCon4/PosCon4.qdnaseq.cna", + "PosCon4/PosCon4.qdnaseq_segments.txt", + "PosCon4/PosCon4.vcf.gz", + "PosCon4/PosCon4.vcf.gz.tbi", + "PosCon4/PosCon4.wisecondorx_aberrations.bed", + "PosCon4/PosCon4.wisecondorx_bins.bed", + "PosCon4/PosCon4.wisecondorx_chr_statistics.txt", + "PosCon4/PosCon4.wisecondorx_segments.bed", + "PosCon4/chr1.png", + "PosCon4/chr22.png", + "PosCon4/genome_wide.png", + "PosCon4/statistics.out", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-04-29T11:33:35.756593527" + }, + "output callers": { + "content": [ + [ + ], [ - "PosCon1", - "PosCon2", - "PosCon3", - "PosCon4", - "multiqc", - "pipeline_info" + "PosCon1/PosCon1.cnv.vcf.gz", + "PosCon1/PosCon1.cnv.vcf.gz.tbi", + "PosCon1/PosCon1.expansionhunter.vcf.gz", + "PosCon1/PosCon1.expansionhunter.vcf.gz.tbi", + "PosCon1/PosCon1.qdnaseq.abberations.bed", + "PosCon1/PosCon1.sv.vcf.gz", + "PosCon1/PosCon1.sv.vcf.gz.tbi", + "PosCon1/delly/PosCon1.delly.vcf.gz", + "PosCon1/delly/PosCon1.delly.vcf.gz.tbi", + "PosCon1/expansionhunter/PosCon1.expansionhunter.vcf.gz", + "PosCon1/expansionhunter/PosCon1.expansionhunter.vcf.gz.tbi", + "PosCon1/manta/PosCon1.manta.vcf.gz", + "PosCon1/manta/PosCon1.manta.vcf.gz.tbi", + "PosCon1/qdnaseq/PosCon1.qdnaseq.abberations.bed", + "PosCon1/qdnaseq/PosCon1.qdnaseq.bed", + "PosCon1/qdnaseq/PosCon1.qdnaseq.cna", + "PosCon1/qdnaseq/PosCon1.qdnaseq.vcf.gz", + "PosCon1/qdnaseq/PosCon1.qdnaseq.vcf.gz.tbi", + "PosCon1/qdnaseq/PosCon1.qdnaseq_segments.txt", + "PosCon1/qdnaseq/statistics.out", + "PosCon1/smoove/PosCon1.smoove.vcf.gz", + "PosCon1/smoove/PosCon1.smoove.vcf.gz.tbi", + "PosCon1/wisecondorx/PosCon1.wisecondorx.vcf.gz", + "PosCon1/wisecondorx/PosCon1.wisecondorx.vcf.gz.tbi", + "PosCon1/wisecondorx/PosCon1.wisecondorx_aberrations.bed", + "PosCon1/wisecondorx/PosCon1.wisecondorx_bins.bed", + "PosCon1/wisecondorx/PosCon1.wisecondorx_chr_statistics.txt", + "PosCon1/wisecondorx/PosCon1.wisecondorx_segments.bed", + "PosCon1/wisecondorx/chr1.png", + "PosCon1/wisecondorx/chr22.png", + "PosCon1/wisecondorx/genome_wide.png", + "PosCon2/PosCon2.cnv.vcf.gz", + "PosCon2/PosCon2.cnv.vcf.gz.tbi", + "PosCon2/PosCon2.expansionhunter.vcf.gz", + "PosCon2/PosCon2.expansionhunter.vcf.gz.tbi", + "PosCon2/PosCon2.qdnaseq.abberations.bed", + "PosCon2/PosCon2.sv.vcf.gz", + "PosCon2/PosCon2.sv.vcf.gz.tbi", + "PosCon2/delly/PosCon2.delly.vcf.gz", + "PosCon2/delly/PosCon2.delly.vcf.gz.tbi", + "PosCon2/expansionhunter/PosCon2.expansionhunter.vcf.gz", + "PosCon2/expansionhunter/PosCon2.expansionhunter.vcf.gz.tbi", + "PosCon2/manta/PosCon2.manta.vcf.gz", + "PosCon2/manta/PosCon2.manta.vcf.gz.tbi", + "PosCon2/qdnaseq/PosCon2.qdnaseq.abberations.bed", + "PosCon2/qdnaseq/PosCon2.qdnaseq.bed", + "PosCon2/qdnaseq/PosCon2.qdnaseq.cna", + "PosCon2/qdnaseq/PosCon2.qdnaseq.vcf.gz", + "PosCon2/qdnaseq/PosCon2.qdnaseq.vcf.gz.tbi", + "PosCon2/qdnaseq/PosCon2.qdnaseq_segments.txt", + "PosCon2/qdnaseq/statistics.out", + "PosCon2/smoove/PosCon2.smoove.vcf.gz", + "PosCon2/smoove/PosCon2.smoove.vcf.gz.tbi", + "PosCon2/wisecondorx/PosCon2.wisecondorx.vcf.gz", + "PosCon2/wisecondorx/PosCon2.wisecondorx.vcf.gz.tbi", + "PosCon2/wisecondorx/PosCon2.wisecondorx_aberrations.bed", + "PosCon2/wisecondorx/PosCon2.wisecondorx_bins.bed", + "PosCon2/wisecondorx/PosCon2.wisecondorx_chr_statistics.txt", + "PosCon2/wisecondorx/PosCon2.wisecondorx_segments.bed", + "PosCon2/wisecondorx/chr1.png", + "PosCon2/wisecondorx/chr22.png", + "PosCon2/wisecondorx/genome_wide.png", + "PosCon3/PosCon3.cnv.vcf.gz", + "PosCon3/PosCon3.cnv.vcf.gz.tbi", + "PosCon3/PosCon3.expansionhunter.vcf.gz", + "PosCon3/PosCon3.expansionhunter.vcf.gz.tbi", + "PosCon3/PosCon3.qdnaseq.abberations.bed", + "PosCon3/PosCon3.sv.vcf.gz", + "PosCon3/PosCon3.sv.vcf.gz.tbi", + "PosCon3/delly/PosCon3.delly.vcf.gz", + "PosCon3/delly/PosCon3.delly.vcf.gz.tbi", + "PosCon3/expansionhunter/PosCon3.expansionhunter.vcf.gz", + "PosCon3/expansionhunter/PosCon3.expansionhunter.vcf.gz.tbi", + "PosCon3/manta/PosCon3.manta.vcf.gz", + "PosCon3/manta/PosCon3.manta.vcf.gz.tbi", + "PosCon3/qdnaseq/PosCon3.qdnaseq.abberations.bed", + "PosCon3/qdnaseq/PosCon3.qdnaseq.bed", + "PosCon3/qdnaseq/PosCon3.qdnaseq.cna", + "PosCon3/qdnaseq/PosCon3.qdnaseq.vcf.gz", + "PosCon3/qdnaseq/PosCon3.qdnaseq.vcf.gz.tbi", + "PosCon3/qdnaseq/PosCon3.qdnaseq_segments.txt", + "PosCon3/qdnaseq/statistics.out", + "PosCon3/smoove/PosCon3.smoove.vcf.gz", + "PosCon3/smoove/PosCon3.smoove.vcf.gz.tbi", + "PosCon3/wisecondorx/PosCon3.wisecondorx.vcf.gz", + "PosCon3/wisecondorx/PosCon3.wisecondorx.vcf.gz.tbi", + "PosCon3/wisecondorx/PosCon3.wisecondorx_aberrations.bed", + "PosCon3/wisecondorx/PosCon3.wisecondorx_bins.bed", + "PosCon3/wisecondorx/PosCon3.wisecondorx_chr_statistics.txt", + "PosCon3/wisecondorx/PosCon3.wisecondorx_segments.bed", + "PosCon3/wisecondorx/chr1.png", + "PosCon3/wisecondorx/chr22.png", + "PosCon3/wisecondorx/genome_wide.png", + "PosCon4/PosCon4.cnv.vcf.gz", + "PosCon4/PosCon4.cnv.vcf.gz.tbi", + "PosCon4/PosCon4.expansionhunter.vcf.gz", + "PosCon4/PosCon4.expansionhunter.vcf.gz.tbi", + "PosCon4/PosCon4.qdnaseq.abberations.bed", + "PosCon4/PosCon4.sv.vcf.gz", + "PosCon4/PosCon4.sv.vcf.gz.tbi", + "PosCon4/delly/PosCon4.delly.vcf.gz", + "PosCon4/delly/PosCon4.delly.vcf.gz.tbi", + "PosCon4/expansionhunter/PosCon4.expansionhunter.vcf.gz", + "PosCon4/expansionhunter/PosCon4.expansionhunter.vcf.gz.tbi", + "PosCon4/manta/PosCon4.manta.vcf.gz", + "PosCon4/manta/PosCon4.manta.vcf.gz.tbi", + "PosCon4/qdnaseq/PosCon4.qdnaseq.abberations.bed", + "PosCon4/qdnaseq/PosCon4.qdnaseq.bed", + "PosCon4/qdnaseq/PosCon4.qdnaseq.cna", + "PosCon4/qdnaseq/PosCon4.qdnaseq.vcf.gz", + "PosCon4/qdnaseq/PosCon4.qdnaseq.vcf.gz.tbi", + "PosCon4/qdnaseq/PosCon4.qdnaseq_segments.txt", + "PosCon4/qdnaseq/statistics.out", + "PosCon4/smoove/PosCon4.smoove.vcf.gz", + "PosCon4/smoove/PosCon4.smoove.vcf.gz.tbi", + "PosCon4/wisecondorx/PosCon4.wisecondorx.vcf.gz", + "PosCon4/wisecondorx/PosCon4.wisecondorx.vcf.gz.tbi", + "PosCon4/wisecondorx/PosCon4.wisecondorx_aberrations.bed", + "PosCon4/wisecondorx/PosCon4.wisecondorx_bins.bed", + "PosCon4/wisecondorx/PosCon4.wisecondorx_chr_statistics.txt", + "PosCon4/wisecondorx/PosCon4.wisecondorx_segments.bed", + "PosCon4/wisecondorx/chr1.png", + "PosCon4/wisecondorx/chr22.png", + "PosCon4/wisecondorx/genome_wide.png", + "multiqc/multiqc_plots", + "multiqc/multiqc_report.html" ] ], "meta": { "nf-test": "0.8.4", "nextflow": "24.02.0" }, - "timestamp": "2024-03-13T11:26:44.29004361" + "timestamp": "2024-04-29T11:47:12.295054901" } } \ No newline at end of file diff --git a/tests/pipeline/cnv/cnv.nf.test b/tests/pipeline/cnv/cnv.nf.test index 2b84f5f3..45f0c516 100644 --- a/tests/pipeline/cnv/cnv.nf.test +++ b/tests/pipeline/cnv/cnv.nf.test @@ -48,7 +48,7 @@ nextflow_pipeline { when { params { outdir = "${outputDir}" - callers = "qdnaseq,wisecondorx" + callers = "cnv" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' diff --git a/tests/pipeline/families/families.nf.test b/tests/pipeline/families/families.nf.test index 6d2da69b..f3de5b76 100644 --- a/tests/pipeline/families/families.nf.test +++ b/tests/pipeline/families/families.nf.test @@ -14,7 +14,7 @@ nextflow_pipeline { params { outdir = "${outputDir}" input = "${baseDir}/tests/pipeline/families/samplesheet_family3.csv" - callers = "delly,smoove,manta,expansionhunter,qdnaseq,wisecondorx" + callers = "all" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' @@ -49,7 +49,7 @@ nextflow_pipeline { params { outdir = "${outputDir}" input = "${baseDir}/tests/pipeline/families/samplesheet_family3.csv" - callers = "delly,smoove,manta,expansionhunter,qdnaseq,wisecondorx" + callers = "all" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' @@ -85,7 +85,7 @@ nextflow_pipeline { params { outdir = "${outputDir}" input = "${baseDir}/tests/pipeline/families/samplesheet_family2_sample1.csv" - callers = "delly,smoove,manta,expansionhunter,qdnaseq,wisecondorx" + callers = "all" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' @@ -120,7 +120,7 @@ nextflow_pipeline { params { outdir = "${outputDir}" input = "${baseDir}/tests/pipeline/families/samplesheet_family2_sample1.csv" - callers = "delly,smoove,manta,expansionhunter,qdnaseq,wisecondorx" + callers = "all" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' diff --git a/tests/pipeline/sv/sv.nf.test b/tests/pipeline/sv/sv.nf.test index 1e3230ec..3cf95fa7 100644 --- a/tests/pipeline/sv/sv.nf.test +++ b/tests/pipeline/sv/sv.nf.test @@ -48,7 +48,7 @@ nextflow_pipeline { when { params { outdir = "${outputDir}" - callers = "delly,manta,smoove" //,gridss + callers = "sv" max_cpus = 2 max_memory = '6.GB' max_time = '6.h' diff --git a/tests/subworkflows/local/bam_cnv_calling/main.nf.test b/tests/subworkflows/local/bam_cnv_calling/main.nf.test index 2c44ea04..3195ac6b 100644 --- a/tests/subworkflows/local/bam_cnv_calling/main.nf.test +++ b/tests/subworkflows/local/bam_cnv_calling/main.nf.test @@ -9,7 +9,6 @@ nextflow_workflow { tag "bam_cnv_calling" options "-stub" - config "./nextflow.config" test("homo_sapiens - qdnaseq") { @@ -21,21 +20,23 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) input[3] = [[],[]] input[4] = [[],[]] input[5] = [[],[]] input[6] = [[],[]] + input[7] = Channel.fromPath("\${params.bedgovcf_configs}/*.yaml", checkIfExists:true) + input[8] = params.callers.tokenize(",") """ } } @@ -64,21 +65,23 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) input[3] = [[],[]] input[4] = [[],[]] input[5] = [[],[]] input[6] = [[],[]] + input[7] = Channel.fromPath("\${params.bedgovcf_configs}/*.yaml", checkIfExists:true) + input[8] = params.callers.tokenize(",") """ } } @@ -107,21 +110,23 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) input[3] = [[],[]] input[4] = [[],[]] input[5] = [[],[]] input[6] = [[],[]] + input[7] = Channel.fromPath("\${params.bedgovcf_configs}/*.yaml", checkIfExists:true) + input[8] = params.callers.tokenize(",") """ } } diff --git a/tests/subworkflows/local/bam_prepare_samtools/main.nf.test b/tests/subworkflows/local/bam_prepare_samtools/main.nf.test index 72064be2..057d36f8 100644 --- a/tests/subworkflows/local/bam_prepare_samtools/main.nf.test +++ b/tests/subworkflows/local/bam_prepare_samtools/main.nf.test @@ -15,16 +15,16 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + file(params.cram1, checkIfExists: true), [] ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) """ } @@ -50,20 +50,20 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ], [ [id:"test", sample:"test", sex:"male"], - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_cram'], checkIfExists: true), + file(params.cram2, checkIfExists: true), [] ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) """ } @@ -90,20 +90,20 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ], [ [id:"test2", sample:"test2", sex:"male"], - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_sorted_cram'], checkIfExists: true), + file(params.cram2, checkIfExists: true), [] ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) """ } diff --git a/tests/subworkflows/local/bam_prepare_samtools/main.nf.test.snap b/tests/subworkflows/local/bam_prepare_samtools/main.nf.test.snap index 8a35d61a..707994f9 100644 --- a/tests/subworkflows/local/bam_prepare_samtools/main.nf.test.snap +++ b/tests/subworkflows/local/bam_prepare_samtools/main.nf.test.snap @@ -8,14 +8,18 @@ "sample": "test", "sex": "male" }, - "/nf-core/test-datasets/modules/data/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram", - "test.paired_end.sorted.cram.crai:md5,31ffc1b11f53210e4ac0d55092de0652" + "/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/cram/SVcontrol/PosCon1.cram", + "PosCon1.cram.crai:md5,ad1288bcc69e6e11316b933903cf7bcf" ] ], 1, 0 ], - "timestamp": "2023-11-29T16:38:29.584284221" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T15:02:28.210751679" }, "homo sapiens - [[cram, crai], [cram, []]], fasta, fai - One sample": { "content": [ @@ -24,6 +28,10 @@ 2, 0 ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, "timestamp": "2023-11-29T16:38:40.713398061" }, "homo sapiens - [[cram, crai], [cram, []]], fasta, fai - Two samples": { @@ -35,8 +43,8 @@ "sample": "test", "sex": "male" }, - "/nf-core/test-datasets/modules/data/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram", - "/nf-core/test-datasets/modules/data/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai" + "/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/cram/SVcontrol/PosCon1.cram", + "/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/cram/SVcontrol/PosCon1.cram.crai" ], [ { @@ -44,13 +52,17 @@ "sample": "test2", "sex": "male" }, - "/nf-core/test-datasets/modules/data/genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram", - "test2.paired_end.sorted.cram.crai:md5,633a024a94932189bd5fbc84f62ce6ac" + "/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/cram/SVcontrol/PosCon2.cram", + "PosCon2.cram.crai:md5,bdb6e116dfeb217be18e3e44eab33cb6" ] ], 1, 0 ], - "timestamp": "2023-11-29T16:38:49.788373375" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.03.0" + }, + "timestamp": "2024-05-06T15:02:49.440862334" } } \ No newline at end of file diff --git a/tests/subworkflows/local/bam_repeat_estimation_expansionhunter/main.nf.test.snap b/tests/subworkflows/local/bam_repeat_estimation_expansionhunter/main.nf.test.snap index 7eca4911..9ad99d13 100644 --- a/tests/subworkflows/local/bam_repeat_estimation_expansionhunter/main.nf.test.snap +++ b/tests/subworkflows/local/bam_repeat_estimation_expansionhunter/main.nf.test.snap @@ -2,19 +2,19 @@ "homo_sapiens": { "content": [ [ - "chrX\t12000\t.\tT\t.\t.\tLowDepth\tEND=50000;REPREF=9500;RL=38000;RU=CAGG;VARID=CNBP;REPID=CNBP\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t./.:./.:./.:./.:./.:./.:.:0", - "chrX\t12000\t.\tT\t.\t.\tLowDepth\tEND=123456;REPREF=18576;RL=111456;RU=GGCCCC;VARID=C9ORF72;REPID=C9ORF72\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t./.:./.:./.:./.:./.:./.:.:0", - "chrX\t14586\t.\tG\t.\t.\tLowDepth\tEND=35698;REPREF=5278;RL=21112;RU=CAGA;VARID=CNBP_CAGA;REPID=CNBP_CAGA\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t./.:./.:./.:./.:./.:./.:.:0", - "chrX\t15000\t.\tA\t.\t.\tLowDepth\tEND=45826;REPREF=15413;RL=30826;RU=CA;VARID=CNBP_CA;REPID=CNBP_CA\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t./.:./.:./.:./.:./.:./.:.:0" + "chrX\t12000\t.\tT\t.\t.\tLowDepth\tEND=50000;REPREF=9500;RL=38000;RU=CAGG;VARID=CNBP;REPID=CNBP\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t.:.:.:.:.:.:.:0", + "chrX\t12000\t.\tT\t.\t.\tLowDepth\tEND=123456;REPREF=18576;RL=111456;RU=GGCCCC;VARID=C9ORF72;REPID=C9ORF72\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t.:.:.:.:.:.:.:0", + "chrX\t14586\t.\tG\t.\t.\tLowDepth\tEND=35698;REPREF=5278;RL=21112;RU=CAGA;VARID=CNBP_CAGA;REPID=CNBP_CAGA\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t.:.:.:.:.:.:.:0", + "chrX\t15000\t.\tA\t.\t.\tLowDepth\tEND=45826;REPREF=15413;RL=30826;RU=CA;VARID=CNBP_CA;REPID=CNBP_CA\tGT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC\t.:.:.:.:.:.:.:0" ], - "test.repeats.vcf.gz.tbi", + "test.expansionhunter.vcf.gz.tbi", 3, 0 ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.03.0" }, - "timestamp": "2024-03-11T14:00:28.920701745" + "timestamp": "2024-05-06T15:05:05.525988275" } } \ No newline at end of file diff --git a/tests/subworkflows/local/bam_sv_calling/main.nf.test b/tests/subworkflows/local/bam_sv_calling/main.nf.test index 5a724669..fed04ec4 100644 --- a/tests/subworkflows/local/bam_sv_calling/main.nf.test +++ b/tests/subworkflows/local/bam_sv_calling/main.nf.test @@ -22,19 +22,20 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) - input[3] = [[],[]] - input[4] = [] + input[3] = [] + input[4] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() + input[5] = params.callers.tokenize(",") """ } } @@ -63,19 +64,20 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) - input[3] = [[],[]] - input[4] = [] + input[3] = [] + input[4] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() + input[5] = params.callers.tokenize(",") """ } } @@ -104,19 +106,20 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) - input[3] = [[],[]] - input[4] = [] + input[3] = [] + input[4] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() + input[5] = params.callers.tokenize(",") """ } } @@ -145,19 +148,20 @@ nextflow_workflow { // """ // input[0] = Channel.of([ // [id:"test", sample:"test", sex:"male"], - // 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.cram1, checkIfExists: true), + // file(params.crai1, checkIfExists: true) // ]) // input[1] = Channel.value([ // [id:"fasta"], - // file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + // file(params.fasta, checkIfExists: true) // ]) // input[2] = Channel.value([ // [id:"fai"], - // file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + // file(params.fai, checkIfExists: true) // ]) - // input[3] = [[],[]] + // input[3] = [] // input[4] = [] + // input[5] = params.callers.tokenize(",") // """ // } // } @@ -186,19 +190,20 @@ nextflow_workflow { """ input[0] = Channel.of([ [id:"test", sample:"test", sex:"male"], - 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.cram1, checkIfExists: true), + file(params.crai1, checkIfExists: true) ]) input[1] = Channel.value([ [id:"fasta"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.fasta, checkIfExists: true) ]) input[2] = Channel.value([ [id:"fai"], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.fai, checkIfExists: true) ]) - input[3] = [[],[]] - input[4] = [] + input[3] = [] + input[4] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() + input[5] = params.callers.tokenize(",") """ } } diff --git a/tests/subworkflows/local/bam_sv_calling/main.nf.test.snap b/tests/subworkflows/local/bam_sv_calling/main.nf.test.snap index 1ceb8266..b55a00e9 100644 --- a/tests/subworkflows/local/bam_sv_calling/main.nf.test.snap +++ b/tests/subworkflows/local/bam_sv_calling/main.nf.test.snap @@ -14,14 +14,14 @@ "test.svync.smoove.vcf.gz", "test.svync.smoove.vcf.gz.tbi" ], - 4, + 5, 0 ], "meta": { "nf-test": "0.8.4", "nextflow": "24.02.0" }, - "timestamp": "2024-03-11T14:05:02.394564785" + "timestamp": "2024-04-29T13:24:56.132319567" }, "homo_sapiens - manta": { "content": [ diff --git a/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test b/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test index a993b1b6..43c983b3 100644 --- a/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test +++ b/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test @@ -28,6 +28,7 @@ nextflow_workflow { [id:"fai"], file(params.fai, checkIfExists: true) ]) + input[3] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() """ } } diff --git a/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test.snap b/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test.snap index 0445dd4a..c97d4580 100644 --- a/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test.snap +++ b/tests/subworkflows/local/bam_variant_calling_delly/main.nf.test.snap @@ -2,10 +2,10 @@ "homo_sapiens": { "content": [ [ - "chr16\t86933\tdelly_DEL_1\tT\t\t120\tLowQual\tCALLERS=delly;CIEND=-9,9;CIPOS=-9,9;END=1349692;SVLEN=-1262759;SVTYPE=DEL\tGT:PE:SR\t1/1:0,0:0,7", - "chr16\t1077371\tdelly_INV_2\tT\t\t58\tLowQual\tCALLERS=delly;CIEND=-392,392;CIPOS=-392,392;END=1078502;SVLEN=1131;SVTYPE=INV\tGT:PE:SR\t0/0:19,2:0,0", - "chr16\t1123476\tdelly_INV_3\tA\t\t180\tPASS\tCALLERS=delly;CIEND=-3,3;CIPOS=-3,3;END=1604486;SVLEN=481010;SVTYPE=INV\tGT:PE:SR\t1/1:0,0:0,12", - "chr16\t1135261\tdelly_INS_4\tC\t\t299\tPASS\tCALLERS=delly;CIEND=-2,2;CIPOS=-2,2;END=1135262;SVLEN=27;SVTYPE=INS\tGT:PE:SR\t1/1:0,0:0,25" + "chr16\t86933\tdelly_DEL_1\tT\t\t120\tLowQual\tCALLERS=delly;CIEND=-9,9;CIPOS=-9,9;END=1349691;SVLEN=-1262758;SVTYPE=DEL\tGT:PE:SR\t1/1:0,0:0,7", + "chr16\t1077371\tdelly_INV_2\tT\t\t58\tLowQual\tCALLERS=delly;CIEND=-392,392;CIPOS=-392,392;END=1078501;SVLEN=1130;SVTYPE=INV\tGT:PE:SR\t0/0:19,2:0,0", + "chr16\t1123476\tdelly_INV_3\tA\t\t180\tPASS\tCALLERS=delly;CIEND=-3,3;CIPOS=-3,3;END=1604485;SVLEN=481009;SVTYPE=INV\tGT:PE:SR\t1/1:0,0:0,12", + "chr16\t1135261\tdelly_INS_4\tC\tCAAAAAGTGAATGGATAAACCAACTGTA\t299\tPASS\tCALLERS=delly;CIEND=-2,2;CIPOS=-2,2;END=1135261;SVLEN=27;SVTYPE=INS\tGT:PE:SR\t1/1:0,0:0,25" ], "test.svync.delly.vcf.gz.tbi", 3, @@ -13,8 +13,8 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.03.0" }, - "timestamp": "2024-03-11T14:11:38.043228427" + "timestamp": "2024-05-06T15:21:39.34016826" } } \ No newline at end of file diff --git a/tests/subworkflows/local/bam_variant_calling_manta/main.nf.test b/tests/subworkflows/local/bam_variant_calling_manta/main.nf.test index a65ea097..5d0d9240 100644 --- a/tests/subworkflows/local/bam_variant_calling_manta/main.nf.test +++ b/tests/subworkflows/local/bam_variant_calling_manta/main.nf.test @@ -31,6 +31,7 @@ nextflow_workflow { input[3] = Channel.value([ file(params.manta_config, checkIfExists: true) ]) + input[4] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() """ } } diff --git a/tests/subworkflows/local/bam_variant_calling_qdnaseq/main.nf.test b/tests/subworkflows/local/bam_variant_calling_qdnaseq/main.nf.test index 6dc4043e..f017b86a 100644 --- a/tests/subworkflows/local/bam_variant_calling_qdnaseq/main.nf.test +++ b/tests/subworkflows/local/bam_variant_calling_qdnaseq/main.nf.test @@ -40,6 +40,7 @@ nextflow_workflow { [id:"female_ref"], file(params.qdnaseq_female, checkIfExists: true) ]) + input[5] = Channel.fromPath("\${params.bedgovcf_configs}/*.yaml", checkIfExists:true).collect() """ } } diff --git a/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test b/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test index 192c4d2c..5767731d 100644 --- a/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test +++ b/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test @@ -26,6 +26,7 @@ nextflow_workflow { [id:"fai"], file(params.fai, checkIfExists: true) ]) + input[3] = Channel.fromPath("\${params.svync_configs}/*.yaml", checkIfExists:true).collect() """ } } diff --git a/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test.snap b/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test.snap index 2d970b5f..db1c1efb 100644 --- a/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test.snap +++ b/tests/subworkflows/local/bam_variant_calling_smoove/main.nf.test.snap @@ -13,8 +13,8 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.03.0" }, - "timestamp": "2024-03-11T14:24:00.029162632" + "timestamp": "2024-05-06T15:56:29.455835249" } } \ No newline at end of file diff --git a/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test b/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test index d60a132a..63c33162 100644 --- a/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test +++ b/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test @@ -33,6 +33,7 @@ nextflow_workflow { file(params.wisecondorx_reference, checkIfExists:true) ] input[4] = [[],[]] + input[5] = Channel.fromPath("\${params.bedgovcf_configs}/*.yaml", checkIfExists:true).collect() """ } } diff --git a/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test.snap b/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test.snap index b0f13b58..d5584ace 100644 --- a/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test.snap +++ b/tests/subworkflows/local/bam_variant_calling_wisecondorx/main.nf.test.snap @@ -9,7 +9,7 @@ "sex": "male", "caller": "wisecondorx" }, - "test_aberrations.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.wisecondorx_aberrations.bed:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ @@ -20,7 +20,7 @@ "sex": "male", "caller": "wisecondorx" }, - "test_bins.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.wisecondorx_bins.bed:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ @@ -31,7 +31,7 @@ "sex": "male", "caller": "wisecondorx" }, - "test_segments.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.wisecondorx_segments.bed:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ @@ -42,7 +42,7 @@ "sex": "male", "caller": "wisecondorx" }, - "test_chr_statistics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.wisecondorx_chr_statistics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ @@ -83,8 +83,8 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.03.0" }, - "timestamp": "2024-03-11T14:28:06.577335662" + "timestamp": "2024-05-06T15:54:06.8767855" } } \ No newline at end of file diff --git a/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test b/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test index b6782038..2c0b469d 100644 --- a/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test +++ b/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test @@ -23,13 +23,14 @@ nextflow_workflow { } workflow { """ + def meta = [id:"test", sample:"test", sex:"male", family: "test1", family_count:1, hpo:[]] input[0] = Channel.of([ - [id:"test", sample:"test", sex:"male", variant_type:"sv", family: "test1", family_count:1], + meta + [variant_type:"sv"], file(params.sv_vcf1, checkIfExists:true), file(params.sv_tbi1, checkIfExists:true) ]) input[1] = Channel.of([ - [id:"test", sample:"test", sex:"male", family: "test1", family_count:1], + meta, [] ]) input[2] = Channel.value([ @@ -48,6 +49,12 @@ nextflow_workflow { input[9] = [] input[10] = [] input[11] = ["sv"] + input[12] = params.genome + input[13] = params.species + input[14] = params.vep_cache_version + input[15] = null + input[16] = [] + input[17] = files("\${params.vcfanno_tomls}/*.toml", checkIfExists:true) """ } } @@ -56,7 +63,7 @@ nextflow_workflow { assertAll( { assert workflow.success }, { assert snapshot( - workflow.out.vcfs[0][1..2].collect { file(it).name }, + workflow.out.vcfs.collect { it.collect { it instanceof Map ? it : file(it).name } }, workflow.out.reports, workflow.trace.succeeded().size(), workflow.trace.failed().size() @@ -78,13 +85,14 @@ nextflow_workflow { } workflow { """ + def meta = [id:"test", sample:"test", sex:"male", family: "test1", family_count:1, hpo:[]] input[0] = Channel.of([ - [id:"test", sample:"test", sex:"male", variant_type:"cnv", family: "test1", family_count:1], + meta + [variant_type:"cnv"], file(params.sv_vcf1, checkIfExists:true), file(params.sv_tbi1, checkIfExists:true) ]) input[1] = Channel.of([ - [id:"test", sample:"test", sex:"male", family: "test1", family_count:1], + meta, [] ]) input[2] = Channel.value([ @@ -103,6 +111,12 @@ nextflow_workflow { input[9] = [] input[10] = [] input[11] = ["cnv"] + input[12] = params.genome + input[13] = params.species + input[14] = params.vep_cache_version + input[15] = params.annotations_filter + input[16] = [] + input[17] = files("\${params.vcfanno_tomls}/*.toml", checkIfExists:true) """ } } @@ -111,7 +125,7 @@ nextflow_workflow { assertAll( { assert workflow.success }, { assert snapshot( - workflow.out.vcfs[0][1..2].collect { file(it).name }, + workflow.out.vcfs.collect { it.collect { it instanceof Map ? it : file(it).name } }, workflow.out.reports, workflow.trace.succeeded().size(), workflow.trace.failed().size() @@ -133,17 +147,18 @@ nextflow_workflow { } workflow { """ + def meta = [id:"test", sample:"test", sex:"male", family: "test1", family_count:1, hpo:[]] input[0] = Channel.of([ - [id:"test", sample:"test", sex:"male", variant_type:"sv", family: "test1", family_count:1], + meta + [variant_type:"sv"], file(params.sv_vcf1, checkIfExists:true), file(params.sv_tbi1, checkIfExists:true) ], [ - [id:"test", sample:"test", sex:"male", variant_type:"cnv", family: "test1", family_count:1], + meta + [variant_type: "cnv"], file(params.cnv_vcf1, checkIfExists:true), file(params.cnv_tbi1, checkIfExists:true) ]) input[1] = Channel.of([ - [id:"test", sample:"test", sex:"male", family: "test1", family_count:1], + meta, [] ]) input[2] = Channel.value([ @@ -162,6 +177,12 @@ nextflow_workflow { input[9] = [] input[10] = [] input[11] = ["sv", "cnv"] + input[12] = params.genome + input[13] = params.species + input[14] = params.vep_cache_version + input[15] = null + input[16] = [] + input[17] = files("\${params.vcfanno_tomls}/*.toml", checkIfExists:true) """ } } @@ -170,7 +191,7 @@ nextflow_workflow { assertAll( { assert workflow.success }, { assert snapshot( - workflow.out.vcfs[0][1..2].collect { file(it).name }, + workflow.out.vcfs.collect { it.collect { it instanceof Map ? it : file(it).name } }, workflow.out.reports, workflow.trace.succeeded().size(), workflow.trace.failed().size() diff --git a/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test.snap b/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test.snap index 82c97455..fc707522 100644 --- a/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test.snap +++ b/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/main.nf.test.snap @@ -2,8 +2,21 @@ "homo_sapiens - sv, no_filter": { "content": [ [ - "test.sv.vcf.gz", - "test.sv.vcf.gz.tbi" + [ + { + "id": "test", + "sample": "test", + "sex": "male", + "family": "test1", + "family_count": 1, + "hpo": [ + + ], + "variant_type": "sv" + }, + "test.sv.vcf.gz", + "test.sv.vcf.gz.tbi" + ] ], [ "test.vep.summary.html:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -13,15 +26,43 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-12T10:16:55.291447426" + "timestamp": "2024-06-05T16:01:35.19225934" }, "homo_sapiens - sv & cnv": { "content": [ [ - "test.cnv.vcf.gz", - "test.cnv.vcf.gz.tbi" + [ + { + "id": "test", + "sample": "test", + "sex": "male", + "family": "test1", + "family_count": 1, + "hpo": [ + + ], + "variant_type": "cnv" + }, + "test.cnv.vcf.gz", + "test.cnv.vcf.gz.tbi" + ], + [ + { + "id": "test", + "sample": "test", + "sex": "male", + "family": "test1", + "family_count": 1, + "hpo": [ + + ], + "variant_type": "sv" + }, + "test.sv.vcf.gz", + "test.sv.vcf.gz.tbi" + ] ], [ "test.vep.summary.html:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -32,15 +73,28 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-12T10:17:27.514868326" + "timestamp": "2024-06-05T16:04:50.892603799" }, "homo_sapiens - cnv, filter": { "content": [ [ - "test.cnv.vcf.gz", - "test.cnv.vcf.gz.tbi" + [ + { + "id": "test", + "sample": "test", + "sex": "male", + "family": "test1", + "family_count": 1, + "hpo": [ + + ], + "variant_type": "cnv" + }, + "test.cnv.vcf.gz", + "test.cnv.vcf.gz.tbi" + ] ], [ "test.vep.summary.html:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -50,8 +104,8 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-12T11:04:12.980338516" + "timestamp": "2024-06-05T16:02:48.492322238" } } \ No newline at end of file diff --git a/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/nextflow.config b/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/nextflow.config index 65252546..963c69ea 100644 --- a/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/nextflow.config +++ b/tests/subworkflows/local/vcf_annotate_vep_annotsv_vcfanno/nextflow.config @@ -6,7 +6,11 @@ process { } withName: ANNOTSV_ANNOTSV { - ext.args = "-SVminSize 20" + ext.args = {[ + "-SVminSize 20", + "-vcf 1", + meta.hpo ? "-hpo ${meta.hpo}" : "" + ].join(" ")} ext.prefix = {"${meta.id}.annot"} } diff --git a/workflows/structural.nf b/workflows/structural.nf index ff0f45d0..614acbdd 100644 --- a/workflows/structural.nf +++ b/workflows/structural.nf @@ -9,43 +9,6 @@ include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pi include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_structural_pipeline' -// Check callers (see lib/GlobalVariables.groovy for the list of supported callers) -def callers = params.callers.tokenize(",") - -for (caller in callers) { - if(!(caller in GlobalVariables.allCallers)) { error("The caller '${caller}' is not supported please specify a comma delimited list with on or more of the following callers: ${GlobalVariables.allCallers}".toString()) } -} - -def sv_callers_to_use = callers.intersect(GlobalVariables.svCallers) -def cnv_callers_to_use = callers.intersect(GlobalVariables.cnvCallers) - -if (sv_callers_to_use && params.sv_callers_support > sv_callers_to_use.size()) { - error("The --sv_callers_support parameter (${params.sv_callers_support}) is higher than the amount of SV callers in --callers (${sv_callers_to_use.size()}). Please adjust --sv_callers_support to a value lower of equal to the amount of SV callers to use.") -} - -if (cnv_callers_to_use && params.cnv_callers_support > cnv_callers_to_use.size()) { - error("The --cnv_callers_support parameter (${params.cnv_callers_support}) is higher than the amount of CNV callers in --callers (${cnv_callers_to_use.size()}). Please adjust --cnv_callers_support to a value lower of equal to the amount of CNV callers to use.") -} - -if ("qdnaseq" in callers && (!params.qdnaseq_male || !params.qdnaseq_female)) { - error("Please give the QDNAseq references using --qdnaseq_male and --qdnaseq_female") -} - -if ("wisecondorx" in callers && !params.wisecondorx_reference) { - error("Please give the WisecondorX reference using --wisecondorx_reference") -} - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CONFIG FILES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() -ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -90,7 +53,47 @@ include { MULTIQC } from '../modules/nf-core/multiqc/m workflow STRUCTURAL { take: - ch_samplesheet // channel: samplesheet read in from --input + // channels + ch_samplesheet // channel: samplesheet read in from --input + ch_multiqc_config + ch_multiqc_custom_config + ch_multiqc_logo + ch_multiqc_custom_methods_description + + // file inputs + fasta // The fasta file to use + fai // The index of the fasta file + expansionhunter_catalog // The expansionhunter catalog + qdnaseq_female // The QDNAseq annotations for female samples + qdnaseq_male // The QDNAseq annotations for male samples + wisecondorx_reference // The WisecondorX annotations file + vep_cache // The VEP cache directory + annotsv_annotations // The annotations directory for AnnotSV + annotsv_candidate_genes // A file containing the AnnotSV candidate genes + annotsv_gene_transcripts // A file containing the AnnotSV gene transcripts + vcfanno_lua // A Lua script to use with vcfanno + vcfanno_resources // A comma delimited list of paths to vcfanno resource files + vcfanno_toml // The vcfanno config to + blacklist // A BED file of blacklisted regions + manta_config // A configuration file to be used in Manta + svync_dir // A directory containing svync configs (they must end in '.yaml' and contain the full name of the caller) + bedgovcf_dir // A directory containing bedgovcf configs (they must end in '.yaml' and contain the full name of the caller) + vcfanno_default_dir // A directory containing the default vcfanno configs (they must end in '.toml') + + // boolean inputs + annotate // Run annotation on SV and CNV data + concat_output // Concatenate all output files + + // value inputs + callers // All callers to be used + sv_callers_support // How many SV callers are needed to support the variant + cnv_callers_support // How many CNV callers are needed to support the variant + genome // The genome to use + species // The species to be used by VEP + vep_assembly // The genome assembly to be downloaded for VEP + vep_cache_version // The version of the VEP cache to use + annotations_filter // The filter pattern to use after annotation + outdir // The output directory of the pipeline main: @@ -104,37 +107,81 @@ workflow STRUCTURAL { count_types = 0 // The amount of different variant types that can be concatenated // - // Create input channels from parameters + // Input validation // - ch_fasta = Channel.fromPath(params.fasta).map{[[id:'fasta'], it]}.collect() - ch_annotsv_candidate_genes = params.annotsv_candidate_genes ? Channel.fromPath(params.annotsv_candidate_genes).map{[[], it]}.collect() : [[],[]] - ch_annotsv_gene_transcripts = params.annotsv_gene_transcripts ? Channel.fromPath(params.annotsv_gene_transcripts).map{[[], it]}.collect() : [[],[]] - ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(params.vcfanno_lua).collect() : [] - ch_catalog = params.expansionhunter_catalog ? Channel.fromPath(params.expansionhunter_catalog).map{[[id:'catalog'], it]}.collect() : [[id:'catalog'],[file("https://github.com/Illumina/ExpansionHunter/raw/master/variant_catalog/grch38/variant_catalog.json", checkIfExists:true)]] - ch_qdnaseq_male = params.qdnaseq_male ? Channel.fromPath(params.qdnaseq_male).map{[[id:'qdnaseq'], it]}.collect() : [[],[]] - ch_qdnaseq_female = params.qdnaseq_female ? Channel.fromPath(params.qdnaseq_female).map{[[id:'qdnaseq'], it]}.collect() : [[],[]] - ch_wisecondorx_reference = params.wisecondorx_reference ? Channel.fromPath(params.wisecondorx_reference).map{[[id:'wisecondorx'], it]}.collect() : [[],[]] - ch_blacklist = params.blacklist ? Channel.fromPath(params.blacklist).map{[[id:'blacklist'], it]}.collect() : [[],[]] - ch_manta_config = Channel.fromPath(params.manta_config ?: "${projectDir}/assets/manta_config.ini").collect() + // When making changes here, make sure to also update the following files: conf/modules.config + def List svCallers = ["delly", "manta", "smoove"] //, "gridss" + def List cnvCallers = ["qdnaseq", "wisecondorx"] + def List repeatsCallers = ["expansionhunter"] - val_vcfanno_resources = params.vcfanno_resources ? params.vcfanno_resources.split(",").collect{file(it, checkIfExists:true)}.flatten() : [] + def List allCallers = svCallers + cnvCallers + repeatsCallers + def List annotationCallers = svCallers + cnvCallers - ch_vep_extra_files = [] + // Callers that need the sex + def List sexCallers = ["expansionhunter", "qdnaseq"] + + def lower_cased_callers = callers.toLowerCase() + def callers = lower_cased_callers.tokenize(",").collect { + if(it == "all") {return allCallers} + if(it == "sv") {return svCallers} + if(it == "cnv") {return cnvCallers} + if(it == "rre") {return repeatsCallers} + return it + }.flatten() + + for (caller in callers) { + if(!(caller in allCallers)) { error("The caller '${caller}' is not supported please specify a comma delimited list with on or more of the following callers: ${allCallers}".toString()) } + } + + def sv_callers_to_use = callers.intersect(svCallers) + def cnv_callers_to_use = callers.intersect(cnvCallers) + def rre_callers_to_use = callers.intersect(repeatsCallers) - if(params.vep_phenotypes && params.phenotypes && params.phenotypes_tbi) { - ch_vep_extra_files.add(file(params.phenotypes, checkIfExists:true)) - ch_vep_extra_files.add(file(params.phenotypes_tbi, checkIfExists:true)) + if (sv_callers_to_use && sv_callers_support > sv_callers_to_use.size()) { + error("The 'sv_callers_support' option (${sv_callers_support}) is higher than the amount of SV callers given (${sv_callers_to_use.size()}). Please adjust 'sv_callers_support' to a value lower of equal to the amount of SV callers to use.") } - else if(params.vep_phenotypes) { - error("Please specify '--phenotypes PATH/TO/PHENOTYPES/FILE' and '--phenotypes_tbi PATH/TO/PHENOTYPES/INDEX/FILE' to use the Phenotypes VEP plugin.") + + if (cnv_callers_to_use && cnv_callers_support > cnv_callers_to_use.size()) { + error("The 'cnv_callers_support' option (${cnv_callers_support}) is higher than the amount of CNV callers given (${cnv_callers_to_use.size()}). Please adjust 'cnv_callers_support' to a value lower of equal to the amount of CNV callers to use.") } + if ("qdnaseq" in callers && (!qdnaseq_male || !qdnaseq_female)) { + error("Please give the QDNAseq references using 'qdnaseq_male' and 'qdnaseq_female'") + } + + if ("wisecondorx" in callers && !wisecondorx_reference) { + error("Please give the WisecondorX reference using 'wisecondorx_reference'") + } + + // + // Create input channels from parameters + // + + ch_fasta = Channel.fromPath(fasta).map{[[id:'fasta'], it]}.collect() + ch_annotsv_candidate_genes = annotsv_candidate_genes ? Channel.fromPath(annotsv_candidate_genes).map{[[], it]}.collect() : [[],[]] + ch_annotsv_gene_transcripts = annotsv_gene_transcripts ? Channel.fromPath(annotsv_gene_transcripts).map{[[], it]}.collect() : [[],[]] + ch_vcfanno_lua = vcfanno_lua ? Channel.fromPath(vcfanno_lua).collect() : [] + ch_catalog = expansionhunter_catalog ? Channel.fromPath(expansionhunter_catalog).map{[[id:'catalog'], it]}.collect() : [[],[]] + ch_qdnaseq_male = qdnaseq_male ? Channel.fromPath(qdnaseq_male).map{[[id:'qdnaseq'], it]}.collect() : [[],[]] + ch_qdnaseq_female = qdnaseq_female ? Channel.fromPath(qdnaseq_female).map{[[id:'qdnaseq'], it]}.collect() : [[],[]] + ch_wisecondorx_reference = wisecondorx_reference ? Channel.fromPath(wisecondorx_reference).map{[[id:'wisecondorx'], it]}.collect() : [[],[]] + ch_blacklist = blacklist ? Channel.fromPath(blacklist).map{[[id:'blacklist'], it]}.collect() : [[],[]] + ch_manta_config = manta_config ? Channel.fromPath(manta_config).collect() : [[]] + ch_svync_configs = svync_dir ? Channel.fromPath("${svync_dir}/*.yaml", checkIfExists:true).collect() : [] + ch_bedgovcf_configs = bedgovcf_dir ? Channel.fromPath("${bedgovcf_dir}/*.yaml", checkIfExists:true).collect() : [] + + val_vcfanno_resources = vcfanno_resources ? vcfanno_resources.split(",").collect{file(it, checkIfExists:true)}.flatten() : [] + val_default_vcfanno_tomls = vcfanno_default_dir ? files("${vcfanno_default_dir}/*.toml", checkIfExists:true) : [] + val_vcfanno_toml = vcfanno_toml ? file(vcfanno_toml, checkIfExists:true) : [] + + ch_vep_extra_files = [] + // // Create optional inputs // - if(!params.fai){ + if(!fai){ SAMTOOLS_FAIDX( ch_fasta ) @@ -143,37 +190,37 @@ workflow STRUCTURAL { ch_fai = SAMTOOLS_FAIDX.out.fai.map{[[id:'fai'], it]}.collect() } else { - ch_fai = Channel.fromPath(params.fai).map{[[id:"fai"],it]}.collect() - } - - if(!params.bwa && "gridss" in callers){ - BWA_INDEX( - ch_fasta - ) - - ch_versions = ch_versions.mix(BWA_INDEX.out.versions) - ch_bwa_index = BWA_INDEX.out.index.map{[[id:'bwa'], it[1]]}.collect() - } - else if(params.bwa && "gridss" in callers) { - ch_bwa_index_input = Channel.fromPath(params.bwa).map{[[id:"bwa"],it]}.collect() - if(params.bwa.endsWith(".tar.gz")) { - UNTAR_BWA( - ch_bwa_index_input - ) - ch_versions = ch_versions.mix(UNTAR_BWA.out.versions) - - UNTAR_BWA.out.untar - .collect() - .set { ch_bwa_index } - } else { - ch_bwa_index = ch_bwa_index_input - } - } - else { - ch_bwa_index = Channel.empty() + ch_fai = Channel.fromPath(fai).map{[[id:"fai"],it]}.collect() } - if(params.annotate && !params.annotsv_annotations && callers.intersect(GlobalVariables.annotationCallers)) { + // if(!bwa && "gridss" in callers){ + // BWA_INDEX( + // ch_fasta + // ) + + // ch_versions = ch_versions.mix(BWA_INDEX.out.versions) + // ch_bwa_index = BWA_INDEX.out.index.map{[[id:'bwa'], it[1]]}.collect() + // } + // else if(bwa && "gridss" in callers) { + // ch_bwa_index_input = Channel.fromPath(bwa).map{[[id:"bwa"],it]}.collect() + // if(bwa.endsWith(".tar.gz")) { + // UNTAR_BWA( + // ch_bwa_index_input + // ) + // ch_versions = ch_versions.mix(UNTAR_BWA.out.versions) + + // UNTAR_BWA.out.untar + // .collect() + // .set { ch_bwa_index } + // } else { + // ch_bwa_index = ch_bwa_index_input + // } + // } + // else { + // ch_bwa_index = Channel.empty() + // } + + if(annotate && !annotsv_annotations && callers.intersect(annotationCallers)) { ANNOTSV_INSTALLANNOTATIONS() ch_versions = ch_versions.mix(ANNOTSV_INSTALLANNOTATIONS.out.versions) @@ -182,9 +229,9 @@ workflow STRUCTURAL { .collect() .set { ch_annotsv_annotations } } - else if(params.annotate && callers.intersect(GlobalVariables.annotationCallers)) { - ch_annotsv_annotations_input = Channel.fromPath(params.annotsv_annotations).map{[[id:"annotsv_annotations"], it]}.collect() - if(params.annotsv_annotations.endsWith(".tar.gz")){ + else if(annotate && callers.intersect(annotationCallers)) { + ch_annotsv_annotations_input = Channel.fromPath(annotsv_annotations).map{[[id:"annotsv_annotations"], it]}.collect() + if(annotsv_annotations.endsWith(".tar.gz")){ UNTAR_ANNOTSV( ch_annotsv_annotations_input ) @@ -194,23 +241,23 @@ workflow STRUCTURAL { .collect() .set { ch_annotsv_annotations } } else { - ch_annotsv_annotations = Channel.fromPath(params.annotsv_annotations).map{[[id:"annotsv_annotations"], it]}.collect() + ch_annotsv_annotations = Channel.fromPath(annotsv_annotations).map{[[id:"annotsv_annotations"], it]}.collect() } } else { ch_annotsv_annotations = Channel.empty() } - if(!params.vep_cache && params.annotate && callers.intersect(GlobalVariables.annotationCallers)) { + if(!vep_cache && annotate && callers.intersect(annotationCallers)) { ENSEMBLVEP_DOWNLOAD( - Channel.of([[id:"vep_cache"], params.vep_assembly, params.species, params.vep_cache_version]).collect() + Channel.of([[id:"vep_cache"], vep_assembly, species, vep_cache_version]).collect() ) ch_versions = ch_versions.mix(ENSEMBLVEP_DOWNLOAD.out.versions) ch_vep_cache = ENSEMBLVEP_DOWNLOAD.out.cache.map{it[1]}.collect() } - else if (params.vep_cache && params.annotate && callers.intersect(GlobalVariables.annotationCallers)) { - ch_vep_cache = Channel.fromPath(params.vep_cache).collect() + else if (vep_cache && annotate && callers.intersect(annotationCallers)) { + ch_vep_cache = Channel.fromPath(vep_cache).collect() } else { ch_vep_cache = Channel.empty() @@ -243,7 +290,7 @@ workflow STRUCTURAL { // Determine the gender if needed // - if(callers.intersect(GlobalVariables.sexCallers)) { + if(callers.intersect(sexCallers)) { ch_input_no_sex .branch { sex: it[0].sex @@ -291,8 +338,9 @@ workflow STRUCTURAL { ch_inputs.crams, ch_fasta, ch_fai, - ch_bwa_index, - ch_manta_config + ch_manta_config, + ch_svync_configs, + sv_callers_to_use ) ch_versions = ch_versions.mix(BAM_SV_CALLING.out.versions) @@ -317,7 +365,9 @@ workflow STRUCTURAL { ch_qdnaseq_male, ch_qdnaseq_female, ch_wisecondorx_reference, - ch_blacklist + ch_blacklist, + ch_bedgovcf_configs, + cnv_callers_to_use ) ch_versions = ch_versions.mix(BAM_CNV_CALLING.out.versions) ch_annotation_input = ch_annotation_input.mix(BAM_CNV_CALLING.out.vcfs) @@ -327,7 +377,7 @@ workflow STRUCTURAL { // Annotate the variants // - if(params.annotate) { + if(annotate) { VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO( ch_annotation_input, ch_inputs.small_variants, @@ -340,7 +390,13 @@ workflow STRUCTURAL { ch_vep_extra_files, ch_vcfanno_lua, val_vcfanno_resources, - variant_types + variant_types, + genome, + species, + vep_cache_version, + annotations_filter, + val_vcfanno_toml, + val_default_vcfanno_tomls ) ch_reports = ch_reports.mix(VCF_ANNOTATE_VEP_ANNOTSV_VCFANNO.out.reports) @@ -354,7 +410,7 @@ workflow STRUCTURAL { // Estimate repeat sizes // - if(callers.intersect(GlobalVariables.repeatsCallers)){ + if(callers.intersect(repeatsCallers)){ count_types++ @@ -373,7 +429,7 @@ workflow STRUCTURAL { // Concatenate the VCF files from different types of analysis // - if(count_types > 1 && params.concat_output) { + if(count_types > 1 && concat_output) { ch_outputs .map { meta, vcf, tbi -> @@ -410,18 +466,15 @@ workflow STRUCTURAL { // Collate and save software versions // softwareVersionsToYAML(ch_versions) - .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_pipeline_software_mqc_versions.yml', sort: true, newLine: true) + .collectFile(storeDir: "${outdir}/pipeline_info", name: 'nf_core_pipeline_software_mqc_versions.yml', sort: true, newLine: true) .set { ch_collated_versions } // // MODULE: MultiQC // ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) ch_methods_description = Channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description)) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions)