From feefc84e1aca1705590c5ba6cc84b8b993522de2 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 20 Dec 2024 16:54:30 +0100 Subject: [PATCH 1/2] Template update for nf-core/tools version 3.1.0 --- .editorconfig | 4 + .github/CONTRIBUTING.md | 2 + .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .github/PULL_REQUEST_TEMPLATE.md | 4 +- .github/workflows/download_pipeline.yml | 41 +- .nf-core.yml | 10 +- .prettierignore | 1 + CITATIONS.md | 6 + LICENSE | 2 +- README.md | 12 +- assets/methods_description_template.yml | 29 ++ assets/multiqc_config.yml | 15 + assets/nf-core-pixelator_logo_light.png | Bin 80637 -> 80620 bytes assets/schema_input.json | 2 +- assets/sendmail_template.txt | 22 + conf/igenomes.config | 440 ++++++++++++++++++ conf/igenomes_ignored.config | 9 + conf/modules.config | 13 + conf/test.config | 5 +- conf/test_full.config | 4 +- docs/images/nf-core-pixelator_logo_dark.png | Bin 29213 -> 29125 bytes docs/images/nf-core-pixelator_logo_light.png | Bin 24897 -> 24878 bytes docs/output.md | 30 +- docs/usage.md | 7 +- main.nf | 16 + modules.json | 13 +- modules/nf-core/fastqc/environment.yml | 5 + modules/nf-core/fastqc/main.nf | 64 +++ modules/nf-core/fastqc/meta.yml | 67 +++ modules/nf-core/fastqc/tests/main.nf.test | 309 ++++++++++++ .../nf-core/fastqc/tests/main.nf.test.snap | 392 ++++++++++++++++ modules/nf-core/fastqc/tests/tags.yml | 2 + modules/nf-core/multiqc/environment.yml | 5 + modules/nf-core/multiqc/main.nf | 63 +++ modules/nf-core/multiqc/meta.yml | 78 ++++ modules/nf-core/multiqc/tests/main.nf.test | 92 ++++ .../nf-core/multiqc/tests/main.nf.test.snap | 41 ++ modules/nf-core/multiqc/tests/nextflow.config | 5 + modules/nf-core/multiqc/tests/tags.yml | 2 + nextflow.config | 22 +- nextflow_schema.json | 76 ++- ro-crate-metadata.json | 55 ++- .../utils_nfcore_pixelator_pipeline/main.nf | 46 +- tower.yml | 2 + workflows/pixelator.nf | 56 ++- 45 files changed, 2000 insertions(+), 70 deletions(-) create mode 100644 assets/methods_description_template.yml create mode 100644 assets/multiqc_config.yml create mode 100644 conf/igenomes.config create mode 100644 conf/igenomes_ignored.config create mode 100644 modules/nf-core/fastqc/environment.yml create mode 100644 modules/nf-core/fastqc/main.nf create mode 100644 modules/nf-core/fastqc/meta.yml create mode 100644 modules/nf-core/fastqc/tests/main.nf.test create mode 100644 modules/nf-core/fastqc/tests/main.nf.test.snap create mode 100644 modules/nf-core/fastqc/tests/tags.yml create mode 100644 modules/nf-core/multiqc/environment.yml create mode 100644 modules/nf-core/multiqc/main.nf create mode 100644 modules/nf-core/multiqc/meta.yml create mode 100644 modules/nf-core/multiqc/tests/main.nf.test create mode 100644 modules/nf-core/multiqc/tests/main.nf.test.snap create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 modules/nf-core/multiqc/tests/tags.yml diff --git a/.editorconfig b/.editorconfig index 72dda289..6d9b74cc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -31,3 +31,7 @@ indent_size = unset # ignore python and markdown [*.{py,md}] indent_style = unset + +# ignore ro-crate metadata files +[**/ro-crate-metadata.json] +insert_final_newline = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e091e270..332a5c4a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -79,6 +79,8 @@ If you wish to contribute a new step, please use the following coding standards: 6. Add sanity checks and validation for all relevant parameters. 7. Perform local tests to validate that the new code works as expected. 8. If applicable, add a new test command in `.github/workflow/ci.yml`. +9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. +10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. ### Default values diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 88f2d3e4..324c7da5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/pixelator pipeline documentation](https://nf-co.re/pixelator/usage) - - type: textarea id: description attributes: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 3e33e429..b107a8e1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,14 +8,14 @@ These are the most common things requested on pull requests (PRs). Remember that PRs should be made against the dev branch, unless you're preparing a pipeline release. -Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/pixelator/tree/master/.github/CONTRIBUTING.md) +Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/pixelator/tree/main/.github/CONTRIBUTING.md) --> ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/pixelator/tree/master/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/pixelator/tree/main/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/pixelator _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2576cc0c..13b51e2c 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -28,8 +28,12 @@ env: NXF_ANSI_LOG: false jobs: - download: + configure: runs-on: ubuntu-latest + outputs: + REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} + REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} + REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} steps: - name: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -53,22 +57,27 @@ jobs: pip install git+https://github.com/nf-core/tools.git@dev - name: Get the repository name and current branch set as environment variable + id: get_repo_properties run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV} - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" - name: Make a cache directory for the container images run: | mkdir -p ./singularity_container_images + download: + runs-on: ubuntu-latest + needs: configure + steps: - name: Download the pipeline env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ - --revision ${{ env.REPO_BRANCH }} \ - --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ + --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ + --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ @@ -76,14 +85,14 @@ jobs: --download-configuration 'yes' - name: Inspect download - run: tree ./${{ env.REPOTITLE_LOWERCASE }} + run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} - name: Count the downloaded number of container images id: count_initial run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Initial container image count: $image_count" - echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" - name: Run the downloaded pipeline (stub) id: stub_run_pipeline @@ -91,27 +100,27 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline - if: ${{ job.steps.stub_run_pipeline.status == failure() }} + if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results - name: Count the downloaded number of container images id: count_afterwards run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Post-pipeline run container image count: $image_count" - echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - name: Compare container image counts run: | - if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then - initial_count=${{ env.IMAGE_COUNT_INITIAL }} - final_count=${{ env.IMAGE_COUNT_AFTER }} + if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} + final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} difference=$((final_count - initial_count)) echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" tree ./singularity_container_images diff --git a/.nf-core.yml b/.nf-core.yml index fad0297f..1d103dc1 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,9 +1,7 @@ lint: files_exist: - - assets/multiqc_config.yml - - conf/igenomes.config - files_unchanged: - - assets/nf-core-pixelator_logo_light.png + - assets/multiqc_config.yml + - conf/igenomes.config multiqc_config: false nf_core_version: 3.1.0 repository_type: pipeline @@ -15,8 +13,4 @@ template: name: pixelator org: nf-core outdir: . - skip_features: - - fastqc - - multiqc - - igenomes version: 1.3.1 diff --git a/.prettierignore b/.prettierignore index 437d763d..edd29f01 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,4 @@ testing/ testing* *.pyc bin/ +ro-crate-metadata.json diff --git a/CITATIONS.md b/CITATIONS.md index 4a9a8d3d..7bc0af15 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,6 +10,12 @@ ## Pipeline tools +- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online].- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + +> Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + ## Software packaging/containerisation tools - [Anaconda](https://anaconda.com) diff --git a/LICENSE b/LICENSE index c94e986a..036449a8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Pixelgen Technologies AB +Copyright (c) The nf-core/pixelator team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 539057b6..d8501206 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,7 @@ nf-core/pixelator - - -[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml) +[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) @@ -29,12 +27,12 @@ - +1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage > [!NOTE] -> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - - - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml new file mode 100644 index 00000000..2b6ed3cd --- /dev/null +++ b/assets/methods_description_template.yml @@ -0,0 +1,29 @@ +id: "nf-core-pixelator-methods-description" +description: "Suggested text and references to use when describing pipeline usage within the methods section of a publication." +section_name: "nf-core/pixelator Methods Description" +section_href: "https://github.com/nf-core/pixelator" +plot_type: "html" +## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline +## You inject any metadata in the Nextflow '${workflow}' object +data: | +

Methods

+

Data was processed using nf-core/pixelator v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

+

The pipeline was executed with Nextflow v${workflow.nextflow.version} (Di Tommaso et al., 2017) with the following command:

+
${workflow.commandLine}
+

${tool_citations}

+

References

+ +
+
Notes:
+
    + ${nodoi_text} +
  • The command above does not include parameters contained in any configs or profiles that may have been used. Ensure the config file is also uploaded with your publication!
  • +
  • You should also cite all software used within this run. Check the "Software Versions" of this report to get version information.
  • +
+
diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml new file mode 100644 index 00000000..adefdf6c --- /dev/null +++ b/assets/multiqc_config.yml @@ -0,0 +1,15 @@ +report_comment: > + This report has been generated by the nf-core/pixelator + analysis pipeline. For information about how to interpret these results, please see the + documentation. +report_section_order: + "nf-core-pixelator-methods-description": + order: -1000 + software_versions: + order: -1001 + "nf-core-pixelator-summary": + order: -1002 + +export_plots: true + +disable_version_detection: true diff --git a/assets/nf-core-pixelator_logo_light.png b/assets/nf-core-pixelator_logo_light.png index 9b643424a35ba9d3c7dd653522220ea377485add..ab111c85aca3cf58f66fffb87c583467bcf16beb 100644 GIT binary patch delta 46017 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

eVP3+bqHT#dWfb*Lnit;f8hE!c_oqNc?E_`!} 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 delta 47161 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 diff --git a/assets/schema_input.json b/assets/schema_input.json index 148fd766..8fe831e4 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/nf-core/pixelator/master/assets/schema_input.json", + "$id": "https://raw.githubusercontent.com/nf-core/pixelator/main/assets/schema_input.json", "title": "nf-core/pixelator pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index 6792160f..5a184630 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -26,6 +26,28 @@ Content-Disposition: inline; filename="nf-core-pixelator_logo_light.png" join( '\n' ) %> <% +if (mqcFile){ +def mqcFileObj = new File("$mqcFile") +if (mqcFileObj.length() < mqcMaxSize){ +out << """ +--nfcoremimeboundary +Content-Type: text/html; name=\"multiqc_report\" +Content-Transfer-Encoding: base64 +Content-ID: +Content-Disposition: attachment; filename=\"${mqcFileObj.getName()}\" + +${mqcFileObj. + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' )} +""" +}} %> --nfcoremimeboundary-- diff --git a/conf/igenomes.config b/conf/igenomes.config new file mode 100644 index 00000000..3f114377 --- /dev/null +++ b/conf/igenomes.config @@ -0,0 +1,440 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines reference genomes using iGenome paths. + Can be used by any config that customises the base path using: + $params.igenomes_base / --igenomes_base +---------------------------------------------------------------------------------------- +*/ + +params { + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'CHM13' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" + bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" + gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" + mito_name = "chrM" + } + 'GRCm38' { + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + } + 'TAIR10' { + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" + } + 'EB2' { + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + } + 'UMD3.1' { + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" + } + 'WBcel235' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" + } + 'CanFam3.1' { + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" + } + 'GRCz10' { + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'BDGP6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" + } + 'EquCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" + } + 'EB1' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + } + 'Galgal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Gm01' { + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + } + 'Mmul_1' { + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" + } + 'IRGSP-1.0' { + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'CHIMP2.1.4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" + } + 'Rnor_5.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Rnor_6.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'R64-1-1' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" + } + 'EF2' { + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" + } + 'Sbi1' { + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + } + 'Sscrofa10.2' { + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" + } + 'AGPv3' { + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'hg38' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'hg19' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + } + 'mm10' { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + } + 'bosTau8' { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'ce10' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + } + 'canFam3' { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + } + 'danRer10' { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + } + 'equCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + } + 'galGal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + } + 'panTro4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + } + 'rn6' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'sacCer3' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + } + 'susScr3' { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" + } + } +} diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 00000000..b4034d82 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index e27fd282..d203d2b6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,4 +18,17 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + withName: FASTQC { + ext.args = '--quiet' + } + + withName: 'MULTIQC' { + ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } + publishDir = [ + path: { "${params.outdir}/multiqc" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + } diff --git a/conf/test.config b/conf/test.config index 5e51871f..8cf7cacf 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,6 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - - + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'// Genome references + genome = 'R64-1-1' } diff --git a/conf/test_full.config b/conf/test_full.config index 54efb7a8..b8f7cf2a 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -19,6 +19,6 @@ params { // TODO nf-core: Give any required params for the test so that command line flags are not needed input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' - // Fasta references - fasta = params.pipelines_testdata_base_path + 'viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' + // Genome references + genome = 'R64-1-1' } diff --git a/docs/images/nf-core-pixelator_logo_dark.png b/docs/images/nf-core-pixelator_logo_dark.png index 52301749c18ffbb1d10f440600845a109b624a41..ab978d7d9f8ee5ee903730164b03335980fd9967 100644 GIT binary patch literal 29125 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 PGeRuQE+8vSJ#YRm_BN){ literal 29213 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 O#N5mVS!v>R>;D0>X%k@p diff --git a/docs/images/nf-core-pixelator_logo_light.png b/docs/images/nf-core-pixelator_logo_light.png index 283c6c5a9a221f28926c1334b079e4632b6738e0..07f4781b577a0bae5f51d9cd65f4e0e432959a81 100644 GIT binary patch literal 24878 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 literal 24897 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 diff --git a/docs/output.md b/docs/output.md index 368739f9..14b4ebb0 100644 --- a/docs/output.md +++ b/docs/output.md @@ -2,7 +2,7 @@ ## Introduction -This document describes the output produced by the pipeline. +This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. @@ -12,9 +12,35 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +- [FastQC](#fastqc) - Raw read QC- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -### Pipeline information +### FastQC + +
+Output files + +- `fastqc/` + - `*_fastqc.html`: FastQC report containing quality metrics. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +
+ +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/).### MultiQC + +
+Output files + +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + +
+ +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. + +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see .### Pipeline information
Output files diff --git a/docs/usage.md b/docs/usage.md index 5b2b5a27..cdfc2fc2 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -57,7 +57,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/pixelator --input ./samplesheet.csv --outdir ./results -profile docker +nextflow run nf-core/pixelator --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -89,6 +89,7 @@ with: ```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' +genome: 'GRCh37' <...> ``` @@ -108,7 +109,7 @@ It is a good idea to specify the pipeline version when running the pipeline on y First, go to the [nf-core/pixelator releases page](https://github.com/nf-core/pixelator/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. -This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. +This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. @@ -129,7 +130,7 @@ Several generic profiles are bundled with the pipeline which instruct the pipeli > [!IMPORTANT] > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is suported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. diff --git a/main.nf b/main.nf index 486f4f31..6ad8c060 100644 --- a/main.nf +++ b/main.nf @@ -18,6 +18,19 @@ include { PIXELATOR } from './workflows/pixelator' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_pixelator_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_pixelator_pipeline' +include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_pixelator_pipeline' + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + GENOME PARAMETER VALUES +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// TODO nf-core: Remove this line if you don't need a FASTA file +// This is an example of how to use getGenomeAttribute() to fetch parameters +// from igenomes.config using `--genome` +params.fasta = getGenomeAttribute('fasta') + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NAMED WORKFLOWS FOR PIPELINE @@ -40,6 +53,8 @@ workflow NFCORE_PIXELATOR { PIXELATOR ( samplesheet ) + emit: + multiqc_report = PIXELATOR.out.multiqc_report // channel: /path/to/multiqc_report.html } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -78,6 +93,7 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, + NFCORE_PIXELATOR.out.multiqc_report ) } diff --git a/modules.json b/modules.json index 3fffd959..1b41957e 100644 --- a/modules.json +++ b/modules.json @@ -4,7 +4,18 @@ "repos": { "https://github.com/nf-core/modules.git": { "modules": { - "nf-core": {} + "nf-core": { + "fastqc": { + "branch": "master", + "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164", + "installed_by": ["modules"] + }, + "multiqc": { + "branch": "master", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "installed_by": ["modules"] + } + } }, "subworkflows": { "nf-core": { diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml new file mode 100644 index 00000000..691d4c76 --- /dev/null +++ b/modules/nf-core/fastqc/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf new file mode 100644 index 00000000..752c3a10 --- /dev/null +++ b/modules/nf-core/fastqc/main.nf @@ -0,0 +1,64 @@ +process FASTQC { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' : + 'biocontainers/fastqc:0.12.1--hdfd78af_0' }" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.html"), emit: html + tuple val(meta), path("*.zip") , emit: zip + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + // Make list of old name and new name pairs to use for renaming in the bash while loop + def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } + def rename_to = old_new_pairs*.join(' ').join(' ') + def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') + + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus + // FastQC memory value allowed range (100 - 10000) + def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) + + """ + printf "%s %s\\n" $rename_to | while read old_name new_name; do + [ -f "\${new_name}" ] || ln -s \$old_name \$new_name + done + + fastqc \\ + $args \\ + --threads $task.cpus \\ + --memory $fastqc_memory \\ + $renamed_files + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.html + touch ${prefix}.zip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml new file mode 100644 index 00000000..2b2e62b8 --- /dev/null +++ b/modules/nf-core/fastqc/meta.yml @@ -0,0 +1,67 @@ +name: fastqc +description: Run FastQC on sequenced reads +keywords: + - quality control + - qc + - adapters + - fastq +tools: + - fastqc: + description: | + FastQC gives general quality metrics about your reads. + It provides information about the quality score distribution + across your reads, the per base sequence content (%A/C/G/T). + + You get information about adapter contamination and other + overrepresented sequences. + homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ + documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ + licence: ["GPL-2.0-only"] + identifier: biotools:fastqc +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. +output: + - html: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - zip: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@grst" + - "@ewels" + - "@FelixKrueger" +maintainers: + - "@drpatelh" + - "@grst" + - "@ewels" + - "@FelixKrueger" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test new file mode 100644 index 00000000..e9d79a07 --- /dev/null +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -0,0 +1,309 @@ +nextflow_process { + + name "Test Process FASTQC" + script "../main.nf" + process "FASTQC" + + tag "modules" + tag "modules_nfcore" + tag "fastqc" + + test("sarscov2 single-end [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [ id: 'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
Mon 2 Oct 2023
test.gz
+ // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 paired-end [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 interleaved [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 paired-end [bam]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 multiple [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 custom_prefix") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("sarscov2 single-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id: 'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap new file mode 100644 index 00000000..d5db3092 --- /dev/null +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -0,0 +1,392 @@ +{ + "sarscov2 custom_prefix": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:16.374038" + }, + "sarscov2 single-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:03:10.93942" + }, + "sarscov2 interleaved [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:42.355718" + }, + "sarscov2 paired-end [bam]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:53.276274" + }, + "sarscov2 multiple [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:05.527626" + }, + "sarscov2 paired-end [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:03:02.304411" + }, + "sarscov2 single-end [fastq]": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:53.550742" + } +} \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml new file mode 100644 index 00000000..7834294b --- /dev/null +++ b/modules/nf-core/fastqc/tests/tags.yml @@ -0,0 +1,2 @@ +fastqc: + - modules/nf-core/fastqc/** diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml new file mode 100644 index 00000000..6f5b867b --- /dev/null +++ b/modules/nf-core/multiqc/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf new file mode 100644 index 00000000..cc0643e1 --- /dev/null +++ b/modules/nf-core/multiqc/main.nf @@ -0,0 +1,63 @@ +process MULTIQC { + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" + + input: + path multiqc_files, stageAs: "?/*" + path(multiqc_config) + path(extra_multiqc_config) + path(multiqc_logo) + path(replace_names) + path(sample_names) + + output: + path "*multiqc_report.html", emit: report + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' + def config = multiqc_config ? "--config $multiqc_config" : '' + def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' + """ + multiqc \\ + --force \\ + $args \\ + $config \\ + $prefix \\ + $extra_config \\ + $logo \\ + $replace \\ + $samples \\ + . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ + + stub: + """ + mkdir multiqc_data + mkdir multiqc_plots + touch multiqc_report.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml new file mode 100644 index 00000000..b16c1879 --- /dev/null +++ b/modules/nf-core/multiqc/meta.yml @@ -0,0 +1,78 @@ +name: multiqc +description: Aggregate results from bioinformatics analyses across many samples into + a single report +keywords: + - QC + - bioinformatics tools + - Beautiful stand-alone HTML report +tools: + - multiqc: + description: | + MultiQC searches a given directory for analysis logs and compiles a HTML report. + It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. + homepage: https://multiqc.info/ + documentation: https://multiqc.info/docs/ + licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc +input: + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + - - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" +output: + - report: + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" + - data: + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + - plots: + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@bunop" + - "@drpatelh" + - "@jfy133" +maintainers: + - "@abhi18av" + - "@bunop" + - "@drpatelh" + - "@jfy133" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test new file mode 100644 index 00000000..33316a7d --- /dev/null +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -0,0 +1,92 @@ +nextflow_process { + + name "Test Process MULTIQC" + script "../main.nf" + process "MULTIQC" + + tag "modules" + tag "modules_nfcore" + tag "multiqc" + + config "./nextflow.config" + + test("sarscov2 single-end [fastqc]") { + + when { + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, + { assert process.out.data[0] ==~ ".*/multiqc_data" }, + { assert snapshot(process.out.versions).match("multiqc_versions_single") } + ) + } + + } + + test("sarscov2 single-end [fastqc] [config]") { + + when { + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) + input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, + { assert process.out.data[0] ==~ ".*/multiqc_data" }, + { assert snapshot(process.out.versions).match("multiqc_versions_config") } + ) + } + } + + test("sarscov2 single-end [fastqc] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.report.collect { file(it).getName() } + + process.out.data.collect { file(it).getName() } + + process.out.plots.collect { file(it).getName() } + + process.out.versions ).match("multiqc_stub") } + ) + } + + } +} diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap new file mode 100644 index 00000000..2fcbb5ff --- /dev/null +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -0,0 +1,41 @@ +{ + "multiqc_versions_single": { + "content": [ + [ + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-02T17:51:46.317523" + }, + "multiqc_stub": { + "content": [ + [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-02T17:52:20.680978" + }, + "multiqc_versions_config": { + "content": [ + [ + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-02T17:52:09.185842" + } +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 00000000..c537a6a3 --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml new file mode 100644 index 00000000..bea6c0d3 --- /dev/null +++ b/modules/nf-core/multiqc/tests/tags.yml @@ -0,0 +1,2 @@ +multiqc: + - modules/nf-core/multiqc/** diff --git a/nextflow.config b/nextflow.config index 1970a075..7296500e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,6 +13,18 @@ params { // Input options input = null + // References + genome = null + igenomes_base = 's3://ngi-igenomes/igenomes/' + igenomes_ignore = false + + // MultiQC options + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' + multiqc_methods_description = null + // Boilerplate options outdir = null publish_dir_mode = 'copy' @@ -168,7 +180,8 @@ podman.registry = 'quay.io' singularity.registry = 'quay.io' charliecloud.registry = 'quay.io' - +// Load igenomes.config if required +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. @@ -228,7 +241,7 @@ manifest { homePage = 'https://github.com/nf-core/pixelator' description = """Pipeline for analysis of Molecular Pixelation assays""" mainScript = 'main.nf' - defaultBranch = 'master' + defaultBranch = 'main' nextflowVersion = '!>=24.04.2' version = '1.3.1' doi = '' @@ -262,7 +275,7 @@ validation { https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/nf-core/pixelator/blob/master/CITATIONS.md + https://github.com/nf-core/pixelator/blob/main/CITATIONS.md """ } summary { @@ -270,3 +283,6 @@ validation { afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 3124caa5..e3a99fe4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/nf-core/pixelator/master/nextflow_schema.json", + "$id": "https://raw.githubusercontent.com/nf-core/pixelator/main/nextflow_schema.json", "title": "nf-core/pixelator pipeline parameters", "description": "Pipeline for analysis of Molecular Pixelation assays", "type": "object", @@ -35,6 +35,50 @@ "fa_icon": "fas fa-envelope", "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + }, + "multiqc_title": { + "type": "string", + "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", + "fa_icon": "fas fa-file-signature" + } + } + }, + "reference_genome_options": { + "title": "Reference genome options", + "type": "object", + "fa_icon": "fas fa-dna", + "description": "Reference genome related files and options required for the workflow.", + "properties": { + "genome": { + "type": "string", + "description": "Name of iGenomes reference.", + "fa_icon": "fas fa-book", + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + }, + "fasta": { + "type": "string", + "format": "file-path", + "exists": true, + "mimetype": "text/plain", + "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", + "description": "Path to FASTA genome file.", + "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "fa_icon": "far fa-file-code" + }, + "igenomes_ignore": { + "type": "boolean", + "description": "Do not load the iGenomes reference config.", + "fa_icon": "fas fa-ban", + "hidden": true, + "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "The base path to the igenomes reference files", + "fa_icon": "fas fa-ban", + "hidden": true, + "default": "s3://ngi-igenomes/igenomes/" } } }, @@ -122,6 +166,14 @@ "fa_icon": "fas fa-remove-format", "hidden": true }, + "max_multiqc_email_size": { + "type": "string", + "description": "File size limit when attaching MultiQC reports to summary emails.", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", + "default": "25.MB", + "fa_icon": "fas fa-file-upload", + "hidden": true + }, "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs.", @@ -135,6 +187,24 @@ "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", "hidden": true }, + "multiqc_config": { + "type": "string", + "format": "file-path", + "description": "Custom config file to supply to MultiQC.", + "fa_icon": "fas fa-cog", + "hidden": true + }, + "multiqc_logo": { + "type": "string", + "description": "Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file", + "fa_icon": "fas fa-image", + "hidden": true + }, + "multiqc_methods_description": { + "type": "string", + "description": "Custom MultiQC yaml file containing HTML including a methods description.", + "fa_icon": "fas fa-cog" + }, "validate_params": { "type": "boolean", "description": "Boolean whether to validate parameters against the schema at runtime", @@ -162,7 +232,9 @@ { "$ref": "#/$defs/input_output_options" }, - + { + "$ref": "#/$defs/reference_genome_options" + }, { "$ref": "#/$defs/institutional_config_options" }, diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index be7808b0..68edfd72 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2024-12-12T11:25:17+00:00", - "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n\n\n\n\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/pixelator/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2024-12-20T15:54:28+00:00", + "description": "

\n \n \n \"nf-core/pixelator\"\n \n

[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/pixelator/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -40,6 +40,12 @@ { "@id": "docs/images/" }, + { + "@id": "modules/" + }, + { + "@id": "modules/nf-core/" + }, { "@id": "workflows/" }, @@ -93,7 +99,7 @@ }, "mentions": [ { - "@id": "#52b2ffa5-42c3-4821-a002-cde80183bf67" + "@id": "#aba939f2-3f2b-4a32-a91f-948f641264d8" } ], "name": "nf-core/pixelator" @@ -115,14 +121,18 @@ }, { "@id": "main.nf", - "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], "creator": [ { "@id": "#florian.detemmerman@pixelgen.com" } ], "dateCreated": "", - "dateModified": "2024-12-12T11:25:17Z", + "dateModified": "2024-12-20T16:54:28Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -134,16 +144,25 @@ "single-cell", "single-cell-omics" ], - "license": ["MIT"], - "name": ["nf-core/pixelator"], + "license": [ + "MIT" + ], + "name": [ + "nf-core/pixelator" + ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/pixelator", "https://nf-co.re/pixelator/1.3.1/"], - "version": ["1.3.1"] + "url": [ + "https://github.com/nf-core/pixelator", + "https://nf-co.re/pixelator/1.3.1/" + ], + "version": [ + "1.3.1" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -158,11 +177,11 @@ "version": "!>=24.04.2" }, { - "@id": "#52b2ffa5-42c3-4821-a002-cde80183bf67", + "@id": "#aba939f2-3f2b-4a32-a91f-948f641264d8", "@type": "TestSuite", "instance": [ { - "@id": "#ed980937-b4dd-48b0-b7c4-acf78a6ca685" + "@id": "#541cd5d8-272c-4da6-b27f-c1af890bb283" } ], "mainEntity": { @@ -171,7 +190,7 @@ "name": "Test suite for nf-core/pixelator" }, { - "@id": "#ed980937-b4dd-48b0-b7c4-acf78a6ca685", + "@id": "#541cd5d8-272c-4da6-b27f-c1af890bb283", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/pixelator", "resource": "repos/nf-core/pixelator/actions/workflows/ci.yml", @@ -208,6 +227,16 @@ "@type": "Dataset", "description": "Images for the documentation files" }, + { + "@id": "modules/", + "@type": "Dataset", + "description": "Modules used by the pipeline" + }, + { + "@id": "modules/nf-core/", + "@type": "Dataset", + "description": "nf-core modules" + }, { "@id": "workflows/", "@type": "Dataset", @@ -296,4 +325,4 @@ "name": "Florian De Temmerman" } ] -} +} \ No newline at end of file diff --git a/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf b/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf index d2e8c7cf..cfd2e9b0 100644 --- a/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf @@ -63,6 +63,11 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args ) + // + // Custom validation for pipeline parameters + // + validateInputParameters() + // // Create channel from input file provided through params.input // @@ -107,10 +112,12 @@ workflow PIPELINE_COMPLETION { outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications + multiqc_report // string: Path to MultiQC report main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") - + def multiqc_reports = multiqc_report.toList() + // // Completion email and summary // @@ -123,7 +130,7 @@ workflow PIPELINE_COMPLETION { plaintext_email, outdir, monochrome_logs, - [] + multiqc_reports.getVal(), ) } @@ -143,6 +150,12 @@ workflow PIPELINE_COMPLETION { FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +// +// Check and validate pipeline parameters +// +def validateInputParameters() { + genomeExistsError() +} // // Validate channels from input samplesheet @@ -159,6 +172,31 @@ def validateInputSamplesheet(input) { return [ metas[0], fastqs ] } // +// Get attribute from genome config file e.g. fasta +// +def getGenomeAttribute(attribute) { + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + return params.genomes[ params.genome ][ attribute ] + } + } + return null +} + +// +// Exit pipeline if incorrect --genome key provided +// +def genomeExistsError() { + if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + + " Currently, the available genome keys are:\n" + + " ${params.genomes.keySet().join(", ")}\n" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + error(error_string) + } +} +// // Generate methods description for MultiQC // def toolCitationText() { @@ -167,6 +205,8 @@ def toolCitationText() { // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ "Tools used in the workflow included:", + "FastQC (Andrews 2010),", + "MultiQC (Ewels et al. 2016)", "." ].join(' ').trim() @@ -178,6 +218,8 @@ def toolBibliographyText() { // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " ].join(' ').trim() return reference_text diff --git a/tower.yml b/tower.yml index c61323c0..787aedfe 100644 --- a/tower.yml +++ b/tower.yml @@ -1,3 +1,5 @@ reports: + multiqc_report.html: + display: "MultiQC HTML report" samplesheet.csv: display: "Auto-created samplesheet with collated metadata and FASTQ paths" diff --git a/workflows/pixelator.nf b/workflows/pixelator.nf index 1c1e948c..78e2429e 100644 --- a/workflows/pixelator.nf +++ b/workflows/pixelator.nf @@ -3,7 +3,10 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_pixelator_pipeline' @@ -20,6 +23,15 @@ workflow PIXELATOR { main: ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + // + // MODULE: Run FastQC + // + FASTQC ( + ch_samplesheet + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // // Collate and save software versions @@ -27,13 +39,53 @@ workflow PIXELATOR { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pixelator_software_' + 'versions.yml', + name: 'nf_core_' + 'pixelator_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } - emit: + // + // 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_files = ch_multiqc_files.mix( + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + 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_collated_versions) + ch_multiqc_files = ch_multiqc_files.mix( + ch_methods_description.collectFile( + name: 'methods_description_mqc.yaml', + sort: true + ) + ) + + MULTIQC ( + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList(), + [], + [] + ) + + emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] } From c0614e3acf5cbef678e7cda9097fe0356d4e79d9 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 20 Dec 2024 17:00:34 +0100 Subject: [PATCH 2/2] Template update for nf-core/tools version 3.1.1 --- .nf-core.yml | 2 +- ro-crate-metadata.json | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 1d103dc1..3ecd4287 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -3,7 +3,7 @@ lint: - assets/multiqc_config.yml - conf/igenomes.config multiqc_config: false -nf_core_version: 3.1.0 +nf_core_version: 3.1.1 repository_type: pipeline template: author: Pixelgen Technologies AB diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 68edfd72..cf7a22b3 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2024-12-20T15:54:28+00:00", + "datePublished": "2024-12-20T16:00:33+00:00", "description": "

    \n \n \n \"nf-core/pixelator\"\n \n

    [![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow.Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/pixelator/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#aba939f2-3f2b-4a32-a91f-948f641264d8" + "@id": "#1d466b14-0901-4d00-b62d-85ebd1318f2b" } ], "name": "nf-core/pixelator" @@ -132,7 +132,7 @@ } ], "dateCreated": "", - "dateModified": "2024-12-20T16:54:28Z", + "dateModified": "2024-12-20T17:00:33Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -177,11 +177,11 @@ "version": "!>=24.04.2" }, { - "@id": "#aba939f2-3f2b-4a32-a91f-948f641264d8", + "@id": "#1d466b14-0901-4d00-b62d-85ebd1318f2b", "@type": "TestSuite", "instance": [ { - "@id": "#541cd5d8-272c-4da6-b27f-c1af890bb283" + "@id": "#d46e78e5-8700-4fac-b959-90ecc9555299" } ], "mainEntity": { @@ -190,7 +190,7 @@ "name": "Test suite for nf-core/pixelator" }, { - "@id": "#541cd5d8-272c-4da6-b27f-c1af890bb283", + "@id": "#d46e78e5-8700-4fac-b959-90ecc9555299", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/pixelator", "resource": "repos/nf-core/pixelator/actions/workflows/ci.yml",