From bb0aa638f23aac0cd487c46d2ed17f282cd59fad Mon Sep 17 00:00:00 2001 From: mirpedrol Date: Wed, 2 Oct 2024 11:52:19 +0200 Subject: [PATCH 01/12] Template update for nf-core/tools version 2.14.2.dev0 --- .editorconfig | 2 - .github/CONTRIBUTING.md | 14 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/awsfulltest.yml | 23 +- .github/workflows/ci.yml | 17 +- .github/workflows/download_pipeline.yml | 8 +- .github/workflows/linting.yml | 23 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 2 +- .../workflows/template_version_comment.yml | 43 ++ .gitpod.yml | 7 +- .nf-core.yml | 21 +- .pre-commit-config.yaml | 2 +- .prettierignore | 1 + CHANGELOG.md | 2 +- CITATIONS.md | 9 +- README.md | 9 +- assets/multiqc_config.yml | 4 +- assets/nf-core-crisprseq_logo_light.png | Bin 77402 -> 77406 bytes assets/schema_input.json | 2 +- conf/base.config | 34 +- conf/igenomes_ignored.config | 9 + conf/modules.config | 1 - conf/test.config | 13 +- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes docs/images/nf-core-crisprseq_logo_dark.png | Bin 29473 -> 29440 bytes docs/images/nf-core-crisprseq_logo_light.png | Bin 25158 -> 25147 bytes docs/output.md | 14 +- docs/usage.md | 12 +- main.nf | 10 +- modules.json | 12 +- modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/fastqc/main.nf | 5 +- modules/nf-core/fastqc/meta.yml | 57 +-- modules/nf-core/fastqc/tests/main.nf.test | 225 ++++++++--- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++++++++++++++++-- modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 78 ++-- modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + nextflow.config | 148 ++++--- nextflow_schema.json | 85 +--- .../utils_nfcore_crisprseq_pipeline/main.nf | 56 +-- .../nf-core/utils_nextflow_pipeline/main.nf | 24 +- .../tests/nextflow.config | 2 +- .../nf-core/utils_nfcore_pipeline/main.nf | 45 ++- .../nf-core/utils_nfschema_plugin/main.nf | 46 +++ .../nf-core/utils_nfschema_plugin/meta.yml | 35 ++ .../utils_nfschema_plugin/tests/main.nf.test | 117 ++++++ .../tests/nextflow.config | 8 + .../tests/nextflow_schema.json | 8 +- .../nf-core/utils_nfvalidation_plugin/main.nf | 62 --- .../utils_nfvalidation_plugin/meta.yml | 44 --- .../tests/main.nf.test | 200 ---------- .../utils_nfvalidation_plugin/tests/tags.yml | 2 - workflows/crisprseq.nf | 23 +- 60 files changed, 1178 insertions(+), 813 deletions(-) create mode 100644 .github/workflows/template_version_comment.yml create mode 100644 conf/igenomes_ignored.config delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/main.nf create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/meta.yml create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config rename subworkflows/nf-core/{utils_nfvalidation_plugin => utils_nfschema_plugin}/tests/nextflow_schema.json (95%) delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/main.nf delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml diff --git a/.editorconfig b/.editorconfig index 72dda289..79945334 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,7 +10,6 @@ indent_style = space [*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 - # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset @@ -24,7 +23,6 @@ end_of_line = unset insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset - [/assets/email*] indent_size = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 600f7055..d1397d97 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,19 +19,19 @@ If you'd like to write some code for nf-core/crisprseq, the standard workflow is 1. Check that there isn't already an issue about your idea in the [nf-core/crisprseq issues](https://github.com/nf-core/crisprseq/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/crisprseq repository](https://github.com/nf-core/crisprseq) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). ## Tests - You have the option to test your changes locally by running the pipeline. For receiving warnings about process selectors and other `debug` information, it is recommended to use the debug profile. Execute all the tests with the following command: ```bash nf-test test --profile debug,test,docker --verbose ``` + When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. @@ -40,7 +40,7 @@ There are typically two types of tests that run: ### Lint tests `nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. @@ -75,18 +75,19 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool). 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 Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements @@ -103,7 +104,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Nextflow version bumping -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` ### Images and figures @@ -123,3 +124,4 @@ To get started: Devcontainer specs: - [DevContainer config](.devcontainer/devcontainer.json) + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1ae44009..488719cf 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,7 +17,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/cris - [ ] 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/crisprseq/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/crisprseq _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 9ffd0f54..bf12796d 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,18 +1,33 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] + pull_request: + branches: + - master workflow_dispatch: + pull_request_review: + types: [submitted] + jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/crisprseq' + if: github.repository == 'nf-core/crisprseq' && github.event.review.state == 'approved' runs-on: ubuntu-latest steps: + - uses: octokit/request-action@v2.x + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + run: | + JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' + CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') + test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ac31dcb..8ef4539a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,7 @@ on: pull_request: release: types: [published] + workflow_dispatch: env: NXF_ANSI_LOG: false @@ -24,7 +25,7 @@ jobs: strategy: matrix: NXF_VER: - - "23.04.0" + - "24.04.2" - "latest-everything" steps: - name: Check out pipeline code @@ -38,9 +39,21 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run pipeline with test data + - name: Run pipeline with test data (docker) # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + + - name: Run pipeline with test data (singularity) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results + if: "${{ github.base_ref == 'master' }}" + + - name: Run pipeline with test data (conda) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results + if: "${{ github.base_ref == 'master' }}" diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2d20d644..a048b315 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,4 +1,4 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually @@ -8,7 +8,7 @@ on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: @@ -58,14 +58,14 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./ run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ + nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ --revision ${{ env.REPO_BRANCH }} \ --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 1fcafe88..b882838a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,6 +1,6 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: push: @@ -41,17 +41,32 @@ jobs: python-version: "3.12" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yaml + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 40acc23f..42e519bf 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 03ecfcf7..c6ba35df 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,7 +12,7 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT - uses: rzr/fediverse-action@master with: diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml new file mode 100644 index 00000000..9dea41f0 --- /dev/null +++ b/.github/workflows/template_version_comment.yml @@ -0,0 +1,43 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Read template version from .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + run: pip list --outdated | grep nf-core + + - name: Post nf-core template version comment + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + if: | + ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + ## :warning: Newer version of the nf-core template is available. + + Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + Please update your pipeline to the latest version. + + For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + # diff --git a/.gitpod.yml b/.gitpod.yml index 105a1821..46118637 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,17 +4,14 @@ tasks: command: | pre-commit install --install-hooks nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS vscode: extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code + #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - # - nextflow.nextflow # Nextflow syntax highlighting + - nextflow.nextflow # Nextflow syntax highlighting - oderwat.indent-rainbow # Highlight indentation level - streetsidesoftware.code-spell-checker # Spelling checker for source code - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index e0b85a77..87c82114 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,2 +1,21 @@ +bump_version: null +lint: + files_exist: + - conf/test.config + - conf/test_full.config + files_unchanged: + - .github/PULL_REQUEST_TEMPLATE.md +nf_core_version: 2.14.2.dev0 +org_path: null repository_type: pipeline -nf_core_version: "2.14.1" +template: + author: "J\xFAlia Mir Pedrol, Laurence Kuhlburger" + description: Pipeline for the analysis of CRISPR data + force: false + is_nfcore: true + name: crisprseq + org: nf-core + outdir: . + skip_features: null + version: 2.3.0 +update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1dc..9e9f0e1c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - prettier@3.2.5 - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" + rev: "3.0.3" hooks: - id: editorconfig-checker alias: ec diff --git a/.prettierignore b/.prettierignore index 437d763d..610e5069 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ + email_template.html adaptivecard.json slackreport.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c932e79..e7889a44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.2.0 - [date] +## v2.3.0 - [date] Initial release of nf-core/crisprseq, created with the [nf-core](https://nf-co.re/) template. diff --git a/CITATIONS.md b/CITATIONS.md index 9170aa49..253aa7f5 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,11 +12,11 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +> > - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) -- [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. +> 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 @@ -39,3 +39,4 @@ - [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. + > diff --git a/README.md b/README.md index 0ad03b72..3216b658 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,11 @@ nf-core/crisprseq - - -[![GitHub Actions CI Status](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml) +[![GitHub Actions CI Status](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/crisprseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/crisprseq/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/crisprseq/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) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -67,8 +65,7 @@ nextflow run nf-core/crisprseq \ ``` > [!WARNING] -> 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/usage/configuration#custom-configuration-files). +> 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). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/crisprseq/usage) and the [parameter documentation](https://nf-co.re/crisprseq/parameters). diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 56227af8..7a711d7d 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,8 +1,8 @@ report_comment: > - This report has been generated by the nf-core/crisprseq + This report has been generated by the nf-core/crisprseq analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-crisprseq-methods-description": diff --git a/assets/nf-core-crisprseq_logo_light.png b/assets/nf-core-crisprseq_logo_light.png index 98b93405f73386d873f631ddfd4e836d71380c98..3853ad53f32ec6a10c57918e8b676cfe19716f6b 100644 GIT binary patch delta 42411 zcmZsD2RPM#`~Mk6nUz&`MK;+pDj|d%O14xaGBUG1M@yZGvNxF_E3(IFNF{`Zz=XrkD^}nvi_4Lg-@6Y|d@7Mjh=cg}2G$TVarM$t&R6osQL2*%Wr`@~R zKHX6~-^=-+dUn>a-`3Z6$intmGtmL#oyp-#EAO;RM_5$tuo3&-Yo@dvw?a2ndQLew zC8W(1kE;64clf3j-Z`K9z4dU<(r4At#h~odhVFIc7RxoRy6Mi>_OyQzzn#Q^gg)P; zaLj{8`p~>I@uSswxpw4q$t`);-mlAc+Wsb8i4CtRGAyHYGA$dVYMrD;4=_1!w%*q$ zpPwI;lo@(ad(BQhTrpP)n0tts!1HqN!WR3KJDG>PrKM8;_Mv0 zjdwh=Yk~=Dph5Or1d+91O=KjCUq|te8D( z*BZ!n=d2X7lnlBEcPMEckxx)8R36B)z$MYLm4_#Ip4qXKL@vMXgF5p?FpX%<#;7IV z@hZ~X!`BMYUwQkggS#T>VOvi1TNd^tE}ePY&+c?e+3+E?TS7(m;{8DAQI6;k zr^X-hs*m$1vi|X&hw>(dhMN;52TmC;>`NNjxN?2Kxp~|~miDPKvj1}LY16MWiOp|* z?fEpUrRuX1>AaNY>Uh@lZKC9_kF&AYx77Dn-=gB$l6+Sx zp4_WTckUg&oqO;7E7PBUoLOJKaf`o+DssATH_+DeIXR1Y?3RF$2%{FR;SVT%P)_aW zy$1HnI^hX7>|dx4FJ@^Y|J)#YsMiqZqI%<0lu%o?45rC;NyORS@AXJ|)xbsd%7Ke- z(*n+x#K<2rbxV|N`y??nbmaQfe7>sW=AS1cN;VSgR|x_u26Ec1$S}?C+#jC)mY457 zsbkb_4cycy>k`WNmctj=oc1jzWxOVixy@0mHQm+n=b!sUjR?V}^^Q}S+g(SAvL}w# zC92wo6%-0rM$fFLsY;w;O`5)xHoT^$&HgRdrIe;RB(Tx^t{TT)l#+`gkN20<`KW2Z zf^4;rh~J8Gi?hqlHhF!K71EOHCtFp=oE5Fw-ntc3rS{$HL<@-#GmI%=FQw)63sg)L z^rN!($%p>VD?uT})h$gbN$Ja44=c|4Ce6#c$dhuXcNJu-XJLPv%Bvk^HlK0-JM-xw zi(u@7+X61Cj9P^&<_;axyUaXk4|DPzkHRor8*ACA6=l$RgjWa-4&)52yvvgDp}=e` zj|%%_UHa*AwT94a-}7U7R>kgSdVM_$o#@=@iz4|31&A1uZ0g@v%q?v@bTe8>*pws&-w-Vpz=?o zkjrnJEiYsCJmnK1wtCVBrB5im{IZ_r2Vd$1I!nsqZMTgQx~xaPgLF%vs6>r}6IVEJ zvU5M3%`k(O`;2hW$5)XRDYw&O8=|gUT|@lO)^#@sf$z``B)<$5@HUju&$%?F2bX!# zH}4aVYwC);y>(0|@oIyU6`bK4^!MaSZiE?Uj^e(rj5%gqSCl3(B@ykiIwHFCkFt;6 ztWV`q8Pmhv193pB48C=wi(`7<3*B$if-}Sa35cwplS}=BOF54@*Gyz# zPj%`6AfHpsa`_XZ7LRFDM{$(+t8L3ZwWeak%HCH(@*E}6(pTNZs;V#2$3qeUthTu; z^1Mjr|8zx(pMiHz>IDXOwDEl)#FumpWUTvl;rwhsG$`bDEk|f20iabYp>{Ogl6ubC zqOYM0AjBHT$;rIT3sKmG!$7B4)pH}@B{mvqYIX#T4sUWI{5at zGdhG%qoOL*sN^1%eS8>^e$`Gp&&GE=_IJlLD&%a{af7C-Y;a)ly?;FJ(u?7)!X7s_ zCSIP@3j|{Vi=e)+=O%pix&Qy%X{>h|g`VevOZi*{;0{Wu5i_nR@>rWT)d`hE{Cm`y zBzO7YG?NzuB7zFt2j(_FNKZP^s~1PNg!0`$?FT0)dg{&=njyL#d{FI{cpjMiZzh(h zR4tArm3*-1S;Y5}W+F%Dese4BPV@nA$^9hCG_RQtuC6=vE?Dg`r&NOSt=j_n4BIdk z|GaR+j8CT0^|dYisnh94cva?s2g$sUg~dTb)-U&+Afzy*QC3mSDpaUErcaDmD(y>m}RbZR!u5C9)&ly)?*N>>_ z;kARJm9q1nT6?`jUUmE~9Q3mTu5vMwCa~-hL`TAbvBdjfZB!$u&Ka*ncJ3F-7n)~v zzB2AuBywF0!H-V1E_EiC4} zcZUeM)P(EO?G#bB3^7Bn0n^nC( z*Hv3E5od>rjARj{4cb%c?{in|+>T(XZ^yoSor$HnjHv^wW^-&aU0k8-*i^zasvxD7 zgUc!a=TQs%<*fs>oz00Ep5BG#2dY$xWZ6%vrm03`4|xWdK^{`|jstSqGT+-R^Htc` zGHQhbv>P(DpW-$+!CHfXM$u=>ALIXKdH){h0j0d1-i6x-Im9KRaHlHfBZeP*m;e;E zj7{4M6gH32q|)gJN66*|Pd9b=L{k;Vu|+^#*BHb6eC`T%M6zTcvzPsAt56oYQ`6-) z!Ob4M#_Li|EC?pP#-&5Qw_X>7^c}O?l>+fxO`2^o}LR$0_q}BqX6ydpaAcKq4MF1^P zstRgH1wk}}=I!f0uZ`V%Xb#KE3#a{x2S_fHA?981xmy4@<3S&U3)}4CJ1SmNYfRaP z8QH~me74*I)do2M`LAD|b<3Qau*+3`0Y1S;Km$3BThYwQ5_F340Qxq_w;prep`xbt z1{H7sDZTD<7li<;#Zr}yk^%3v2C`gz(&P3KZTBC_yYw8QZ0b}0nM*AYoO%}Ii?XA( zLw3=#_S@;sRgfC!hM&IlxrmG<|DHx+NdpkchtQH#Fb^Hi;Nd%P600JucI&gqL1J;| z{#?=?QaIom$-l_Y#g{>|40NkcwGqS_iMqpTM>F=5Mzge^%5Bg|-ec)>j`RSzbigj=zB*+KtpBKw_{^b${ zs)!PDp#|tTkv>fGhS~LBQM!|bXg^*5lIort%H=$TGI_{idfo)1^pIuumfdu0z;2&d zh>)kAl+W*R)7TMU4q>T!pUM%c3p~1=9_Zn6DF5QN*em8!R~sf#9uHZbe0VxhY1eU= z<@9;qp>{@+32+ucMOp1=sd8n~!za_bx|j;6aS|Skh)_>@4=(9PzkIjd6a#@N_Rf~9 zGijkYZ>^S}ntCz|FWBXIc z@-8f;&OSTzG5^S1p+20W@{OL&%bL1IIZSOp8D*$2a3XL-~7IR;eY z*#3a!G{z(+@Y@cTt7%wsmth}%axxVR$Ahrydf}qGtCph78Mfnp&l(a6NlQNsCAe_F z^Hf>yq#mGF0S~NXy8kDz@w;D76%?Cj-5;=+Vgw+buR&I(WbR=F8MJEdbhclf`fh3z ze>bBkQ4W;AzKw)Je@@apy8vEt6G(f-S8^Ryp9>iT2Vdq75H>69b*49sB~6L|-|+$@ zY9vO-u&-2>oHKIvBrf*Io`BQ9velfFK+u4AehZ|``>53La+?~s;qG(7Gp_XsGn>Dd(G>9T zuT`a@t_@I!IE~#(KSNEN|51tJ;*IWWA}fb{MNdN>_M*ovg{fXhtrf01NEgbMdhp!> z-~se0?8np`Q(C)9)p=$+UEGOq(R<3k0wNF)diCI|%mIN^Uty$}Z(Zaj{%V$X%*RH+ zi$r(Zxu`22wl0KJIN1|eP9N|NlLyt@%)0s6v}AhGizGlS410cc!L;vcLnTUcFJI;Z z_;n@mUZ?7fR6f3=1(|+%K@#M}X{+*tkFzwCT zd@DyzowfRi+KCJku z!0|^>#h4M+AAG!p5A0BG`=Fu-?Vb18gb)(-;W7k4YZPl_yD4t%1pOnSZNK^wf~}TE z)K0v2V|oA~34+}|1+eYP*>W!ivOnqE2m9aX3~E{z%AI=f(+DvrQ#3SJ#O`E)epvl*5$)g%kn?uudFO?C8>^7 zos_+P+RORyFPH?Uf^5rT1wL*aRt9!apr`sG#Rg81R6ErJf*k?N2NN zwARK*=gxSl^n4lrdTmJebX4!#Ii$YVjhcLarPqe=Ff)?M$(QlQj%l6B_Ht?`IjGME zW#Vrz6WmrzdwUI2*J|&3i6YTt0xRejcoyxXI3S zf;Jth4dxqLIBx@eE@MdJV9^Te;H%X@`c+k$Yv|@T@%|Wf`j&!}vq-s@JxL76EQ2{1 zR45eN|CjvN^QxacB(S;=pL>$GW04&gNSGL&$f=(_M4m=GGyQBsxdIIWr z1W%FkWF|8cuD$uuf3bUh5xmcVi_`*`$^!vE4dNy*l9*qbei-iq5*vq*g8Jit_~4@k zQysq#{Dfl~E@YXT0HlYZ679aCq=~W7FVj@VlpcMtVaLViK+xK>XNlzymVh&!F> znds@mmwF}sXjJyN1v6DMP*ipFFRk@o?CFDWMsG*0pAX?9bs;T|DkppYTz<&%N#^y1 zEN%GlpbJH5$f`wVA1^X#Gz3e3FF=N8D#J`pOg(+HhOwt@hb%`1n5by_=wFDA-0;Nf z4O07yQQ+BJyoEB5FmO?#O45&;@#r&Fi%7}v%mxBArci7TL;@>fR+hIp zQ4`A1^8s!?2MKe9T1RD>7tWX66EgaTz3L*-s%j^ic~5#BCw&1lH39L;-Q~&%wDvpl z96|+VosF`mIc}Hl`bP-+t#dopA@0=+s=f1p*h!B@P-*_)L0+NF(ynOGelGjFigdH9=X_QCv(TaE`(ql2A}0x*o0Di_sc)$l^GLldG5 z%~o|`GV4r{58WBpcLdBZXk8uC6ThdH790nqTdyJXbvPkW)6;o@w?H+aH$b5yz*8*6 zvvKwfH#$PWlodUQTQGk$FGct;gBxeE^iT<&78w7c8R<9Rrg`KnS8UH(&?X(JiruWf zLau5t%IRobw=G?;sG1%vpKe*tq#{Up0e+s`JXdRH3c3yeU9;=FpVA|i5&g>EUm0^@ z?`AF>KTg<_Amq|E)b2XWQjWnc>xqeT-l9KIQ{eGy^Qa@Xl8$|VfeAQ7q;17``cI`ov^qm&nNSe^L z*^cYXX!;f9$JsrJYw&SYYKS3F%)J^5iC9)fjag6SeduUcX}ty zWq1wbq18Z*HJS#ddwW;wWSY~*5YUjf=tv1dXVaUUZ64V0ylWy%J1A1U9LF~9}1D3Q5PePMhI3n&t8aJNd20E-EHWINxE!e=wLA^^|+W85j!Eoo_+SWUC5|p<-*w12=9RU#urdCeaZ;5NA59zNtEbx!Ii>wzCF#@gytwz zI{TSxA<|p`%roiiHtlvbBjn$Sv>Thc27klY%6JsPy3@K_k1ez>Nj(FAslxQYHn62# zVm)AUMAko~u@YH@5a-6o%LcR=hZ2D1fIbH~Wg5j%&gyCGbC+3BLn%;z#6-gTu1m4< z@bmC-3nbbX@FZl{ZueA*(pfPr7 zep=WKsA%Fpeq}2uRs1j!mUo(cqGG-ntBG(!68@MKTk=*c`0u0Yl~+p;Ez7R#y!^}S zMrOruM#6{B=f?VDGJi~Lw#)_zmzqLyPSFKw5vTH|rH6V6z0TCrgpe$(+f!;RLfg|- zCcN?(ME5iAO}}?4s`ue`-FXD!r#h%wJ->jURoMHz)i$wLrb8fnMnEIM7S3#iQ=G%% z^_+K~j(Ju!!&i_vQtA5NW;BCmZO7+1Ha>?C=E#REXpfwJ_u!CR$58f#`Rw zuJMx9NMSEkv!AQ+Q26G*H#S-kcQ;({1tXq&L8E|n>so7wj-&2zrw%_0mychxm~v8$te{V+nYWGF&znd_ki*4jVPj zyM_4&EP^hRa3M{ub1Is0n^m2b1=JLmH6x)vGk?I9n(ca&_w7{HrMI+zup5MSE*;x! zl4wdzH1{1D76FRA3fa?|GwIee!i&3?s#7K$t8j7y9jpltykJk;NUh8Y;h{Tvl1KrH zWaz9!t&R(lMBp$zUHbf|$bFX6rrN~wo%?%x$ox%$CKl8KUTMv=1(=t1$;0xlD9=X;i)$`W+q-AQO@#ZK5;KxiZ5? zGhq)56i`n~Uqi3g;>(QzkY$qHOl~uLW{%!XUPGz2O(FD%zS(v$l|%=o5hwLe^Wyd` z9gsG;vJO;G$5>)O2!!cUB2P~E-Xel4&p&$3^)3t@`F~>Eyw#MbJ*wRZz1QX zL?d>)Q?thXurLpB^aUvd(Ca%X@%sW9^43p=ZL@GUq|2dvDpGI-U3lUq-s8m7Bc)I8 z;m;zFp>j|=!w&4{xKnisZbCaYBT!j2g`Mvx4uQ;|9qnh;))YuXUIXX6xyqYw5Ruo< zV8kJvOU(=8wnhr*= z9B_FtqGS3YT0tA!eOEKhU2#>&g0dT}eAP?NDB?@N7eX%rLZU-y#OtWTBU87>wO(3j z9{X%U7RQB~1h~1mKl6kwW9|0xIRc6X*sTMO6quOI#36P#YUfc%ze~Xt;w@@KAXQsD zzXPiUH!|wfZ}>SEW$<)(#t%P{>3tGA??wEZ1zl+^{7>i+ezsUSOG*5#Mxy4o;q4a_ z2z$|Ka<4lcm(+MKlx$A@a^1Z4?soj#`mH8AFLEcBZQ90{#zkHNj|5#?9ZV^zOy95} zko>r7f(`bO3W<{;!B=25_K)4=Cv1s-plR_OLL3`WB1}EA{N(p(9BB@WUSwO>{dd2o z0YDCa=4x$+-e796nMF?EfGJX> zLR%gqO}}>ABd-2Gn<^}R)?Ax;ZWK|op41Y2c}#2bIa6^`KGQKjY{cA3G}IRnC@!qb z+=@3g2>#`^HDpR6>UZ1pLM>z4oY` zywkFN;eD6l2J)wCE|va)O}%H~?bNzZ)i%}4hAfMxNnW6Ob*lNBiZ9~fFk8Ue#5Z%3;T_~`AU=1!SqH(;4AwA7)nJ! z<{jVn$j}apI__2(*0lMJ_zL{}ItXoTqL(2@6*>gpVe&e@*4xzXSDlHC z*WW*pHRR{1c8Gt^Qe?yBg{~#(kd$lR=jgSjqHfRB)^W0aVCIsc9Z_Mk4*zQeN$Dc0PDjJX-HU zzIhUh%=yQ+>T$uFt?=}j9=NlWJ?OQe6>kClmN-+u-gR0%p|sTQ$Yq?#}zDN>2AG6k8BKs@-S5IVQ3VJ=4# zt>Hjudf`26dmjn<(xbewEXHNq9xdJQ>k;dy&-eX((zd-RVF{@9pGH-h>$l@2ZLU#y zDLo&VnvUL2YK5d+-9fwY9Y8H*WZ4#>-@x`?R(oYs9+pZFj!oUl8uCp**=RsP{?_%+G*Wc+Y4+p;UZ9T*-pR(Z2C1qDTw;QP& zCw18PzOM0?N~X9rrTNoU;N>AgRt=gX)NuU?ejc;`^hn3}CCqzvzuT#W+qLC=H~~;2 zE9&RN_WiN?TQM3xE)>T;(+>cj0I=rvXdt9=pg6+TKr9uq!eL#@f|8m3E>|NZ`VBV9 z6dVnvoc5*$=){*($!DpW;--+lgtpOW_t|H9LHD`pl$;XL*KqgrQ*%p8~&0^ zM*Y-fzC82YknkIE%6jPB@g?KxbBr7Px*LRBnNb)}HJS^B0# z$?T*=d&9SgCj!I0BY*4b14JD1NO#Si`(QMKT-RRa4fjs|L6Y5nwOGtQpZhWS!;JKR(?(WPu1Ut41)|*{2dI&i-Cz9aj+2$$SR7Q>Mr`UYS~&ED zUQBQ?6e0Z{oL8Cteg7xvPqNZx@Q>m_Dc80%Uk9IJF^a##X356#t-hvj>G#ui)`!h* zHd(?amHq7)cZA3mL$P6PR*NO4ccJIoq+ZgSuC(c&Q4fRi>+1S{M zrfpn1YsQM3k&Us;!OFD{MOF4p3Rzeq*vR|W1OSsD*j7=YQ{kcrmicGv=YS1N+!T4L zFnQybFSkAD4vVi+AI3cxjQ=bE0>6clLPck6wWjkrWHr#{!uKI3U<@3ci9IQPTdCC7 z=dNNuzltOCruz&yy(8h(o7o6qD3;kAcmi+pORc={o5Gj;ZFpT-erG?M6G0h+kO)m9 zog2c%t1o^V_-FuR;~`(tc#=P}be`1aJ|Wy=1~IJMqPme+WxraaxtvL!)gWQLc6cU@ z3zB)Uq1}8AN7~*dH|4f5w;obj?Qg3(^814F=-XuwE_j49d1Jn`NZGpf^;?%d%a9O+ zr}htF-j*w5^NuyQeZ$`f`k_j<@!iPZp!r>#q1l4lNp}>OTML??taObmOyk3vT`|C* z9?&^B7$*O;w|9?t2^)TMCRR$g$Gn8RQVBBeBkR|HI%Kp(psK@qUD1N7+GJma$_e*W1!LRLWZqFAu9}bi+pT|}qVLaU2vp(_C*45L+&C2$@ zHLf$l{zC)nW-IM{?bh`H@t4?Md^z3=rQLSyG(P}_gemlb3h4x?x?cgO3h7dL;9yBG zYrlqCq`2!oPq(`6BZ?6Ff5Bz)Kz0c+hQ4H=kpoNangJK7L$N)Svk;teU?C52^<9X{ zv9=FhoU`^`oI|;3C{(zmtCp7x9%-v_>5Fk6b;+lxP zAoLD1DGl@I(MN8=h-ag~;*L5`zmiHs!IU)VI$ZFfF z4kVvU5WQ)MSz(4Zvz}TNqxd}r^t!%OAnL|Az{(KMd0{*A2 z^J5Gz{l|wavb1?1NpdFjNKi(~ZK{yl$tDtO1A&=FV<*LgxbJmA1C(3t{FNk)l7Av(gstFv(AP0>zsMkuEblFm@)zz1Q$AT|PAto;>?2#494j&eOA}V z%d0mVK7|>iCgap0ZZl*$vF&^yGW60Iy- zNuP*?8(i-^{{afljUClmWLXD&cy>!FF(@n~aC1}GMVDHdfJPRGufv*7Og+vu{db%O z4b=P?_xk{q&r}q8Yl?LGNaM*}3caTgJs`g$YLB)8P!pD)sh+R3SKQo>@ji6knKX{5wXhE{Q2RyM zUA2;66Ej9w#`cBPG02*@cY*SLfyO0Cr(yTwdc`q!dQF-i1MnEAyJU8>n^CvAJfLGw z6M*o#hbdhSW#9$H+QUx?f#qO+XrQ%zBWnPPTuxFUJPz|fcVvp<&-A!H?Nz)1%az5} z%O|a(o1hH2GRq36P%G?mw4;{rYE<^jswR61kwXajdkgLqh9Ou#*l+g$Ok3#E7eKRi z&71Uu$cWn1D4g>kni7%obH;sa1c;;R!-iok*hq9cQ$$u`)dR=-J@M#4h+fWsBMz4GR1UmGLYFcNGcuAHiR z5p7PLYGeW!;D?{~2WxPWx7j-@6tL*(-2}7N!Zdu=4l7%vrDpmdM2tw%PO!Xdbc0TR>J{ zg=sk*gYfT4zTzO2lVC1K7hE?yW4A9!*Z;fiyEP6nG(#6k*tsr6V*Qwz&zc}uV>)AR zLv{U|V3`q?6j-G)rrV&UD3gevPFwXnBvy$UXf^>F4R0>~Zr$28&qm8Q=qG8yqVMX| zA<_y!rIrd6*gxz!_w)E?5y5!s$Oj8Oe?l(<7j;@Awsn zT$}V7v5u`JBBamhiJ$2`@4KL964zCF*i9eZVzp5ay>C`0PORV<8I9rV9Z5l^9xDQ5V^lmS4io-K5`6SAWK( zHT4Bp3>N;q+W{)Jkl!s(7nyT5FwQmoky@s|%EH%?;T^%@nO_%QLkNM* zjU`A0<58n@jgXQn<@Em=cVXvps=EJCNw7FOAT?#@`m?H@j1N%=I$rkVr?}9L zUr`-Mddk;>`YZ6ezT3RS@Nn6Hn4EzxMx-0 z^>P2H!dm_1*YP7@M_bX{4Gj)Ng$5>#rujC83*3J+$;04aM&M}$F?M1T`t0A*MX=T< zCdJCs@%H8QByV?c(Kou{Re(lak~X!I4NDhmuu2eBa0z5-3aiqadPFz0(xNx1r3j;l zZDEvPlj$VUju^@wjXxx?LTeS)+1p3cT&cZ@l16exms1#RzJRfG=*(1?avkPqH1-C3 zVu)1NnVgOOE=us6GSRdmKhB-?i|AdEF-@4Y`{9b=i_dU zK3fl-8U$5Gua`)m2N%_XRVZ^QD6S(>p&Y5&+@5+5B0p+Tw`aHIaynT;gOtgyNMh#b zf9%@JOgc-VBV8jf3Lrm^Y+$P)x{mBiFv4a+IepZ0JyC-Nx3z9x6j^37RwHStS3~oE!YF~9)eM|5Ay~u<1M_<3) zQlFGwcQ5mE`Q_La9@z4qe~sk&ur}0v_ec3zwwB2suIlJ?&q#24kvowD0ie1gQApnm z(ha3tQHzpum@jPo&-~pCHW`ljo4VD!8292SMIHqif3NBMHT@B=tCf|&eukq1`U#`d zhI$gUxTevNf$2#`1dl-CWHHlRc4xRoJ;`ohpM zi%0h@vFJzT>Ua>^FN#g2zx4WSUqW3(74Vf%*5{d)BwW20o_X^mcCrbO=?{6RRWTt* zjk*B>{0EL31RH3Tv}pp+GEpPu!SMx^3y=ROqo!aAK=*NUYnjt3af`JfxavpIb(axg zJ13Xq4bf>5v_ki41@aH?8H-V+l6er7SPT~~74e_l(WDnvmL8o|=Ua%v-3 ziZ}yF0Q0j*J^DxDmoWh^ArJVTb@QavKimW#7h;aEz?M@d8OS=oNRKMZcV{9b57~t4 zqwx83a9y9D+w-Tb^HH#Siw(F0N<7CveJLgTrJ|-Bf}uph^y~Jz0NEZMS;VvLJzEdB za{*sOeZW4j5P@o;k-eVoFiygRVl=#iFK)n_W7Od=@*ic2gU>OcTi~UJtrz>agB!%O zJnlp1a7ZRB3zX?ky@LN%>Q8-uenF#l*w%X*e~2Yi#Ds%^wCF;4sq-7}usn!oO$VtB z=ZNW>Ep9YpQjym<+i>TC3L3G@Tu_tJ;^XGL`VlPvdKug(5ae@vcN`G{y50Y z@?VRbfhh3bMs^gw3d03PMpmbJNiV@`Iv&E5ZFPH~NyS&D^*Ccji>#K(#=R_?it%3iaKfvkEZV)+07SNXxaP z4`6KOw2KSLMk|S^;s1S9((|nszgi%X>jI2{lh7>F=>kx?NkK$c;2IcA9&nkg$%+5> z8yt|rSJD+@lp@-nM|>elBLL4{kfcHlBrL~wpkU-VZEUwN*3fgBzguIW!F8(LCsmh;}nCe@qjG6E!^Y7{7*PrK!AsU+EDiS_C5i zw?(WyIrT#(Z~YhT5Y;}?N@Eefd+l%F`lZs2$q9lasOpI zaS(Z(A>agXK!77KBn*f3lL&UZzey3-VE?Yah{y;KLHyOWhA)f(yUBhIc{7wG?4&@15mMH;)M;BhF$yfqX6{j$I6V(98@!WZ$t9{NOiNt z2N?rF>B!t98i&G}ja3dGC7sTxDNs#_R&2$d|8wSm3SYo6kWvNeBY3Unc$Cr`=qA1- z_Q7N@E2jAmaSXoZk@j9>A3qN=%oM;z*3D3i?l^PY0%MPEJPeBI=sYhJ8~@*{8vr-` z*zo}CO?A&?ye))&czZzT>QlQvUth!ct(-=kHDDaL!FqM+7654wvuP~52jY&Mj%_`Cf`9EbUQ^Wc(_+V&uQfZ|(@= z0b!yuwdl2g)`K@tS=T989SD&l?{{dLmX!aYOpFG@k8<)|)PcLJqdn*%u-q@b=G$%) zBf|vHQ!#TLIGpcxM}jJ7{u{t&qq%b}D{&NoBek}U1R+xy>-Pk3mHK+7B$8c8?=ML| z-Ck~#AX_? z$@3!^RXy|ODOhv4j8$P$VNluAe?BRF{0fP+kk`VR{Fr@v>-HahG0FnHhM#6f(&*iI zd7Z^KxB{plBd7D2(r3V+B*}sBtD_qq6812cEX?`bpayXUL;7~}nnm?)ZyIlNp?(s& zp(xjmiI@Hd8?W(WiM^7yZl3enBRvse>DI4)iDufEEqq=W zrcg=vzj&;LYGprBCPbd>O;RAKgZIU|llr2CXv@jw|E6iwkM|^FDtL4jrqIL)qF=*> zwUG-qGe65;ANs7mv16T`a(~cIzsuqOJOKjWyJuUYx_`t2JM^YTdl4O@PZMwce}1kV zxM&PJ_)!XrID>SWh==W+9;#DMrkVcp^)4Up^0EdJhEq;KR(5ylvH$!6{?Mg%4SuJD zM*bNOMrHpxDJJZYHBz>~pf$210TuT2_Lr?xA8B5hd4EB^7cq(rOAfOR zj8sNjU@g!V#pLS4Q^8Y#n&F_)Y&5*^kmS_BD5?HCf-k5AVIfvZZW5cuC*Ddn)j78_ zXxSNf;gm{#sr;Ex$MaZtOInRB6r^|u-Pw%J=`j#%Loa8j?5q4P-m=VIa_?$Fjf?kv z%MGh){_0$R8zZmB3v#4iDT{pazt;h_cVoJYi6NpRX8x9AUcXufpP$c34P6y!UiS!7G%j*JRsfW;FL+HRoH_x0g{2Wa?`(DmB-0oh| zH{~NkA3jXYibQ@7zG@JaJp+ABE7k_K=WD1nQyaGdq|kpTeEhg!qIBudNv|kB-z;jmlcQ0ei`UBtgO+r`X}0>$@p@&D^sVs#6k<2laWJZg=Rd znWfwmu>01pAw8^?oRNT6vn*~TWLEgEJoawfFP#R-^Z|G;xZ$LjB0l_dFbQ$^SuM~U zM}Ma3!MJ-HV^E8IU}St?*V)4EI_t@o#Ft3J#4&b(%2xAh$t?buDRdJ}JG#A$SEQ{z zrpt!F<{vFWK9tAvqc>=Xkhm6FersI1-dap|(q2#Y`q$bK*&5o;<0eFx+NDD$_;+Yj z_-iC&(i~Pke0HA{-3HS-H${wGp0e0h20PW>!_S^yYsjfJ6uZix!5tt;-b?t|c}5hm zb$@CYCV+7^d-lYgvHf6?sey|#!T0k`*nwWoqXfqs@LqaJ1e^);nM+YCTV z{U;WR4&+qukx!CL8(Qd1o9;^`j$@ncMU6)`?u=`Xc`#)>GU@rc~5lnRJwQAs7ehK%rMD!`Gw3^>Y+?# z`B<~lM4W!MrLrF!MC7l3O(}W!Fngv~edjU_=`hKQea+VO5*z!4GA-6%)u~`tkbe)( zpbl7`g_h-ss0P!QwK+M0x^o9MbTmjqYbr(COw8sdOV8_|7B=!<-(2YL3s98E$Vg3b z;@8^isnzcD@_p7_*Tiy=5c~zaGcIPhBG6FmP(=tIh0x8W*d0ilu4nozo!`)uoIluB z+5PPbVJ5E$6`JDRsG@e1iJ`rJEq<5tKU*~Ol5BM z$%R`Zrb{8SYekH~yD6h7i^84fv*l(|-vk{XUnDS^1T`OG=tj=}S=QDB!pOQ{b%&}_9BT6XV>i)=IZk`GB;bxQr_;?r>(Wsk#sZSusW-eDV$o%oopW#XbJ zL6e@oB|lSLjG&eGH3iwnr+f2YP6fS$$-oy;rA}fkCq=e-D&yx=iU&hGM5tAGyYtGy zoX?mDnlvNX_lWaE{|T%!hJtOTCzOjGLe=CPf1e#QdHTnhO%RfUUM|2tST`Xf;Sf0@ zWl;xiAlkt8Ll2{8796?Iu$;ze>gIjzkdEc@GD#!pP{UO-UHsH(8=s=Jv%4={lOQvb zDpD3zJI|Xl7biPE_&&+}HPAJ+dZZvR2G;ufFnVaD{N@A`;eJ>oHvPS-f7a`#fjEPe zJW&$gL$k^QlC+_;!Soc}_Ujr{r6=v@3{@cG3?galj+y>;p=-&H9u%8@wx;B%+x{o6 zUu7v4_vJz6S3h<#yF)A7>gqo7KGLXnyRvTh!;51!9?VZizK`n=UGaZ! zOfWs?!Lx-$4=0(f|4m+5K-byN-a? z@0M0}Go%g@gdym2{z@J*TQ0+sx#M&a4as#Q1<;)4f}1Bh=h6fRpL}wY=v($(WDM&-=S`-RL_EyY z7t65~HFk`|AcOQRoxd#&%A`X)+W(ACAD(6HYs)b&@bwnzvkocW)n^?Gk&!OoU~{i+ zGFZGk8NY%O=un-SK1_(lec=iaZZ@j2rfun5h5qXRCYIzDNwB-6_!R#1*bbaD@ z@hLrPixw$%|Fg(}sr4$7WNZxXOWe40(iAolLEUj=bK#hpN@0y)k$q47_ihYa{7F*m z2N#v^8JS5K;$=w}RHxGEo%4%gy3Vt6*+$Yifyf^dQH`|qB2(*m(}$Bni<1pY%)d|W zD6V={JtAI14V_J_PqLg!%w+Ewj2_z>MF zAtQLP;Ea{Q%z1YISlG4F;kk&R>?C^;q?+Prro>*1Xf7RO=aNW6ecZ{M{X(qg_I+;7 zQ2r!uO&PTlu}g;p>r)-CjSTfGyjXE2VTl&O=_%L6a_Gp{NQ%TpYWtFn$c3+(N-253 zlEpkxTZ1!r;XW_YXPq-1Sa<@57?g`Lc>bjIV~EI7RA*F?o~l2rcGt=H=Mu$-;5e&& zbK>&kkWN`o-`chIKAmv*mo%uUxwu%4k09Bd^o}H&6l#IZJN>}NLoZw`I;QKOSmmDU zoS$|?WcivEFv9+IMKR7m9kU5*hqt)WK73;!X|oTS_+-9jN*dw&T0)16+#2-jvE@?P z9ndr}SJ>j~EgXAgc!;&Q%AjrOY-vo_Yq82iufgUk)z|L)9Gbj<*VARl((Z{{Fq?qPp$M|731e*DhA{+$V+?%mL#o5(abFsvYmtG3KIkldq zuU~b%zScek{{lf&Oc!E9VrCa{Reorc736iKIca)Ab;{i*p}j!b zA@EuATKU=UR)o31#z)@E$1|ZW_(m^s=D2}NR!rAUcn?+f9J1VrHxxS}m*d0j$=p2r z&935+LKe=z1S6eY{dBB3@7Ev;MbOjIV1`*N=V2!H%o&3jd%Pi@^}>MO3WWdWm@Z4P zoFiGUr_*ed3k_^M&P04K(gdW@R__SlODiuf2uC3&#To?F?)KUn%xs9|2w_9iG= zc1dqI`lyByfBv&vc|pJfn{GqO&mC-c;!$Z4M0 zQK#5Oj*HNaa+^_ccafZ&c;k*9E&IP7+H`AB2-^i_>>uD&v|>dTzwD|3!zN{sel(t; zfP3FbAz%fL&V@rpEyr={WAQd2+CItxb#}y?hnTi^tAdhEOt5!#J9qnFeIm>mamDTr zZBpWFLL>yP>>`*6j28z$$lBKY{Dal(iZgf!M(C5*eJL*L6bVtTn072P!)^K^+ej5- zci4RR2IT19BD-KER+e`rMr3TvVT=O|pdQpr9b~og+-iMMJF#7qSKj8st@Q8o9v`{2 zZWY1Yu`NGUc7&0>YE7nRz^sD8vUz>V&-?K$K7^!~u;`W#TC#`ECzvLNo=2&iz9gDSPHbYCt=%*jskmlvn=d!x9^MbjQ}Dn?3T; z_c>%f`~pyXoba%$xiaNdu=#L3U5_{h^CLRjC_kUXw`|@(DNPhn*C%Cdf%l5cZ_(Gq z-gWt+6KP>%4lyE2!^Rw~Lu3&d$(W2cMFs*&e2c5Cc|x7btq~Xeqmle>hXr?hUrh<2DfYe!b|`N zlW-vfAM@ekcYND+=!YLkajX7d_s}L}yC9TJXRGmI#Zf`Q(3)l&^I}_bCDCf+6$p%7 zxoqaBxm(B3)~I&@#ngr=yD`|K>%v;f;Prb)7KZI#dGY zWOMcK-4xDQM^e_ojS(BPDEmM?bl(436)GGraWHqQiEq)1oFwKPFMYrt|ybGv*PAuR9U%V=AyZq6=3Kj-bX#>8xW_XGe(P@2piq7l=wkWZ=_EI z&cT}6q*LP8`D}rMcp5e)l=#3WYICodr%W0}jMHtp)w$?=fAa+@J)l@TazxW@%*MPa zvlIJKZeic>)P|lgI2w0MAuIkYeRxApmbuP%13I`&Nq^>g02Ogm7@u7A&<4ADW=l+Y zI}xX@Ale`yeT%t0w{Lv}NEABe(s!BLr)el;sz@DE%`%N%X#02>bRp9-xLak5f}t+COCSE&j265gaE z@HJX`zTXfG%*nhuFdawx=CiUfB?N5BFl=B_EUp7f(_&-~> zs7LvE9p0frA#CuGhIZV>ww7p69T=kqWx00UGW?;<78I0r100t9vulbnY0*LT$96`> zx5(eo)QJUIPC1wl-v`zj|6_UA6a`)JHe)8CwEw-yeE2;b2nSAWhGSpw;Cs@0)nEff zs#osIEPhrxDC%UbKDGv|G7I}`0cZB7q-9&s-Gz3^?xJrL_PJ0y1=abqRr1jA=at2` zL=l&6!>NZil9AR&qt!$@8nEEG_Ij7xu zeICRjVT`-ajC!`$IL)S8NRNPvf&+do=#j$F$<6HG<})ztby=MfrM9Z{ai{Ir&ku_= z%Gl^vF*k{=Hs&(Ij?&ft+(Gxc8ATZH-6-|1EO`CLC$s zN60?2!&cXwvmjlRnr9Tm+epq}Ki^|+UmmRe83uSP4@F(1ts3`xv=eXIw#@5)L#eU!o(Uq0N*1aUB_h(}8j|8=`@# z^Xh+=nLWg~wQMDaEjl^hg+sGXT;YuMnilaC$+QHUZZ&9Lwh1@i)H{_@DC%(3wV7@~ z&*>EpxS~$EM6`$RYp-oqr=$Z!Pulkn>`)Z=NfdDsDUD@r$F)3xK%0;;y0xuq4~%!Y zy_6Ba!CaD^P*L;BM5B*HpYSvizjg+``J=7`*Ny z+3le0lbtbouWMmr;<>!i5PM{0<>nms+~0xkYwDoB*k!GDwF-QH*6TdFX(=Z6o;Ys- zG8kfzDHnZU&Rz-MyIHWCO%YCV`GW-8R?-gv-H}5fd?~PfnVY+zY)9cYOpFQvYANVZ zb*~|3ysrHlK+Z~8QA5}+b0Pa-*5(O*Jjr3-u@~@>d63S?~u>VU4VB8`~D54+J@GyKtGFu*hcm8ASNZ#aP{{u*C~!L`DCcza!4 zq^8iA3EJW=Z)F5GVH6cNx>4a^$^}h!y6`a}hk-B21Ja|D$EP2D`uZT=CjE}+l86V4 z)Tf99q_x8)-b;cZ!8Vdj$X+-!2xBF@?Ua4@RR7LCEb)5t>-8V$7oE|SyJe46)u|LI zTRl)Oc7%bLaKS`;OQ^8gl6c5_JJtTmw`%{j^J1f$6*4YX(Eoxw^KZ7@osJKjheXry ze?$#MX}@C9)z7P*r3E1-cck}#CC(v*Fm2HIKmx`lFm5M6Ik8aB^nS7+ol=O}JHXu} z&aJtk!je9>Vjf-oI_WEB?k_r?ZfU@MKl1xVNYGwyobTIk`#U7YdB_1qp}hI9q`D{Y zmh{%CHy`M7k!7Y553jzPYOnCE!tYS0SVpeT0Jf2%aPqbvsbLr_g@@OiFn81PLEhgG zL`BwpwTsG|?1a+LpILK9dT;HboTT%Xb8}hox(tJU6v&=PS=3@dW-g!%)nFeuYVxHF zvG^|+*>&_TdQ+sNAG1FDn2iUA~O+=g|svrAT6Dq3zDcm<**XO$vGBNKvZX;+@ z#x>1nfTreZ^q&@;oQEBdN`EjU3XdL;t_}_ZJrAdh{?vdQ<;To1bqqV3o;KN% zHtFrp9A_9Ptr)fRtsB1Hd0EUY6X^V|iVh)n0qeD4ue+m(I%qw4T|ZyAp{G=Xx6pn2 z)|35{-F@wfB$tGd{O{+y-CAl+##`fOq>G%GvqKRH;dYPw7Y{RMDH~)N*0oce?wMi@ z%W~$Pnf?;8skUtOc^k{eo4akgc9am4GK6%9cKnQSkIaj7AR5~HU%q3=k~`@CsBSFM zG1AdazjD`k^kIUCC+Ks{2&?Z>^w)8}>`j|ZX7!ur4y>o!+#&H&V!AfSM(T;S>@jXmrc*aEK19h{TG3uXV)hKC#g!PGP~hKm zoOa`D@k!VHb&ea{pL_}JUETRI$V0-TZ|Sv|JItMe-xM`j=I&S-cQG<=*k84NJY{i` zgF@TFONG3T@@oJ4zkeUR^P@vTREAC~eYMDclC*5MmG2LqiPw=AMd|mezS%uV_m{4j zdmfY%mKWqvo^olIv&5ad9?%FHIJI&L{GJXk^lM;?H<1hY`90~E#v%Qa5u)<|!pXg# zSvYBQ=vnfMP5Ox!F~4W&N<@^Cme}wGT|b!CLqA$|Nx3S33s8M+Xf#)^6Z-${>7e-^bx(sk;sqJ%3!&n$ze^^I1wfU#wCe zTZfzmNb$QFT_)1sb>eG%3MWm~dOKNf)?b~nEg_MpC}E`7S<~NjYV&wz(mEe?!E|4L zt~pc_*{`FfT%6Obuja&;UYgwy#aJmGDmEudJ6W^d9e-kKNi{aJ&%H!PUCTHiGwOJB z+T>q!KrH$!eIOR%Z%3ctd}G@A(jx ze2PsspnYXSTT}LSG`5}AGm-9aC@3S8#oLI+!~(aXG`o{}yz-NQEBn4Wg)HjyG^yQA zwa`jE{MG8CU2YRs@3@7fRM6Czv?WqTLrCB8%9`(K-dAQ(sme=nCS;rLjn_83|5Cm~ zz5UQxnx}9sa^DJGn9bpl!Lga?%i*lQef9W3MDn9y(S|!AO1ETx#(0YY)b#`geW5pX zU?=&LGI##h(CU*AIK(=N|Gwa5W1friRc)%KN2&4G89yr&*?&v=uJoFr9J)@Z>=p@g z=4>E4N*$%dB6Y};bg!Q7qn$3I`l(;728;ceFzo$24mwx#TzYO*$>3z9-q#zQ0lpgV z$&Yrv3-G_v-dIou&f$vovcP-NYlp9=>XQ#tM3Z@cleq-JrO*;G0 zAaU5M*Ji}Bse2nY%#)A+K=U^uka7)W0`gp=q;N5u63@(h>~Q?tN~0os=}qW0b;=of zab(%ad!ppPsGn6duW?$QudV=k=_Y0p$F_fg|qQ3%QrZ*erax_1K2PmU|+2Usr6>T zFz|r*E*BhP-!NqNkgZkG*YXKgpILo{>>g=mUo|TBz<*IpaPCRV(E;_}iG74LYN#cFxN1g1u!?PLz>Q6S ze-cz9k^acv`1;q-(XvdPM;}e$C>3tYGJt^30v_#iju5lzH2~nd)BGc>y$Q1iA+$a8 zM~(Mz=QrKi(^OZSa&nAxN)%sRAL#vLt-^M?b)L~9x5GcR0v{jRgBu?{_`P)P=X>Sy z*G@2J-J1`&m}`ZlUF5x$$()S;G6@DF_HoLt@pWH?eM$0Lpf>lp%$%JV+S&>ofsF!h zU~m4%pZ#oTjofw$0sXCque!5{d$GU08a3cr+XonaN}DA6Gj~ArxbepK6Fs$28J8js zD_7ALFO88td9m!o@$#-6-1#Lx<`~;(8yFck&4lD1q2}YnX3?*+PlLHCt^sCXi43tL zBaXMW)Ek)G`YQdi=7_7!Gxx~4!8E`;T4bP)9l1k|?^V4+->S>#0EM#>^>qt@L`A*B zVH%ne^4F{gF-ScT+7ZBLyq5(VB>o}8|7Y{v3^9)Zp0Y+kFC z8&5SF$cd4C;)T9tDDE0&MJ^t^!%##eV=^~s4?S|eni;hA*EjkObv_4wK@vy}VQ~0c zh($qJf}!|7rqL?|)oGJky$dI=-bvj!!iF&iJD|@o^S%pQXQa zxiSWW!xwuKh=?mUEfEs9)bq0gyI>k2QB?BM`rKG%gTWF8dn6t4-$Kn*qu# z6g3kyz}|(tQ$^C`YI2?0d%Aco!8KBc1n_?hxcITf5SfWGC!@42o%ym z$2N<6(%@F^caOh5( z?fJ#^2+F#g_F%<9<}8^$0DSXj%$*I{KzZ4M_*S8mHtIk~UJO?RJj$Xw@MVXX0qMQL zcFLDq(tG|A0uv{J((%rAxU#RZASrE99bh{g zGuW3oD`&v1ja-19?idJ6+*Ubf>(6Yx(M{<)=$g$UR1CM5VbCP@D=X=V>mD??=v=x# z-!xk7ZrbD&y;Yt6p^%mX%%(y-GXL(D{4zMA3>5x|@dkwqa!Bjp2p}1fNujTYf$ZkY z$b29&eTNRF^(Xj0z9qeGsGry)tl6@zz7S;M4gP-Rv(3kcIok_RvIaK{$DG~2VeXVt zY>=G!I(jL+7kJFk$_F)yeoVb-m7y`Iuq~&z$m3cwb-#^tKqQl)*8@o=-Bvh`4=_!8 z*Ve)^D6T}Nfg9h|JAZh?`1BEpp}2=bh%JXee(MU^HcVm z54{I@WuI+=nZERQyr{HEPw<$?oT#;EbsdVNAB@|O4d*tWaan_i@S=^EX_I&ZuKkH~ zMYC1}Mb9E^e_MsA0asg0={DpU?D!U4p*ccYW~=*TBp==$9vH!#-POG9`uwes-hb>% zR+<2_l^P6{02iLx+8{X?XSN0A@Lkw-!1{dM@yN+v<=X(){hp=@fy(uJ8acs#@e)B1 zx9Vjua66|0-}$nt;b3S?-(0dJD7uMPD!kqaG`8E=C;#uoBcAkj2kX0VDZqHF^cqT; zWs52(^&2a7%G}ZD)3WN6g~+)h+!cW<1z>?+hqhjUBzMDWjXyGhG48X?I++gg`12tpdRfNdWpnbMfmB?=`j&K2%wypA?p(*d0mWEGRQ!py`Yf2xjMbQ50izNs z^tC`OUJ{u@yPt^3UA6_@c5hV=#zFUsP91I1b2gCvfVHfb+Z^e?s@k|(Au)W?9k+Gal|OY2Lun9G0m%m+0sQ0ZIqzKl zFNxCo(#>XMpif)(d5GgHgN7B%6Bhk3Fr1m`G76aM0c zSOnPTylvWSz^$-ahMtR4G6S){l#P%Er_KSvJ`(O4N&NN=r9;5H6of1(!UMC~o=q-S zBL+e83B&EVTcCj~7SOxSxg)-%9js!NKh%tQeBP;RtxvU- zCRACg(}cU1wg1^1EWL_24)xJ(IEt~ZdW8n?;sdh!Y7zbO^x|kxy-Z==5B~IvHQZP9 z=5VIi^Fs=fChO_K119if7^~Yk7x6)70A6MVxI@c5|F_m93ajUJDX*NM4fQ?2zgk)! z*vg4>!qYm?wtF*Wcc3lTLr@EcE`QB|pYm}g5cfZ`9rkL81HH zYLm4*YyIE0TjMbYvy_8vnd7nLqN)S`rg28As@)4_XYcK)Gv0CO!2;&;*h0a6@@z!h ze9zDt1nD_G;M(Q24@*xm*tN;|jK|EGn>$EG`V5IYUcbHdQ>TkQD$e&%>j}7upnddg zrWpNRa@j9(uzRQmC|Dm{UBynq^epiVRG*kvGCY23(s$YrH zCQO5K?j*1l+Awu7%op`B Ib5-+nf9dHvF%_0a=%2JV{J?|&!&R4!fY1WDgqQsJv z$(u?eT$zTaxCjhmk|ghhZ_1~VpHuIyW-cGC4vLX3a#>~KvzS~aeJ|ME#f}m^a*z2! zrF3qz#?z#I|zrQy$J5|QP5yvMdowhvZ( z7((0$=^C!7Yq|Ui-1$A&BMJ61v(rM!CD0$9uMYs8k@lfinDNaDq6l-xl{QvTE2bun zGljEyM&;VKX`gC)c^{xfH<)kv;?+x$G&kE%P8Qvz zWDM%9sDL2OD>phgH%_<&d{ z_M(rjvq`?LS(pzYX1~MRlk!Cl4Gtq$`nFgML{ln$1G}U}s8qK=3@H+i`FXZL`LBpD zq6A&ODu6(|K?@;~9UNUxwe{%aN20+bw9LR*LbtmvuGa$yfGT>2klmLC^IsGwPPSt; z^F0vP?)XM*D(RAfmH7mK-9i!EB!55K^6imCiF_(XX*sm|!w`=C3C@RgvXB?b)+G;3I8cYH=;Hs^G7EJ~Q(EYy09$hS>? zn!{2bqW@?Km1d2b_|$CBnX`k`yNgjQRLH_Ys)T*p!zh1|xLC+$ToSh^AcLPOOPU)T z483vWrQf0}{b4y^TWxSmYQ1WVr%?gt8aGimN788e&METV5Op<3=q zQpL=o$M98U)Ws)MFC%?fjbtekdhmt5?y$l9^cPu8q64G4PX&R=!u?MA-vcA5yeAqX zQXg_mh3X79Q9Xb2I8ja|_!=q5zAc){lVRPvUgFSwQ|X41{_es2**)IrX83?>B*|E& zh?tb-yoO-^KeaLlJwi=^?^Erl${2U4 z*gVxo4fzM}=t)pJOX*14h6BvuL`k&`{?~YLdrI$Vu zges$tvHfD-a^(#LSs&i+j>VrmFXaE9`kWpo&{`As~S)Pm<9t25g52K456*;BJ45 zZh`+pc$`I2S!q9sn}0V}8i~5!hYE_b?%%6}Un4~r@FTCX^fs+BK^o2nDW!ATGX0A- znyJk8V9e~>AdMB%Db0EtD`iq7*5GjW<-1^aq1IL3>w{-pFTFp9AnsX$;^VS%3eNX8 zL?8+7sk-wRMy8pBbAG{NPC0(+H??A5X!q{J7CYz9J)>5ZMWE|!GF z_s}a#PQ#}qoYEzRmw#c8*JL$)v)&|hEx122my56h6C_?J^{llf&D)V|&7z&hb~2Pu zyjMgvD;|U`BQ5?lkhAoObfB3d(uja62 zwcaMg<34}Uhol`{IhKG}W&VyO7*8Txot);D`=2zu~o@!LQ>mBi-`iV^c$SY+#o;!OYDUk>3EPvTK0 zd}#>1S~FkZ52Z|zWrM@zxxswT8CRm%e!to#()lRZX2cy8?ilQcJQj-}wH_lk$%N^< zBqKM1^i3K{lC^KU0ii+a)vLEnq`q%&&L)+e?n(%*A78o2VdhMWyN{c{K0-h7e|n=k zj}+xArg4C#c6aZzaxi0K@4wg6OJB)JS%kz&j9l*9-W4PKEhw$5Tm*u&9~*E*lM`P3 z{pF?-h@u-L(ZW(yE_WrxnYvzh-Q&8b_mn7BoRxa4NOw^4*WPL2kB@0#1)#Qm zLJ*4#;qpVGo(jb1?L7XpO1T-S_0Nx0gHPhyhPD=MlZG<2G2vH}r2D15i`xE=%MyN` z*_syjFqI8yM;iLA=@>%nvH?3%4&O9-OdA%$lQMDT@nuzK$+%zlm~VahQ#ng^ZQB=n zqWxcFO&i_r7b(hXa2UN(FxlP`p$!HQwwr(}JoNuHBpoYs1ed|%c6zcF?qO<-u@Z6v z=W&X9*kv9>W!5R2hhn6ot8g`G=zq%rr!{p#=)HD;_rhKQEfR(zWVKFNj+e}_prxZE zvl!+Z(`(1@ER?WflZRWXG3(=v{ky$iB$hWi9Ka$T$kF&I!T4rGXnKEqRy`OvGSb3| zwVJ5MF*l{(7o(hn^tS1C2U;&D~yse>OkDmgJxu+`(46 zH+2ag(A2!mnJ9FGE>3a^NWw>Wko=&gT*Ov`YwYRsHUqBG4o#5w-4uRSt{_goU6Oc% z$B)I7qXDFx82Bdi41U#TjYegmL(vAwSzPJ6c%_xAc|&QFJFaJw-mL33gx-D<)P(X^ zM1jy)4r_$eHYHcgarld~nCV!lH5LK67}N;6?0J{)DVeqvp*ZXNwIB9)KWrqISwWo9 zrGIQ%VWl`z)iL%mQw(DM?YB+n-gJG)p;^wLEt~Rb zeJeUIp&HyUw5G_^qN2GdOYT_F4|rH9JZxpA7)pPu>2{uW0uTE7zku@141{1AUa<;k zFQ7FI@lCA#GBJf)v!ug1)yC*G*q-N8|_IT~%6L)bD+6+pa%Ed%h zCROnZ%j$kb z8wy#{!2#FggqcWzRHi_zXrJ!c;egiBrdd02q&oit97fU28ac79WraW+1CzApHIx@cjoS z+uM7d1?SOfNE{0&L6YCfq+WKLOo5R4C;jR`0nRCM(aWV;fMp^6Ev%ft>DG$54>+$! z90txxKJ|`*A0++_MF>Dre3PaH;r!fj`MHh_XCp zGdNsnbH6$GKc{!eMFgG*s>!FJdl-L_dUY7PNNHHzza-dzcoH26EEICf(Hcl418)Yq zk9c%fmO!X^M7`=(7xuCo@-PE6#*`@(Ij2Q$kiY+iNG1lhi%6dcBKNYIhWX>xeqESp z^NF-;>%zUf?C|zm6hs5h;vJ2_aQvTlsR|#Q5bW*_51x9_EF%88eh7Jh5tfEdaJ^!q z*8vp7NnZ!4XopbjhC<<9scq64;jgF7b+N*mFo`(uRw#+1`D5R2`LJmSrIKDij*^nz z$#R01bsiYZ@9N0{-It3XabSLjSQQ2c;eHzHPk8cy3UGDtySGhKdAysfh3e)*h;t7C z<|)rtRoLL8Rm)L4si&a8LACs25plHMlQa)ZS4Fj6y6^@ArsT$VmHRDH!L7a!OdbFk zw*~&SX>2{NKnMG7i~2lNdVi{h7lJs~-qfgl>p;+f+WNN$rK#_T$R zRLeO}t{wN%0j;|3AoP+-kbrKgtK2V%{`YkM)7kl_wYMlNds%tuw6;CIV~h_Yl%hyc zqx^8m30C;uB;cdoL$9KKl5$2)7xRttY5nai>mk09m0vDK&vJr|(YE?}EMJ=SOi7rrM5F?N@Zep-rgJq zK9Phwa_E%wZaTjB3^zxtD0G97-szz6VSZ51G&yiuM%iF{>%$E)^*`f7VjIfVL}SVq zL14C2UN=t55GrrY9|shQ$neGsP{#3%4=_SaxtrK^)KA&Fbl<=h2mQ$jd(`JOdSIeq z69?@RdScf$R!-sLW2i?^|F%}CT$;-4B&Ke)R2i!PG-C9Lvhg90TA8B$28UXYmddFZ zP$Yc~M!0D-5u*gjE|F%}cH#d+7oj~vNK|hzRcjB_Gc@pdn@9MCfzuYWIlYRx3S7Y> zj(uFE5kvh_tLG!j3RGmd1do|1w)%-cEX{i`zoaWGcqASEJTaLmc8~;{u$z8V=PwHp zq*EEvtY7W$?()+lCjc#wPL#FK%wMeMFGhlzPQ>9Jr*mrRR8p%fD@2xa9qEcVYISW``Pi<@kuSx|4T0n!fUfJ($K%`TJc>vd(!x(EWF9WMW?>XF zCBOv93Ck-7_4%SNm#RpdH+a0z7~BDsO5z(+XyksDNgBr-r%2*lin`=kVPXHMV^uMH z+%a?lZr)n$1F#8w0!qL{%ha-j-vTF+Q3wIqI1Uiy>IwQExjcF+;|-4O$u8w!0iaTJ z<_P~=#oS8aern@#4%0;{Y)QM|Xc`e}=@Wzb3#H)F-9gocnD{A2Sn)sO zP{KZNuy6Aef;VWV=_-@TZ45|*R{y+3#ri>@41BM0;As6;R#gtoshw430S;(fKHW{s z5$JXG51Qy;=?Hn4-vr`(kW}`oRi)9P(CVct;a21#l`6ei;rjctei!D-07pQC50~s< zIay5nh8@OgFye&o40H;r!7}nm^HvFt=rvA4}|7%36dv{NCES1pwKH;ePNlc?_Gi&d;yIUK#{-8k+Rv!9a0jr6b6uyP zw(JW_$=a_2;8DW zto6hL5NYt?pz+P9g6JT#vcz~WA0wyh9WdQNs=PpmkrL4GQ?;Nh`reF}l0kZmQ@xN& zOQ_BJWG90A-p04ZTU7ZL?V<7v^LVbNT*SqjDHq{&4iDe718&~Am2>&`=YU*Yp7@5* z95dxJyrz%#0AV=1tt>e|nBO?LWGc~#NGJ!J;!#Ie!kUCknzgy#mm&G615|1Oz#9l% z_r%P=@j`RId6>ZX8k@&6GmAc*L9IB6uTo>A#`Rt$C=%cBA9Gmv09x~*Qr1=558ps{ zhJH4Suq&TY<&=ZjL-Jz5r^N!9tV?}oB`4cWnGQ`&E`w*w?kWc-Pl&kx`VFF^{exz| zWNpg?$KR0tRt85BCSLxg+|D(!$0pLK6>~#dEl%P)o>N^h!S?I&;v>`da-le@@FR8D zwPl8_DIHlUi<&g2wzD#$qA)8X*V`gDA9jFn?-~x90=Cu`y#r_*h7n zQm7Sghqi_twv3=s6?dc9daaqVW)WSw0?7zig%D!7?aT#lYq;wu>fCOIe;&^`Gs>fw zTJbl2!IG32*Q*+#BE$tqM%x*wc|7sVT8})wv1WbMzzbi!Cv1mnmr1Fy(tAEzKqjDh zrSGg5e0d0e2$ADpapxWJi3$prhp9Xsekut=K0Yz(fpSNuZ(?%pNxu+@$fxoRg|bg8 zFK2cHOrOLVgAW!jcg}9hsL{iIEX}3v$m8K~#t9r*odueBr&~|afUEZ(^daOJK6xOp zE*1RDWn1rqZ_b=*b0isg5MtiQbC=WVD@*1Y98$lNNol&+cjDy{qz?PG5;KW2DO9xL zAf8o1J)g$O#6_qw+7k*Z=JI@>cO)+sP`wOVr{C8h#K()u>meEG)JMpKhRH7> zBhG!@j)VD9Q0HTU$A;wP(7_5^-&uT+yu#&`RNg226fIeCRhTb{=3+4Uxbc2mEvd4S z3hB@agf6dn<(kXV!eNq*X>{kopr)Vk{XzGo_X4;WO$`Yq1*yz3FcLB`%QR|BJ!iUl zJV})_sv;f_E~oft^=>SED;Y||>POTHFOt1#`8&2+=7Aa-3Og+dX;z6L2#C7`(Ok@N zFQcByOEi<{GQ|h{gJ0nAir+4oPekJiboJX;tTO5M$vtky>-s5%_$aE+`)p(_qxEe6lA|zWy0qfkZcursU0Y9Fr3xe6%vH2=?<3AyT%Ro-QVc1EUn58sAXLy;tAwhg01rOx5o zbiHHsonS+#JZ(}Kma&BU%0O2;$5ZC-Ra=odPPG+Nc{?*}8+wnLN^D}k=AZw1U(e+U zwID8c)c<|+8C|+-TxA5*IJ+m?nP62AS@*Yc^+tPGq{HNynE;1>Yc^Cl!&+T#;*sZP(S9j@4yBR_Cn`}EthU%vT~>bQ?F znTPVgxv`rsAc!tFAT9?=;)ZvPah1Cn=&81FDpj0&CY4&@jAv1(i^i=yE_!T&b;(vF z?fts?Bw6!`xn$jD7F6mX+{P)eJ^HHIM#2%i<5j|~wN#!cero8r&ae04bzK-;ZTjGD zZ-q^h?czMXH71xbB(EbljO#<~@z(j&U9h##J-V3ZIiy|xYHH4#)T>(`=2YEZG3SVj z*$le15J<8=)kXoE&1s8z-?1fK3`vqvGWW51oH)F4^{*yNlF<%^Y94P7K7iF68F(14 za1I|trRKQooUOz#7A~dA(6h_UNja*)L3oxYA!&0t6ewadK4`Fx;|_+IU7ZpjfDIL= z+V%^R)A9F>Pphh`X#G0aWdeW>xv|0S{tJymh>ouhiEKGBK>giHg+|fA%u{XO^8jO> zYQfZ9>AtzRfRo;w>JjKMYv9_SntM5@srgX*Q|h8wwq}luqWp3sY3&WAU%51EiwU6C zOL|(bg3hKN-&Gw;rS?Cky2nZfY_;?58@I(ltb4l_gG!NfaVo&+0cLiI(_l}!CNO~XtCFo5t1W2Dm zi;3sd-yP*BGs5bR-D%^_r*bxCP9n%;2BZuV@c?5fT>RkmkYi1fx5b05lJRXU>ebA< zdm%ZYR`}x&yrA~QadeVPWm$TR47+Ed9uEPv`pz@`BBMPJH8eSZa$h!d%|vC2`4kj9 zcH2028h_w5wRA8kukDAUNdiXVeZEk$ll0(rda)q$i9YJ@ zOizPBcl?GhOO%wkcR^kR(QhjKrG8TSTo4M1zMDY?io)duw2FuWjLrC|$m3D-Cvknr zoG4cK*NVg7+DN_oTGt1bop#jw`0DW{XMXSHS(h^NiHze)qy=9RH()w9N=M2bFN=fh z*+5+1;PKbTae0{Fze#4N+FD6QnY4am{nl9>F|5FV@E}rc^v$z3 zb1<_7a4dxV86#scF@m3p$5@Z@t)-cS$EVt^#P#m7UHPj=yiNo~?$-OlImU2ZMl)_vhoNfM@d6j)F3Bk@^4R!4J zbn0&#zR2mvkm|UQOmeBJ%CkLu;|QPZhk!_ZH;dlHKHznb+47z=Z%%T`rOLQsMcD>< zs!@7p@vPm9aFWs1m}r)gD~g$gONfY*jgp%zXBCXfzbx8J(nur}Z`?izG zrLQa18L70n*O6VMu&P@@3m82Mzxv}cqJ3(Nmx{F5LI51ptYNVlI7qy&D_- zbv$RGc1O25WbIXm3`oU5_DB64mMyUqV>R)#t;1S*_8jS3P=;D*$Qr?3T)~6kfg1PA zJGVO;wr4*XuZbS%t9!zR6-D?Kq|4z>X+<+f-cdl>nCR z9RfnvIyp0NE?|0+%4@`V9l%N&=ri8i%Oa!khtarR6UIUwFA1}x#{lR{2Lx6?tvEzN z8(xKb-|o}LB8EIFE+Q~sESCzM=sF&DXY0+#rg0Y{wc-@X+sU#2;jsR#`q9DZUcVT- zo6z?=o88sukf&*aCb=E{i^jD{j`8X4*kct+<=w@_Sor--iX)}H>xqCaOB zm&eH`xUJ_TcTnv64?lG^Ufjvhe!t|(?f72Y{cj3qhKlviY)>UsX3|2-s(ppv)_t9- zrCDZMhs9X?v>4Kv`c`IcL{CSm4%sbhj4?zD;y5pGi$&D)alJF7T2MzZMX_kKw9w;AliI@3(oj+%ea_V^G)(xYD%Z zbKm*59k;&W6cCU;`%d5R8#Fb%q0pm!s4S89PcM5M$0;NAUM4)a0Y6xqclX8+AAHe! zT*NBp4~5#qKD5uMtsg>n2;FJ^jE`f}v--6-(t0S9ua=hHc}xbxktI%&&5IPjW7 zGTPtzBhg~2n!gAWqR&~%I-Y&AG0lhc?P~yGD%uF$Slymr_mb~i`#3f7+mHj>R+-QS zijFTgRW?Nt=Mjy7bS-XEp)#=92**u4X1WXjSMn#-SWM(nLxS)JN~vD<`2G4l5qVSy z7beQVfeGQ0>bUd!0sD^WYhh^v`f%ECvi(=`6jaQGO$2$lB9*)jRu5EWh_f+#i8pJZ z3nL?p+MDFLS8I zB#wg6XR~l%Pz-)wam+z{KqN-bdLkSbVZ>-`{}JxW@kar>z%DDY_8#SX7HK_*UE90iEK*ItsE9&kqIF7%)uk!5ir=wlf1^fHLW% z|Alr7*OZo5s2u!zXboM@K!x!Qz%yqvk1_ZNSfvxG)yy?=IkYSOAcMq4ilA0xn6HNk zo*9xyiez->>1Pg<&}v|>eKv-Y=EH)>d!eQ>yoly;^Z5}DB$$*Ev1n$Iaj@n7Fbhx) zO1lyYI+E}+^v!Zqf?*<$t_Qxq21)=V@SV+IzL{!pJ%F!U(Z|A;FZ?KZLxjFCHEA{P zkBw!DBB3t^B&r97SqpF;fml34AoUBuM1|s8pkLOO6W?&gdMH*>;|*{BbgOTgB7)34 z5!A+<&fisSLCSY@SdHwq1tj|my!gy0ZlV>E4=8R%ZyjxPV1;{Rw>0H~cCI5#Lx3C= zL+EGJ=8G-?WPk~>_WQ(ELmqSr#9TwZu6wK-ojhC2kN6JOJ(~0$e!TGEk1cNGOn*cF z(MAxa=|HqX8_WA6p|ay~^BDyB=o)7PgyC$BzI2Wd*)6)X(Gb8HC*|3>W&`Jy6*RyB z6ib&Q&f2R?Mql$Iyx_~y#fa~rm*gqhu4|2ATA*l)xlFQZqtHSwV`|rvrjI6l7u` zgh#-s=)lLiSIp^U{1l_>>&_Ql2AqyAl=8KUK{Nxgq5};MyIA2DNrtMkoouzD4Km04 zpaqB^_i_Za1!o^cJl6m7%25>OS0i+rTj?EDx-kdDJ5>hrp?%n-Qf^CXy2ljlDWKJ) zaiU3KzCz>wU^8<8vI=jN;9gKGjTk8tjW$3*DIg-J>1NFIkZ_U=05yOmq0yJ%*4lJC zDwEzm!oNhCzXmfGt|ExD{0*h{3>x(E_6QXX^(gNUD(M<}NBRTK9BuAjz|lJQ4CX_p z5c=*h$q^Ewv}aH+auWZ1xA525G*pifMM~QPPVcUBt&GKFB*w($?h224aisYZLFi?| z8YB?L^h^lThNNCC#tTrB(h+`+%4}`30kl~U4@8&n_$C$;J8;z~79K+1IO{>85vFfL zg^DA!#`PA{`u~{6hspp&!n8zOSkSun_MKN)3!%8hiv;Max5E%u$p{~{^6R^3$1V}3qvLw9404^^ zT7(!LY(s($5FD@)#o%JB{i21o{GVu{QCFr~eq~*a$pzVf>Gh=f|5wtL$0d>eVa&>3 zTiUi;c4%5TLRo2Pc^hrpAzs))npd`&R-TbaXgao5ZkKMOr6kI>8m+d9WyRvC)LLtF zk-3PbqnWIVC>CfeAn=a2b=`F!Sm-cp8~d!v&u zxTq;P&9*B7(^o+K6;jHVC)5C*P&k$yKqtEH{WMI=8^pmIi0;!H=mdgh9O@Ti_RE&f z_D5J(r30A$TkuW*FyR>s@Uk~pTim;?%4g7R%L4PrYP9gheTtkuNSlqT-wf_~3e(?I zw0w`~2%5h~e8(EOkfsPKT(W#7Zg%DYq%1={i0Ur4AIgPx;&5rWg*m0y6kGTxyHt9EWLJL7W}fQvQ>ZY2`aog86#Iu}SaVUq zy>}~4#32)b$|lIqeGxi#7Etrmp&u`Tb#Zm45glDk&Hyglit}k}df*S5DVZXHz>h)N z@LosKZ2w{$FTwp&W=>alCES{>`cf?M~H#cafLx{lH#p+FE^|dPKA~2JYxcV zXR11bXzDOjcZifyDzz{2%uHTt@aY(0M$**4(sopuCpRbzJjjEjge`zB!Pcat^dHDS z0J1%*drYcBq`br83EL)TAvw-T>&rm}n>^<~TK9X-u-{FT%a&%4Dy+{*ymVBAfak~4 ziT^*eiDj}`NcWr@Ynd|`bc^F8;I|lM=L3;)4#w~f8Pe$lg1y2rSdkOm?%|l>k zbfZAA1;{aD<*#yDMP8uJNLP~y{3s-gz+iksb`rIM{JBm@0r?5lb+w=A@^1sZe{Wn2 z4|r$0yA0JOpK3B*f3=Y@R-7W1A>6I0#(`e6X&1l(@nB z>qqV~1(&97Xw+FCQEP;$5TosV_*lxpH9Pn zev74!D}3VKWvEBn84r8sknBpO*FnJn96475B6T87Ek|`NBxkmCxTxt^8eDbD6ECbp zqPS>k9|mJ40OYIis#@%01L%JE3WG|~as-hRG?hWbqNT%CL1a7QRzyx$_tVsC^4vB$ zVES|7IJ}WrUDq*|H?`v{T2@QIR5r>^);%CkE=lQ%HW8*s=&Dd;1rYGuNSsWW)o{ z$V7&nzOMgvzj3+#1Vv8*;J#A>SVdm`>@t`uf;5*PcyRMqtb;?fH(y4wo*pmj0L_uW zU)fB`StFePG@;)id!;b3sL53*NauafUZ$x51yx&9S0S64Y9JLXS$4bybUU9&6`h!$ zH>eunzRCL40BtxuXwFX!r1Hd5;|IF%KbhYr2vHNf8HhAhqw3370JaHFN0HxRAgBP) z`5;9i^hnu>ojzJWeliG2aAY*nCdaOe_p*&FlQ1)YWEdW8)IN)HyGsxzBEDY2xv1{` zV@B?J(Dd7=toz@NHdKc>GANX2?+*D#J5q}M4jGoQhciCPeLZP>?1T2Wm#*&s#ekGo zGkTSjvr4Fkk=~Udh^NPGN5&4s=+cq3fNP11ZL__fP?$9tN(u8WrbnPU?>Dkha=-{-K}>k zu<=8FfTRX{CEO{rG^8v(Q#<^bWYPyXxLHz@5S}9=k+Z027ekAS^`TIXz}js3kY%;a z<>32wx3I*Pw;`@vQDiZE!1f#)uuPIy`=&JmL6Pf9{t!>?B~_G2?NMDVh#t^Tt?E(J zQ&7sniegYE78o0qUE3SdGLiZ5TGq#x@@98DHG@LC64WNshjK(>7f<*0uO~v3Zy}cv z1&_@ZoB=ARv>15x^do+_-{$N=KrYMHoGZigcR!R1n_Tc-PJm>{9PGo`OKs-l?yecF zVODGtV58pDq+eIIuw)m+Zp1e^iFBBn1TD;Y4Ojwyq$f^Wug@U0IFOc)^wZ6090w?- zLb?dkD;_g&udgxI0>!0eC`BULXW$>^j1zZVhJ!ct0!pvA`n}4Y8B?|kq>X&e4;g?9 zU)T%TRH6q-<_gb zJ#7ncV_#vdYxDI~*0F--oT0E8+8;O)Sy`B*toN*mqn=fEv!;%j+GLe_RXWt&E7Dp$ zS?qc(b4#goq}edd-r^AFu}|#in%sy|I1(`!CMS-g8o11&^@t-I=JwP9MR=}i+kizz zI3?P*f3-2nufwJ!5O(BGcDKa13Ljg1to;mmId<4g4i>S}9&!^5nv=|nTiP;PtsaFO z$PQO0GYcyJNa6HnC&ZL2u^wZUmr5&{7wha_djxPzdtoewKKO?I+s&ZR9z&8B`*4ll zaWqpe<;tbHg^Frs%$*6c@{CvlD(9d1*5NZ$)=B4Uyj|gr#7_~-hbNZvwJPyFX4~xw zMA{Y9#>#OL5=5V;1dY10CqBjQp@hBMH_eaXSRCgzYcroh4wqJdcH-1)t!_-u?7N-K z;0gF&>LVI(Td44SVg*UJ}>tX^zdTkhpDuHVdz$;%Q2=(H+{>$TCA zKN>@Pdn9gL(UD9)?HhJ?L^8ga%K0E-N*1{`bDUcwvzIDkzq23S{n&Hg|jARLW+| zTZglG0wz~m@JTZ=IwQlM&Mr<(l9=J%M=s%40Kxlzhi4&=OEBx5Q3B2o9td8*&#^>5 zHz5kP;pPnj$)D+nZ7>Psa1C!Tz$l(Cx$9)+vmilK(Z2M{RdCAH$F=fSt~Fa_USjWT aMp(FGvipJMQEOMzb<&QI?RDE?fBZjJ`hjx* delta 42364 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

OjjB;1cWLy41jbdLs+Y8M{0~ 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 diff --git a/assets/schema_input.json b/assets/schema_input.json index 957a041f..8fd745e8 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/crisprseq/master/assets/schema_input.json", "title": "nf-core/crisprseq pipeline - params.input schema", "description": "Schema for the file provided with params.input", diff --git a/conf/base.config b/conf/base.config index 6198f4f8..8bafc0fd 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,9 +11,9 @@ process { // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 @@ -27,30 +27,30 @@ process { // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' 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 d203d2b6..d266a387 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -21,7 +21,6 @@ process { withName: FASTQC { ext.args = '--quiet' } - withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/conf/test.config b/conf/test.config index 4747af85..f6df86df 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,15 +10,18 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // 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 diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 zcmeFZ2UJtryD!S#x<#o93es(Ww4k)maRbte0-+a?-g^xY-3myTE`8G_KvA54)F1tn})nJ5u%TA4Y;^!^{48eL_}p#q-Umo0M|F1 z74+PQh^X8N|9_jcWbq~ zzn+tZC9B75nKdz=gQ8wo9GJ$P{D~3knlI_`-PRhCw34f1oYDLr^;oEbgxa#A^J%*2 z>FfDE*(~JzKFs$t_oeLz))qDU?s}%Q?7b~3Y;lUi^Oy-2@3g?joA4Wkgb6-2=ih*jub)~7yZ`T=L=Z`B`{1jhkB-iSjea94&Eo9A zxN59pv1p_}RO1>EC^q}Z2)ZI;b7JV_x4lMr=Bker2+EK;8~!;JO7re*@ZkDmoV878S*N^yX(F@U1yqt?Is3nnV>7}#(5pk`V3C) zWhB8;CwWIwsVIjH+`<9=YA(j&3DgQdFOOGU~*`36wNC&QDv8> zr?h2PQgnHkp&t^S)q^K!68h~`$PjZW&-Wns;Zlw$M2sc z1xR!u{m|Kih*|Hht#M@eOMM#8O*={^6b9k5B5^eBsrnhVHD7XZ5BWO&F?q(>Y=QFl z`f>yQ9NCoxZCH-1F{#mz_j{QeyY~4h*VeyYZ#S@Z(Pnb7G=ud!RW)5svqM*&GI_za zzn;8LkOTT?``1Ygt6w!2;5arK*o5k15cdIJnMg)IQhF_zVK%!ma$z&jL zZt>Q{!PqKl^`Qw?nJUOEm@@qX(y(TwSJ~dqW&M@7-N4Wk_wC4izx(xJMrmNjsl$XR zCyK&INt}7@FzNAbbg-nW)sJ>3->I1+2~YdlPsaS}^X-H0GR_CEsw`PGjpq`uX}8VP zJ)HC34>D(z{KR9;E&z=@?@q_|I{NPOj~g>w!$gR?Tlu~F+L$Mk%}xQEm+{&T(5zkH zacVy0k3w!T9r*p2sgX@V;^+PfUYUrEde07XSV=KSDbkIZU!j!Rk3MQV=h-!y@kWVB zdYkmu^fiU~pp#ixe4hBEMx7^LdHa z_L*14aVIHtrsR)SO?=&kQS&JR#^AVvln=P=bUXEIy$QB&!s34znCV@y(C%j9V=}SU zoYLHn+-Lalm0$-=QQ}a(+2dR*{DPF+)J4y!ukiA_T%dF zVKEk;c?LWheG#A5{A20}CKjMw5G%2}cT5@Oce=wqdobHC70=kY7}dxt3diH9(Zcwr zCabx8yObHQ@#e_wjl%wp8s_!Wvxe5f-Duin@obgt>qOcqN$$@{X^C_rEDh3fmM;|X z$zu4;D`{YRbaJ?o!KkazII&|th9v5MG2Mao$ytOHtW+wo;XJJdtLuGjg;d020qT++ zpD}e&o?SeKSqR`}4`OdkWNC7K)Wltn zbwBrWGM;bBGm8uP_RiqfwvDD1f+uRX>b=nTH9Y%vpg{ka0e*E>%<+3!G3#s*-1D>q zHg~1@BT52a*L>mVcP>6y*0iX8@!3tDFJLE+sRlnU(cl``hF`0Q>e4i6P8|wKmqIqI zoY+a0V*Bib0`F9nG#sR(8$^!IWLR)cE8@7XZTN%L-ucJ{9yijy)w5Pom%XG7V<^PX z$Z$U82w0qgcGmld-O6*e)?pm$g@!6`Pps5SPKccjDf(|vX9zcLs7t!7cyyckZI#R* z#lj(HqfVeqyZ+Va{)>65sAb3IQ%a{9W^_F!5!;w=XD}ZUHFH$8=Xjw+VE)s$q(nt> zE2^aDYki5`e73RQ=DxaBNZ6CK?XKCv@V}=y(g?YHnFaHfXnl}Lo;36@?471W;&#Se z>pE*@M{Y?CevLG8il9#HXG#W3>;o$1``EYBY5i<;JlBqj2M8Y2!+6bPj1(S_bOksY z<34UQE;=Z>KiL``pYd}5fpOOT)GJQnXfNiAc5wgJ>F|$Eqw&D*Vmz+#mM0oFD^`-^ zB~SXe{T+5hd$gnKd7Afo9cy&Lii@syPDFDK)^V{iWEAEO@?xzx1bd`ta z;$(vG+=i3~9|D=GX%f~<>eOVjy~-yRAhLf2dR8V<@M_`C^ev(yOTg{uf=L3uyDb-w z&)l7KXS_HTo87BxI}fXF{ge&5p&IHk9M1}eNAwqw)`eZSOPFhqjS70{hyE@C{oSN$ zam*`-UH3RF-RWEP`^Su1q#n_J{AncekkV4m7YITf%QHBo60h@pk4N4O}hhf%rxuIZGiQpprVMal%h7?8+cY#L>pYnx6v!EnuIgInW` z)w!NuTp;fz9md^}*x@K9+`^2LO*bZp1^?BG#iS@(4i%AB6YP023T8Eb?M5K7ElSpe z9-wA22Mm}VwDkmECLd*}a=7bCf(}@SHs6UBe)Xvk(+hQ^^unj5JBeo$=><{4PBI%P z4_9XQ=XnE``;1Daa6f`~rGwNj9{YXY)eIw3G90Ip+QEWg0%?g=i$UHuQ?Qc0OR0!w zv?BvlQa!QMyI*IP!0>goBt$xo2^hlD&wRp?$=}}#?q~Yw z{**_|5&yL*Epz|4V#SJjg-lNaIx_{sCL3R=_VH&_;oOn5J2P=h!0enu-i%FAZ- zw`Hm*u6N*}&A7pAqr>-?%0(lveb{r8>hpDmex?Yo*8!-%1?YV0R~VEPBFp>)ba=mv+2(#>WEy0yxHZX=Cr2 zKmew%=^>HsD3BtRR*#H!@!TTGcI&fHrVh)P&|X;>)OHML+uWDn(dlsDjXa;5uBM$r zdt!r~ig?5iGbx!GpH+kdG8k0%;~)Q#0L6wFROJ}^Z%DvO3x#yNk13^&ccd&l)BP9h zD5cU-qZg-rV3Sg&?)`x}cI3`zw#zq{-eN4pNf(+?QuOG4oZ7zMGSVqOUe>`u=GfKM z{xPCciJFw9%Pk+uDSoormR&c=fS#hGOk=RGUtizBOoY^8P(>!Si|I9i=1ZCQbcc)5 zgE6UED;+b$4u&#dhZjdXwO3tpG0QaQwXrLOx5YP#TOaS@FP!h|G!z!Pbv?hTp0eQL zoUsiv4d@*Ck#ID9-ua|zPbQepcC4a>>9-bJApd()Wg%}hj#%A4pO-q{jIJ$f-SL7- zo&=keG_jhq$Ty4e|J^l6j6TQ=W)|~&Ei6gRn<{*^cFG*tS19#kHpMD7Y;wb~!3_%X zS_-3NQoGiWCX!M-Id;Nsg7oSi4VJ=Hi{bYNfjnmTq?IyK@@&_uacfb&8h@DIe70-Q zZ^KaT(4UX*vf7@A7CY;P!IVGIuXPRIe^&71Z1EyHO5&^=jUUKHF+h&m!4!dOA+!Ed zfA#uQ&p6vD7|O8(?5`bf8^gK)6p`>+$c*yG?Sw29;OD+tp}kDD9augDAEXWbSVoie zpHF1Wj8lWfIZ}mx%(2XREqF9!{fNd&iurAaoQDMCSNo!vRHE8wH%QLLZf9u;ADqnxOaAD#VE%Yg z?Gb?EmGbY}a0|vSZPlF3z6;Kf669Bf%h zlSGiY-}E4LFurm_CJN)(*l?=uX);o&R&qLuzENz?9I%S&YQ2>rVhx#c!hbvWLL!CI zA8mXM$zjnnJ#Me@-99}hjxCE!w8|9w{SBlj%Miq#dvS5GHP!DxO$sDx^4PF^#`;A! zb=bZ1pyj{R#9h$r7svB$QlJqeF1cp*ubT12UZ!deKFG%1N<@S2x&2UtqsVz zn=gF&$D4i3x7&vdoa#^cS?bQuP69OpspVPxm*%@DSWf!NG`o`y^R~o1Hvta;#!r%i zvEB~Jsi~sJ7Y35P!bf?OQin->fAk+TpU$Ow1st|l9|i2rrOneBP3&aDyoUj3K{a7! zOYpnJyYD#nr4GNJ;@$ce2dSN=eS7f-VptzM(|Ek^ze)mPVrpAEgrFs3mL>f(ZwriH zCZ65HdO0|W@2<+v9t?J=-4U9>bvM@@Ew4uVZy@c^Ovw9`k|$!+CTAn(u#4kC7TVTB zXuy#d+GC@RIMaPyp|Y2jS%RJkktCracCaLqfs^i^XFqK#3z+d}n02*VDF&My)vp)lNzWx<< zGB7hEAH?7_joYR?>+&+JIas*%Oiux%kr*X*B=8N8Ulowx0MkRK?pR)K1F_m8>dSe54 z)48k>#|F!OV#yOs7xQNQ@1iun5pl;py{tx+o044?r{W2O{f}3r{#QS#4bf(|f9R3y#6*0YY) z5Ey{M`dj)yHl)B{sdmvti^b0IE5xFx%jJM&5w69;`PGy0vGk2ztSW|5H3~zhXO?mn z+4mo>;Y7=4&gC}HifyMO`#70u3H6;0|| z!l=0lP|zVF`bfxm{%i98943^7y4Iz};Z9F$oY3iUI*FIsYa=o=nS^d`;3?*wDxi&| z=?oqs6uDcd1e_e5z7M5q(+I^PilSRE(T6%z<=U8%sq63V!wELY9Rj%#Y@2Y+TEJ8(f_Kh0ih?l6E6~wDl3~?-5%7>d{ zKs0XHUeORoi5+U#M{kE!Ae%|)^dabh1DsJI9N~LVXp*8$XlOfc6J+Cc?}SM zsc3N~L7hzcpXn2>b(_YN=J*C0N}$f_NINTiV!~L}nA{wn^XfBogd5hu!G?*THg^mF zFJm@9m{X~X3t5{7 z#lWIO++R8;BTByGl7U;fz|JBB^*4R|bLvm18x;DF*U`=kyxbH2nD*RIH5AWfJ4^5o z&Nr;*|NreNKo$fUI5}~n#Xcbjr0T-7MV;wZXA(QPt^`x;=ZK)5^`AFgQM?7ry_(Tm z0|EhWs&cYJW?|uvc3af(tfuyDf$28~R=HOa#}3Edru##Wwm0a$Vnk=_8+eQ; zfyq+GVt0Twr^QS*HtI+&&>_<%-Gq-!{iQr-3LYn-6bqW0VW)>%iat!2IP)Jd+LgnS zgI+jJ-I9HMJ8Z*$2FjwK1T0RpF%U`&x)S{3HqRJ z5^;r?VoA(k7*aP@tzB`O5Y26jv#x54xNH;E`KzzLxC)FEnQ<}IR#w*>9sq|zFzZq< zdM1%ynXvcLfZ{Xm=l(Op?=XGV8`BwRiQ%@@A-GnjD+y3K zN2Pm011b!s`3368%P&MapW-PDulXKfpeyRXNjN`lKKgC%CplwE#GrRw#0FE#Q4>R+ z23B4CmO%uy8Y@;F$hCHU6+oJ}_cKgm|4Amr{$`38ue-?+GX1T!hd$w@x=z{w30Z*W za@$MLl^=f#*oR+8(&a&`E@Bj{{1O;DPjj$g9U7~{m*?^Tj}Rrc^wc=(SycXVT?bW{ zUus*6{74fo{nOh@zQyv0g{)t}Qekl*>KXQYCI9m2jqge|&Ntj{V?gLs*_GkeODYhf zW39Q1L1~vk+#E^S!nCyO&z9Wh}2=K}`9#{=`j&)^}8=U|lz}DqgAteVsos){s zDhK`>&pK%cVuhO7tPu7@Y4|yXAdHs!(uKDuLL@i$Okc6Gs;2456Br??ZNZiONAe!~ zvY5w1(C)E9fRmpWgWU2Su0u6~9{@wIm<-lha;uuEN>&C^FJ#^|oopkg``l#i0&{OX z%rI6Q>l^9J++K19D;HrFU#V9o0M`MBTT#-(q&A{|n-`T~CgAFET=$E_&pIQTPE;J#&nrwf2N^I*d zH)ev~7d=Sy8<@syK<`PFvNtyfa#8^JceG^ua^o%!fl6R&j--jGkz8wS`EgfEZouOD zr97H059Dj(#$*$-!UQLvb92wS40!wJc!4K~lq-K2h2rXunCs?SjQERnvv9Fs?tF;y zWUTcQ&PtDMbsUY6_&np`UGMS0ZZIhnDh~p{`Bryj7XS~*R}%z6 zUO^hJn$_-CW(;$)hHu0ej1BNqv^o%*D2gR6zUvCZyw)ddNB6JE$;okhf7PEEz|dRN z$sP&o`MU(L_I8mDW33;)3!U*;HRm$zVV%%zaDn^*Qj~RdWdFNb;^fRhnF&{oeY-tv zq$p~pZw)Ls$EWKsEZubtx_9bpdCfsjdy*<8_Io8VtCIC+8kk@Qxdti>xnu}nRYJ-y zp8$3YP7u;u+YlPQ2`o_>S?mpXvd0-x!Z3=}>ceWDg*e)+#wQLE)Uwhneo z;*y`VfoY<#lwT^k4BP(ytfI;M`FoYsedi}L{1V|Ho}ciBs=`@vtgnieHdpWz%Vyy$ zlnn?k0KJWOnlJD9>6y64*X=G{lyl&%pV8Uo&>tXw%1za!6*YYVB$jR$Y0XhB#1mVx zvjd8N4X~{Dd&28RVEkCw9TLN9*Ng!?9F88l2Bl)w%7!97mtx5(Qx%1u6h+$OGa4#qGGGI{Pj4d)5yg8F4O2sfu61u0uM}?$_nH8=0St?`ogZ@1LAr@*uC4Z9(|dIQ z?OH<_%?PD56K*Kty@PQT;W#)tazY~|I7-aq)tQ($$#Q?{gEbJwJK3mnk)|l>XgmJQ z_POHzee+4NEWu0i0zUFmLTF(zvD3B%sp1_F7 z<|O7{-oZ2>t9k~zX0MDQ(4&(YZ#~baV{$ah?o_K1p$Ad`PAvgtuhW(xO{@bMjNb>Y z-k>lsDx?xX;x5*9RSpJe~BwLtb79%{p~+JTs5HZ&#({u>j3kAOLx*Y zW{7^+`OD%vhcxVW39F$jZ;I@H`3X?>Wwt@269f1o{V4-t-|dX4x7L3j zUHltoa@jqToWvn&=0CF%6%D0h50m^)qaXkRMC&Owv8iG~$}1PBgld3nBE#Rg(5)8n zga7!2@yjoBBoF_e3M$ongy7N1L_hT@!LUaCXX6QLZFKcq1r;;Z$sca}zfwaCji7PcbfW7H9p`7Eh$-j*7-=%{5f&}TidFWiMr=NYvc}Q@gh_z)<;^d&F zd@za3ugvK(BbprUX|)`Rk0&+6)#sm5S8a7;dzrqn*f)iXpvW$BVu6u)bR+ywtGne@B61Om=Q)yvb`45S}|LKt&5@)wSOfk;LhZ^UofjlQz0h zm)>a9f&40n$;-ndr=xntY3nOFGmA5POfiIsfgTzT*Cl zU{P;It;qo}n}IeEA1&?GRONCJp3=_!ce2$kKRZonNV+tS_uFPWzeS zhqSPws(Jp?TsgNT7yGtphSz=h2-}y#HTWNE#@LHFs^pseT#RfN*P8yLUm`jG1N5s* zfU25qv2akmjD=Q`s4SJxi@i`xIOCdT5B%W6wj1Fz8)Kuv*iB`}b^(em~z zz4~VcUB9M5@W}s3-SOWXu+*?)Al7p)Bw?jh8_#s)>lYp{{b%_vCY00=iC@I3$FcpY zYuOjg948l-C~}cDxL!%j&X1(H6ZC7U5?oVLQ<)zh*qg)k6HdNPB;PQcbVRXucl7>@ zE`Ga=^8RPrIRE!3E#e-v8MTy%%a1yk_k{s|V-=5ML7(Mg#S@LA3;rEyjF&X1w*^R&VJ>2%B@{=W9BD)oa@0!_Gl{G8Oe+Vki1QQWd~<<~Et zEV_YlJ=t8VXv>#L|FKXIJ)GZ1(d6xUoSPZVFOzMhM$6tgyhWq=@}=HzWm&b4o8R}L zQd7<0PV(LqaHYNNcXtTN4rc2ov$)VeRm&}XS-vamGB^G4tspa#HrPa5#22^pb?s&W zS%!p!fba6R+WLMjkeUo!qpKob}#cMpU4(`C+U6R8i>qlJ&Hbh52enW<`FmyjlhwlfIlxyu$Pg z3uS-Qau7K~%A$hBFocIe2<$LBIbEI!uddh9(JX=++R9aM|DO2#5*qKh#Zq^~O40f6 z0#s@~v{DPy=4^A}ieKe(Idu22Ex4~>p=#u?w_Lx>bHE@Z4Dh%iKrDJj2IJ+qNDIxj&WPRXRSaNz$JyFkpFK#gLAB6G;4KKql{+5w z{2yWKln-fjDCc()q_W&mmIx?JvpXPb{)hR&ok40*!M7lC!&?b|=efwVb@r0;FeD2( z*x!h~5OA8DEVr>6PS6o_oYt+7HY+d${lh@ruB?hP=`vq;@uLNGIb%@~*X54+`NY0- z35nZLFQArwtL~;t?sb(T6k;wi@v0FFLV}%b1@;p|R%u%8ROV= zRWO3*fG33>>}We#nQ5Vk3gY2ODY5fL+-E@ zvWG%=(;1n3UEEjqSDn9V_C*FMSXjR{uYKa`>$>D#@FacqRX4qmy{)y4&Gf)@V_BVr zvNEa@r<%e5HW?jhEb!SY6v|~N%22Y0992I>~ud8In`Lf`QStH3E)x@G=`2&AraN&V){PF%a=v)Pu{I zuQ7a;TZAlAgDiVUO+`B+z-8%M0kCiylcazP7I(w|^h*D4Sn6R#-jd7ZMN@iJo=6v2GyL zo;~Df{e7CCta*U4B1pD0lfi=EwI3CTf2}#(`mwSD-u-%XLU(&V?BTG?P-Fx}R5*E5 zcvSdpxqh`s3e`yRJ6%Efp|NYd2}SjJ)h@$9391YRLSU!qq4E=W9yx#}_KqRcG)(~r z!+&i&OckDJQ2El}fI8mdeCHPcJ2=byp-dT&ZFDzLuqc{lvh)^vKB2 zL}g}~j~QUN0Fo{!0BTTKwrDjx#j6KVb>MsCz=!G& z0?uz!q)+3>Q|KAM0zy>+^zjMt4}XE)t2HIfc*Tmi?$;KdI7B#Aw9_O-Zg>98L}4}% zna0Es9syWr5+f5RGVqawtNUt}*r|Zy#6ay+mEGaSGMmMOW%88u6mXzDD_wlGT6!zy zpLOrO442P{0J&IYJjqwrVrEF87ZDTT<9iz5xv)C#pUTTj+d73+z7GI`Ehx*q&zxS(F>^b?4*udLeSbU~XBKKi_PI+| z`R!s3tpv7gX^R3~Cce0vX(P9@UCS)XwG6mNX_eM`6X(`UW>OMp*nTlrcUU?`gCzDr zKR0P?yj9z#ME0=e!>GupM|%&t{Qcx)sN)wVzW*5E>yxt5g6NEc!GR+F(!Nysd6n&^ zN?K|Q@t>y$%H^ z1}}eMB%-GY`CK5%Pj}AkUNRem1zBUE6y}0KA;6;dZu&VyB`KCwPfdQ5Xri>Osl*$@qxi zNUlL!r3OOxC4C`xXPqL4Ec)b`ajpfaw12E4xMZ6=Yyb-WN0LL2RUzLj zAKS$6X%>ekm|3yQ$#-`3N8ah|B+0f4bxDc4nfJcHZ{dlBeXYRL5bY2afSAF|vcc%G!HPxGS8==1)_U|T zNvWWGt}f~OGmCtqW8>q3f@5Go0Rce)p>g@dgop$3UUF3))$Wn6gRX7M3GQ}?tC)i6 z5#2fg?U#)GsvTF-;w zY-Nw9hPGMC9F9(W5F-PUEmiuS(F06nlcE{I)}b=%A7_~A6cEH$BClS~DB|X6Z*IT2 zIpOX|#S?qiLR2Osk#^=DtNG&ym+&FR*Kv8P<@ep!ZLZtJSjcEO2t@V!3dE-*!yhNO z<`xWq;JT2z{)iLD9MQ;&^p<*B%Gv z9;zH_>TGtlGO@9MT_xDkFS4=QaZA)){{?|_B)8Hw-q)H3IPzKPiHM2|2?0GNX^+EI zRf5>q`4yE?GgaPuK8|(quyuVfv-aF(wlXs_w}4}Na=7tnIA2P*pcwxEhcBp%Q-6rI3Rc0j@jnbz>h=|(@M6C7U>fx%lJG+#q2Q4af?@H7>c`6Fw&JpwfW1WFvJ!J#H z%4DH$Nww@r6h6K-1K$M;1QOi8g)GMGRywKGssy2=E7s%k;ESt|W)#O-pRtb)vf8-D zxR2gI3De!E>)xMZTl>m(C!Tx|_c}u7mC!FmY~hT4&*t)mO76L0VQ$Zm)=+l7>+9FH zfQZjFC%h{enbPhuNz~lx(beZsjm#JG@8B$iw_cTSX-?0fRc}lkFJafCcF=wqJsUd8 zMn~$&N!wK2xp3mXuom2=TlzBdg~W^u`*x0IxUuITUpwpCCpIqO47DsRfB}i?8mn+k zO?VOK*oa)bFN6F7oN04eyGiZR6q#;01`nk`g-ro<5USFo8#dEMz{N z)FLtwpl>inBl;{0syyqD<@D`l$#Jfl)EJHXIv_2TJFdCbB1tJq2^~2}iq9XvxA^o{ zn0YLREmF;vJ(gM2^u>gGlpZOM>hd=@e@%v3L4CC$gdajz11>;t>9B37u4gN+c2EaN z7N{PzCO`Ov_B8QVS#5&Tgk_TYRF@xdXvUjab#=&lP?prpL~g4|3*W;OC@JF8+0RZoP6YS5=9t%X5j<@=9s zJZx5j1kEdx-027b#7vEm4TRT9soiaOv=y$Y#MT=^nhP%|fDdU^7Ez#Ft2I{)2fQ7` zW7SkW?%wkBWnL)w_~|{}hkUWMk@uEt@uS1%?(3-dK@CnX)?b$25^pIgnsh^HS!eiB z?gK|C)llrf;ga;b^r9EOF`p3yYRe*y*MIBz1Bd-qR8TlBdJn2ur@`?phF`DfaY8;D zCwmvCvRQoWVlI$tetKk}o?MNTX9H3!Y@C`PXWV>S%$VZ{%|p4jHr#UH_Ryyow;{{;KtygLxrG7(#ca)wTYK z-Y0sN6h;=V$f!GPone8y(zPnL+1N>PyLSs(y=`1y*FQ1lR8e`3s=cW#m$+c=3)Tb3 zN7!8_R~a%Ek8tTvTN6~|O}BoxmiKrt8Mkh0)vSD{hV=%yVvnL*%!|m2!23pSnTfsT zwQ-^GnI8{pLlWXKtGU!5h-Pk2LFIGB{oj=);~!Nlji{=PmP~Mqtb8I%bKzXfV~y`v zhZpp~H7qb%5D%?Sa5$&Vmvl)54qk6v;W{B~UlL4_ z81zf;L5bb3SJPuc^~%Ua_>tB)$VLK>FZvy&b%*eB+g)qdbU(k_R*eJS(gX< zJxL0apH$ji6sKDr)n`3{aNlN^Qwkhtd8DRdnV96&?L&8b5Co{7; zvmmb;3CdwVs8W1GMY~|zn1^&RO1t0hBt(ULtGJTf^IAMxRpD7HU;6{ij?XXdjHv`a zw9!c(a5cYpR_vk~eKYL+k6gM+5023LHvMEY_p}y=4k&Q!!C<*zC^2Ia3C3Ji zL1sbM+*p_j602gKXP|mF$s?~%_vnUv zj52~Vd_MWnLq+!(*+*-Lw~%K)_w>^_onjFhcBsl-1z4eAVzf$ZoD9yB+;Sysedi;%NXg8B1{e-#F_eG|zvUc4YC2OlIpARjmdsP@u05 zr*U3jsq00uHQh{r5KWSeeT?KjD!)FjzCJInzFM??L^jL9NcW`?Lr-^4X;Bzlu&Q?y z02M)ULBT=3$s#1Y9wAzg8-+0n||g$cI`eH$?LAzF9rpS6h3c^3UB*o~o`&^2bx~YDhrzULrno%G+^r zq3*RFmK+#R^m@8?svWLq){v0z;Az zxet5`c$dkiO>9f|6fbU>MAIx-Kjc(r4SckyK$1&9Ug3)mVCA8Y1>GV0bcjayWKU?1 z;d6`Ui1G&YLMmdtb&4SB(ffffFqD_1Okq%F3-y=7Xr$+V_G^RS{QgC zXKOBBq9L5K2Qnz3y##l~^f-q^dVo0JTO6ysmtjFF?tQ4=Mh9FhB)1vUcK2(Quo8ja4+LSJ)Y<8ba zuA}O{%Nltg%FD9=r+$Zri;I)XEgq8j;?A9Ap0;b5j5DIM+@eRt2of>UaXBan>ZY7* zVXIJgT25e+vU`n3vm9;wD-XX>S5Izts;k7?q0ifUbXFZ ztu890yFSO?daUUr!gp4FD4cm`X`a_ImZ)oY+O^`2sgS=Z-sfHvxbI807yFk_pf??D z)@elHpxFmUW>0G7ey-bx)DpdGO}*NS(z-#}PYqNxLg1@YN}fvhUtBLqKc+GUT;OW% zO_B<`R#rcqET`udx*1pLFro0I)_p#G&G^C(J)_;ph87-;WP@^*-yrWnJiD`bUJP4q znYR1%sd_A6GDQ|qpc%2A)KEGs;Y;857S{2jmRaCehP?GUgH%@%HTz-B?uYLBrVgP} zH@h;%V${F6+&AJkBG1T_xqmSr-oU0c++uF-EFD zir8XIv!Ke#t=O)W|8PyRa?ZUc=)2$4uI5;dauysN?Iuy7nk&-rwtj_ zbqWwtQli>QcMkpbLD<<#ef^2AtKAu7XV^+t%ng>C+4%Wb9$F58#E^h`#n9f!Ps zj#E`k*Ev&FK`3R|?l*-YBQmL)w`1e~thLbiWK69X#vg3g_b_#aGcF(hyvqEk72SD; zu~^e}9oE2m94b1C2NhicobMMlg}U1!FA|mJle8de9Xe&=-H(MvA(68kA0+z|@_;-# z&(b*W+h^U$FizY_L_j1L?db`Rywq|kJ8nKA;QjfTaq4P?Nw-t8PTt*s02E}f>sbOX zogFNsq@})oI`S|>iHp=g?5*Ri>{ zfB@dk5v}dqihux<=+%{)tOw&-*p;K#;k0?3?5LDv#-^~Bshk-i29xz)oSMVH0{UfE_@k=$Td6mLADmA5HCS>H;8Elg7$zuRGQ_PzI@ zO7f{m&I)ngat~(Q!A^05yQ_P6@m+rB1*YFo4Y=~o+^59v4+%;&=jKhGbUydp4sH`1 zy;I`gK$wj(W`yp3Yj2)F9^2eqVW8uZJUv^BWHR7|G0X^Vuta6p*nh6WK_UPW?g|4H zCB73}#_XrDiYLG?L;{a;A`xflU$&e61X|e>FFS;FXT~~Nej^;8D;T+(JOGZ)-YCl! zDic2c`~DhIAgQ(OXEkNRICxKJ<<&$(86$}P>l1x?yCEt=imFk`Pe$TW&4$L37fnx4(%*=smL>0uH114m_}1+sdfuU!A0Zqzr@~p)h_Rae)3fnObHlP6C?me#TrO zCzi%;E6iC);zLiV*o22GEXIF{NL2tM-wS{K&aCtKGNF+iOQ+JaXYw|H4%FRB?7R&T z1KbAY2p!11zb8icU0Q6TPkZCL#ztpG;uZYw`xg!FyJfa%ZgI;OhQyI`fsLCle_S+t z4uqjjj%#Gy0#Ipt92R{W{euP*jXIOxh~qaUFM9L1FgE=XM~3_=Bba|6C*-;_c4HdFiehcxh0 z3i5W02=DV{(OsRR{NTp{O}%1D0O?=QOrHWG;?)^(Uyagt?*2oVuw0Pnoh8{=0EzL^H|PjFP(dF&|L7WETT0GcVgY_ zx1oq}^k1#{aimB=*)HzvnsDIHm*|-4-oMfmwO_ThrZR-9o)Q(i2K8OOn)fj<5|I>i zrMN-NYx$b70)BeTtJLb1l@(5>DzdL{44E$Db`c|6v{j8rk`njaT(d`!Q+zvdV+~uc zwOi(`abOznKOr4><!y3?&Pn`#_&3l#Gef?)=p3_f^Ui;vfzaAOR#H0C- zC_m1^677NRcZrEQlhb%^AG}2eIicl$V9+BoV;Y&B{w1=n5~3`>l3tCJ_iei91O5sJ zlfRNrKdWsWxAWWhrxQmbuci*ftO7n7Oc}WO%lj>uVaUiDKPF^(#js~|dl-WEB(b%;R&%wBZo4s*Feg>11~T!zk!KqRO#H>GQupBCvQnt=r+5tC~|_jcwZextGmQ=bxnE*pJAI!;`6FR9y=}o5@Ho683hnm=2#mq1!K9 z;~t#M?%xqQa&ju$A*O`A5Y;)3bM=^-yRtSfb`+m*&?NHD1^&k_^1V`zUUp zBQjO}+aSl}wx4UqTg2FEd)wQlHv^*CRVd!3FhGRo(ku4))jpO12ugP&rZjKiwWfRW zYw>!=HK|cBWxk2w*r^o8&xo`u5~q#7C$1%JvzI7GnjkBxN}y~)MsK5FzthqT)I+i9 zLQUJe#tLyOp$}IIr$A@HkBqga9H3%Ak12)kQ{#!2%+*+9#70XhbyV%2UkvY~D0|mM zOicCza3cpNf8-DDqMQ{MkW2mhk21pBOx#yO@k>+nz1ZeIc+LzQXaBES&Mc^@EREx+ zqiBmVE)B9tyJ8C(1%!qWVxu&JY>L`J5QAF>)IcL^2uZMMRMdci4TdEsixgYJCJ-=e z(Lp2&ix5o$VGm(RSON)Tn;Yzh>4%xBd6>6bx9&ano^!tXf8ROv|DAg`e-7-iRZ8cm z=ml-2W49d)ss}v#)i{V&<{UK+J~DWlkr^ixT(|EP4_lGEv+7l6mX7 z`rnoA>yKLGlLdp#ymRS3uTeX~bc`pDe>eR8u{uRKGM^xch?2hX5Bxxz6(kXw^chB# z#7h9KbJ}H`x6PI{mOk`b>sfNpaaH^>y|DfmqK}?)K;U6OD{UDN0WtzaUnVZ#(spqZ zVUr8UHtKKJjt*vN1d8xgpq!jad2C3(uDSb@6AQqAzw;SdN2f_9m=Y%6(PT^t2e zg=!ibR|V#v11NDo)>*m?5o>hTQnM~G5obZpgu!tGj(YQzF70x0uAV}pwc8nXX9bNO zbd)kXD!8@U4%A|o<87&s*`|`dnky@hr;;ZAo2~Bu2g7qn%3zfDbCVL7wu5 zo6Tn~<`BAK((ct9AG1D;F6BcA^^r>vEU%LrOxsOA%-~5M z#X&|sFPm7+R$g01eYw6pxAtP}a&bw{TPi%16;?Qf0?g2_F$#<3}XnXEmOcm0X z!{Mfdfq*I2fU-a1TZs929@5Rg{4M{z@?9Cko|M^ReIRLnw|jnGRaL}G1ibFOa|A7s z+co|6Dsuoxs)B@lW!!Fy@jnb5RF(!^gPXPin?1IG|04fYi3yRqp(DWls)4f1ZERc>4-}4==@QsXQg#VCX`Pjnxeb({{Mj4zJ&j-1gzqTJ&ZexJiN=qXShYkaMiouM$* zihdgSA>BBh>UG8sz{fP)%#B>6)ZZ=Zve3ylD#}%J_s_FUjp|p?zS5nme$D^s9D%?1 zd2a%1f&hF>jr5)w_Qg&=>>L|+n_ZGJ{}HuB-aWy6I|{a6W`Hnb;cfm6{HJ~AA5ZV+ zO^P4X_D8eT5KMzCi0L0n3XE^`Xqp2~J~>=whP^9u!!3KaNy^5JOLz)Qwu7R8tf2ks zjisRN+T82EvVNsTX1X}xJ+r&E1Ana8Qpn2QD&fVB#c4QXwtxn8H8-fA^k_PfU1K3X z>IqazcZf<=_}R)j8P@aQ7;I*x%o;+#m133p4|1XdRsx)DWgq8qRCq~o16CxrvV~U` z$2#Ub_snsmq87&UH8fBu1S$k8W-@S#nO1mvLoQ#oa#qzo1j5WsbiT7n#x9E6xctup zJJ%*Op$=MhR$JZqbv_dwGf|=jmqw4H=Qe2mw@dI%LXLx+E_G`7=_yvYv(qNF3xrZR3f^9WzweTrZ7WqEQ>&+*-xiy?FBw3-ZWJN4Th}bQmbtp<+ZqlYjQPJ zzNJfa4MuhJC8X&CS?MdFHTA9?=isQw$nkr*(2+Po!G*E?U$K}~)F4_CUzSe8@O3kZ^Er5IyP;Rw( z35J!UL`-m9!A;qPy7nr*dZ@-uSCrN8P)B_V9{n(?zi#F`+gKxs#*j zIH*Icy{ipTSyFy2@?sB~?5qc-cE2IAHt=n!gOV&jwpC}hxH_Kx% ztE2W0xmBmGr@cJg0cyO-?r1X(kr9xzu3+5V>1YzBtuK6Ra+RToix@7>2?<#qlBORE zbPI%~d_ybB0wTJa@)1vVt^ENOxF^N8TUJ5l82Ua|j9w5GM!ns$6;8y2MsryfV`-qN zEznw|%v2>{C)I{qY-dkz`?}Fkw&fQ zBN#PretyOeaJs1{;WawCpt=$SI;XBPp7InnGa1cDG>a+B>Gj%*6DIE9rWl)H8{q`X zVd*sdD=SM1z|Vy6zDVL-OqDUa_)7$Y%8SwTNc$fK$`(EpOnd?|qD%^KF$$pzZLs>; zv5g|58uwUn(Y{xXl&jn#G4$KyOX%KD$tr1&*MWVUnx;mKg3#9O_l|8-Q|n3o{>>eu z!`5^oYumbF>)9rC1!*L0!jnc)RWy#I)ou2c_^7-jK29i+|GW6{gJ3&?o*?PGQU4@` z$7-B=gU6FGBh1l6I?5Y{G*rvYh!1zuM?w70^DH5@`^PXicUM2_WGwV*Cy$rqr&KUs z;}joZDc2XLy+|3^isfRqI4kTS5mliCSf3Z_X+6tS(ggtRztKx~?*aru3zmUEkLmby!sE-ZloZO_Y`t>6Y$Ly1P@lk?ycSK)R&6OFD*7$sq=57)m6D?#^$`jN9!w z$Ftw}yzlq@^{wmjQf8PnYd!0E?%(f@$3O)+@w>P1Z=s-|+?A9NQ9?mM?L$Gi>i)-7 z;FZH#{oBA_R~(hZpP`gM2$z8$uA4oTeTsro7IypWIV$k;%@-1yjwmP?PVhfhrcFuQ zP*C1rN{T#HanoBrM|UIK_dfItqc6S?i^K#wb=ab?`wf!gEn-xkev5WY+aryTcai40c^)|>K>E+ec<8oTH!6Jvz?Pot=)BPAz*Z5>N7QUnkVti;^*btsSu9JUB@m~FS*n@cgXc6=9G3|4JYC@2aKBbRSEYonlO za7Xp=p9IuQxwVwM&PZnCJ#%x~OjH`hZAy4prD3VfDMm6~t%mQtl1`0vY z*HSSM%jBKyrWm|{+j6?LEI}Y3GvqKEDtH)kdJrmQRpWguolR0j=(SSeI_c4Jel05F zE(*$y81yR2r!Hccg3dmurS^Q(HErm&J9Lcb19agHm=hjsYU3Xc8JP81a5~KKILPL7JFyC z^*y&LQk#x%OoY^&&%X9NV8Xxp!e{Yo1&Fv(yp%lKzl_l9%%8x6n5Y`}aGHU!@%d=C z%jwtMQ?X)wPTTQXsI6($fxrBiWKUnp@$!V6r|EpIV72dz`))g5bBFxBNjs7q0h_?| z+eB8$4^{il7xeGQr?`&Hv+-V>O$Tf^Z*KOwdfAV%mO|c1H&BWl2sj+taB>rPpM2Ks zBTjfYnw03!%t6XgR&N&9DCQ*5^#-(%(Jz$S5s>P!v_TB(teM{aHrGek#kJFI=zD-| zcF#h8!oH(eZMS`5FU^Vlw!V6P zQzEMlGS7gS9xjcGDfav+vr-4~BAJaDGUC(`T{j2v{X^#xw?pNF?_27&6{QB-d@81T z-jvQ!gz*74P}1rns(}HmjXUJydQr5B-n6IgyBo%&<#RShWtQss{dV*2*RaN!muBb} zZBwb|QQl@PVS=EU>8^+Z)QZ_ATzx_hx8TNFo3PrwHnftOgs4nG#~VdD!^6)nyJlbO z60GZ^q1Vss__}XBJROZK>0Z}AUiyRIlw@c7XzjF`2{syyG6|e@>Q88&&ncr@ zyL*nFhnc(7S6a{Y@q4H*1@~P-uU$@Y??fFAT^^bIgMnpt^lYt6P)Fa+jKb4p zZ?a(y9I-9h^0XbT>Ehd`CI8bVkHh_97f{nGrvBL(!@$zC_yMt0=!XydN3CR@_mZc# zzSR&{_SqO)=z+GUr^3#2Z|8}7`RJTNUqcfKh?g2YU$bK6U3AHNE#Iz@u-ounY9?{0 z-hv)})tBIH+I?|E1_`mA!fP^WBqy3Y4a;XR(;wR(FXiVP^nw}5Q*d-Ej6L8FeIGK` z%;B=&-IU%>;#5Q2qwWxVl-YB)%VX;np!}q(Hrr5%~#e840K*K^J zXcHTx3)+WF6rWzaCOLOne!#;jc)rSiKz3TfJ8HH{jDli7`g34i??`x8>?ZHGakeMr ztT#S{d9E&*&kEl+Jr9sDc9uJ{rKTST%iDCs3SLZK9zkHq@v^LBWkl&IM4ozkJwiOb zFJ@BFr3c!#LQ)h73OTLoo<_E(o`IQKgW`QBL8B`n1TD=mdM|4BpF!RqRe0{f z!}sj9;oIzeC<8$;nc#j@&rR`xcC?El2&4SX+3Fm*)tPOw4vf0Cqe0)YKCS5&Gt~@r zw0Ch`M8b9}Ac`y5Jh^pQ;}Om0p;gUQhyK-E=%sI<`?H{G4fJCE8Bg0~Yw`eyyzlZ$ z0{*b26E)cV%nm-^VM5cm%T8daTZY4zIv?Z-=4^S0c1e}bT|tl0Q2xF!2)*JqxoqPu zzwg1BW^PPsEACOnTf)3YM2VZz=W7+7O@!6*ZcbkFflHf{n<}Jb=R0k%wKvp8K{95! z$pt;c_|DCr`-q29D}0Jo1$0`sIRo}!YjT$oixKNbi+kz)J?`?l;~g>YNifUW=0DG- zYBrDfcnL$m0;t6Onbp&hY^G8DV;IwC;Q3l8RRB%qZ4@Cjcp0VdUOW2yl8X4`m3NTNM5AZhNpzK~ z&uW>?=+MOHR+1U}-QJq1&EjV(W>ck82ABBmrymA;NF&-Rd0H%aM(Q(##X91M6JK1h zncX~}GIHf%?%Gl(hQdac_|HqCK*lo7_1hODTyeKpJCZ``dDdph+Zf*EjY@iNgKfUEl!h{(dmX0U zNbz!;kR{sBr3x_OwFRwzHcMjq+Qd^|;_NSb_QkcJeIirtLHIsFi9?W?mw5}-ntn@w zp8ke;z?rkP`_|2xrp?dKrxG{l6MPoj=vB_NSmHOjeCA(FV=LXNeov;i7%CAVc28G9 z@mmb6hyFD8B|rL1Rd%Mk%g!+s02W^9s-9O+^623Mj%Ds*tiBicI(O9ew4&MLXpmsU z^r71~MeXK;ldWsM2Wu6V=byFJqzATP#3zt}Dvptv`red+?eANkC&_Tz^}X6lIz4QT z=4|gqkA#pk4_}<`Z8htj)rv+ko*pr928n7rCSsBi*6(HW;cM+m29P2} z!v`B^9BA)Z01N_^hi#`)S9UH|+jgs0bD&Dk5vERZb3*!ZH>T|x0ZVYP*VcijfX(_@ zUGo`;5LO${U%N>I@>!{7n%wXrt*M;e83%!iq%TYl2Q6T%O|_HmG6MnCTs1}_o}a12 zmX_+frrnPAIVWAZxGn5czTuRDpLn{lWgd>$xrCl&94NcW4WeSC4<8m=z>K0w~a56+P1wDksK7nRmdn4Ee zq=bJC5eDh$Rl;@wG!s7z9W8A>EKEHl7uX-2KHbtCX+rmz6ZCCyq+AJ}JL=rJ9XaG> zc0_4LFR^}Nqu(@GPlJ{U<%~RiBSj!!U+O(`X~9)oy?SiFzO8#ni7%Pq)>~AwwRPmE ze_7!j-)1dPzAo*;;{0NBCUkzAQ$uN$Dg)j2qs!sZXqAq8_glj4a-dQO+U3WY9(o@K zpZe4dRjqQ`o(k4zxSoPv&Q{9ykqo5Z$7Yp)1U;p{WA(VZs*`H@nl$cjcABq(>)V z4s?5N_!w`pHsiSp$B%E%>iSm8TTbt6;YQAcua^$WT|6m2^lZuSvvmlU-t|Yju5Ca5Cb>mVJixq34`PMiwUGtt}AZ4}nLGr6Kod{&6Y zL23K+JOusXTZFb&$KkZ^W+s%0(kz*mg_oJfTo7q5DSX1X@*xE5(7!Q*j*vk2PPuCYwgK zvyhqQUV+>`k?(d+J}#z)d*3Qfo3=a9DO}4r_BxH4XV_0)Gl?0IWpq%Yub)OOVcJzs z@5FQn_}c7jruw>Kr>!mumWzMqYjm9{gbh+4*yAQFA z`s72sHv3!!_uuPgnCw$EZFA~3wt-&mR~@(I9$pBYf-i)lQkcnfn=dui!fKp`f=qMf zGFt>Mv~3KG=W#P_DMC)VM_j%4>g6vMd$p@|Mu$n8G62@#JE88MO+eyvu>Dd0q4p}r z*_wDCKkHd0uK2x1i}li`xrDIGkxl>2S{v!n?{=e@WS*C+Df7D1Zgah99)mCAHRME+#PX!(3lN1tyq=wT z4A#BN&r~(!hl?8D-(8q?pbPBoHJJs7`@|k~muzS?`<%BY3SNMFYl-# zSpNE*;$dCwjgys>^i6)kf_KLvz&kOo>VZ$g4^g2h;ERF7FZdOpHo%Xx4-x>mh95zJ z|G&Qk*S3oEGcz-Fb#*srb?`S+5oBUZl{ ztFc@4{$KCIbmON+V<1@XIkP&EV_d%Z0;RhHk5Kd@szVHg4sn+t6ke?YtZ=e*eNt@7uFX{LH`VP z^yuQ?DeNfC5hYr{6eFhO_!#y4>pYskSNdV*DC%HvK6rS&(8|h66ttI=%Cy&vI|72Om90UCr7>1mT5s8(#7L*CZeotBrN>eyyZ1y+y3kbcz4m? z-vfEW9v<~|b#Ecyu9c+N*w~Yk;0f+g-I}NLF)?J~p&BI4_yh!^1j|KeVf%`?#l^Cf zv(LTd?p?oHTwI)S7k&r8o%W^hPxSYbLb=HYu?J!Y7IGNu8gRMHF{b0PPqda(o9krR zfCnMf6Qi!TJs-u~PfeG_a3P`Xb)Ooz&ok_V>L=2FGr426Yed6D4eK>rI!RThXoL4Z zf2^+%$BEOJta5P6g<@7tw5Ju^!y9>3s}{sORA`w4DiS%(2m&pAJtZrv1$}_V7~jip zOlV{Z8)9#aa}htS_B@PZG!k5PB|W?gp&jRqcTImZWJBXR1eZCp-`6w51l2PLP|JP? zM$46ErF!W+LZau+=Gv}Q_oJR`^%63KCl{3lVv+O3mipCrU+{*qhztYzH!4Ls@KlV9 zp08Tsu#;Of1_r<4-;nw|U0ANUrWLkt`PuyYD>oUUo_8iJG~f_f*>(A;6&+44G*3=T zbFcz(rmCcU8N}ho36_>(W3DtVOQVP$Bs#|Z* zzeLHps63DlHS0g@i0LH|%|vN`Za4Nohl=1@0dJZp$=57}*hGUn2NtW5n!(AZ*Vktm zgb#drNEu4r#HCy(|6t@_DQD^g*UbT-8!9iDXT%o1zFtNZxGX%fxzTzQd37vPC2Qk_ zLtZd{996+m**lZV_Ps!9M#nrmp<4kB0ZJL(mKp;pt304=i3{bIYumgICnbo}q3k%= zLnN_OI8Z6hEj$$h`9sW&(#zf|)4A$uDQX)jgtU_L@|SfKiabuqpk*}sBu(z^6IGS& zVGu<$C;=?*AyPZ`c)55`TYzyxjnXG3D*#(2~YjfQBB=%Uc-N3od4ttKbpexVfi(dnjDP% zP)qx|aoO*D;_YcU(mOdDB9Dz$&}67?NX@m<*)uSEN{rrkFB&Lw@4G-`4dPsWuNcfI zBg&^zY{;aN#>#Us4ou&w3Nr6q^XFxvA=R`H4b%#FA1tlnsitVzCpKBH6?-hTqo#US zQmfRH!n0Ebx<;b*87&`E?4wSGru(E;y7_a1h~btRvq^RYgfcZD<`*=R~q$@dq?Wh%Bt%nbs1AI*a|w7 zm4RUOm;mts1-ZOP?fOaDIt19VbY`!y%b%Z7U9MYY0PibYEos;ZqDp-qD5jY%RU%k0 zf0A~;2pBOERR`qNsA0f|6F7vJ;leEZz{33b5<`tt32|_%Q`uU$a6!E)&g$#u&Sqis zjAgY}3tMtkROU4yPgRMY6rtJ|V;SYC56ie}1|EoFyY{CaiW}OyGFQ=o36(tAJ@tw6 ztvs04Ll0~YH<)zWeFiq4Z4e~I?>kj@U+>ZbVPZ^wLel_o!6A8pQE#O`*m*xGm2yt|-dK zogz9zqRwH56>=3Xpz*o*i)8CNc^iH>-a=8&G;LookL4Cin=-g;U{(gya0yHQBN*#V z-+9Djl$3?2p?)jnMYMI&ZTFvgu1Ol6gztlRnVYgu4ydv7d6NiN4Eq)WX+7u-$D5hG zzejcxt`LNOA>B-m&f|^isE63nL>{UhSZ^hY8QNd z%9wY=@rL0}Gm4O^7DVQ;35b6}ESjs#M4n=;_g0~g;S$;%PlI=3#T5TN(1vIx?RG|& ze?9D=$d!>9Kz$#HT;vNmrq7>$K4ItKfesHZloYtZd!?*Cneqz4G95ori}yN13AMYs zw@=c+oYS`n+4=%iskM8R1uwzArwQi34YnZPTKkws->Nji~nkb z-JKxW#*N=)Wo1kCrt}!YlB73}wlQU8L+;+ai|AZCw&yw$6A}pUS40VjfesufM~jO% zJXCarj#^q;E2~VlFdf&a8)YhLd6BDOKe4HUJCHUYvD(XAw|k|Uvh3E)k+~7JUI;{P zbwQ};*;OQkIPt1B?M0N7QYl{P~Z32{(ltt)fva$`&O@I;js25et z^u|d}?fNZ&B|_gU27y1YynqVGMFqIb!0}1ymy(7o9!I`}yT|?LvRaAB@yV_=Xo%l4 zc?lGXp&^M;o&Jqo$9=ST3k1{%9j8m#E;|&?kFc>5r;=f58-FfQ9GaYLD5&n?feBtL zqZQx9J?999Xtt42MeV`4%QxS zvSxn6oF~cKdM|UzA~2LWuf6@t$S}R7#DE7TE~@8b%&SIqlZvq_;??0-{jI3mA9y}I z=r&f0BuGqvrgGJCXGuOdyt*1G`gG9nz;-B{QxrMhhcmV+MZ?;@M`Fm{VbG+f?v6~q zn|1Z3w}^WEF8(a3T?nOX;hQhz#`u9l?S!oJvOxp}ol}Vpn3zN12FD^2R@LN#~aAA#Z%DCzEEK4h?B5E47AWNEtgHd_*&qz=gnKjQADb(QFEGm z=k_MMV*S*9_G1JV*GIwaek=EA`_b5Fq8BLfUVB69jYkY&0#7~Ny2Beu93_J3W-B$N zeR`OMwW!P{pnPjYKU$V>TTNAmijMm<|E2)R3pki=YaH0gq}I-}1f1N+deP}gO##jI zr;x2Gsn8DMs(8O+7&a3z=t_b2I)M>89E!MRKTF4dtw7I%e^Y_L8MHScesK~fXOvdL z`=2Ozb0TD9L-K^B?@HSb5*`W#=Sp!`IlRVIIznnIDh(#t4B%IkuaXtBaMNNuZPnMb z>gxG@b3a8e0FAuo#Ut0rE=Zo?x_hqjEly%-I#sJMF)*P+#$m_aMjrpI_IxdZd-zaW zGc`q9xfmU*O%H4Pguzr9TjZp60LB_Y5@O>;=?#C+5|j%@{;B>rwE^`fWpT_*B#5rR za!?D|4jL=|Re#)ZjA4XA0c+?@7 zrL9%1YoxjaPml%ZLv8RuCq9{T0U2^&Cu3QoB*ty~svl6uS&zTQ^{lWSmUmzUI0I`G zH4RXH$_lev+b9b73#qHj$ZT~Py1gje3k&?oi$@zH`Hd-UTq2oFK&+{qbykpzK|3{Q zB@Ob#(f>ppxZ7+8%_td4ch)l=2>hNm9J8jV&3Mf@_XB6hV@W+xIl8U?E~wpsh}$8n zv9YnNOtCV;7EmmztE&-O1T#B3_8-@^w6zfs-W)|GpTh51otY_I=_rvyH~gVG`u0F< z5TcwEJhbSh5Q2VxE%X^!-=$wG7rrN50kSc`k*4*V2KYBG*~?`NETlx4Ygux6eYqg` zZ1q&@Lt=9A?dxj8(VB*NzL$mj&g>cX{XG!KjjJyc5`ulwSSp|J@`?jgA~CVBShvbj zwHQeqI61YowaxZJ5kEa|d_Fwf&pobc2|I(9Is;!59O8&^{H>A~UK5h8)H~E#bO(%7 z71>&06own{+sY2Et*uq+-D{;K2P(=U3|8D{W;Ie&CeR$DD&e}f)DI{*i;Jd6fydDB z%gKw8zgWun$ukL#+w$k;=Hx&pCRSJS z7UIDkZ9wVOYpidSA>oeuv^__akbqBsk1v9##B&{Cob2qJY(v2ud_Vyj931TJWdLfV z8mzLia%fcD09lwTb%t!V#iwvcqA9n5(vvA=yYON#_RlsZ534sy@DzM`j+{*Rz-0R1 zh@or!v&7~_A{)eyk$}!zc1e*j9Dh(HxYmnS2 zQ?TOqoZ+2SHlA=}foXlWR3%eEZScKDL5yHfaK5hOVmP#L{B%b`chJ+qwbBmc>buNx z5aoj#$vGD3UQxcaCugdTD8y0-6G)(9oV+V>Vq(T`rTEv1l(+=1Nbhl&{ZmF_ z%pZ4@l_tyRMfXl^JQIk1AraetCnEB?X9k#F@@By6NbZfeRO*SSr;(G6pvUn6js2L2 z^_XXkn#*wVj$e^_4L8NQJTu76fiJj8u*7?Eza&)LEAw_IN0vR2%Af*hI`-BQ|-sIu32GbNaWR!8W# z(^e18lCO$alRw7TJbpcCPsf`XR0T_xqnUK0FIFk$$ER@Y44ftz1ZBF6J;!ZUZFwp@ z(J1m+D_5$d%9X#Gt9MzRlGFW3fC!h!5R#C@(EP6}mRH|`b?R-&TlvSRtcdGQ%fJ$- z77Y{wt#4CZm_4n=d~o`o6fe-5t_%@MG$sGvHWgjoZV{Y1uvitC!9`TPX-tCpIJbYN{& zxKz6lvqs8lQ4!_EZDx-XA6ap^ml(rgL;Jc(kdfQOFf#U54)Wom=4)zbeDnzk4RvvL zt}CQXQC{QlHdUIAu^XhvpC!YsqTDz;d*x%k6LNSJt=G{In^tspzRzdJ*H;%VP!+W2 z3SeJ+!Oh4h(-99Pw6L?Yv$n>v$x2K~DJd?tv9iLnag&jiMZNlRWJC>t-JA2^D6_tl z^`)iz>x7ZZQtUYl3$H4(U%_jW---y-;b!>%f=Yd@j~%v=HN?g!>L|8INKQ_EDfE-U zTy#c|0Tm^`un@B_d}FCUlYxPux3?EboLXB&00%-D(@sMZC_hD`^MHm2@FpZ)DN>B0 zy*2O#ILvPW)}*Z`DP{MP+uZ{KUF%tE0P!Qnmil%U1D)yfryl#om;!>Ojprp}Sco^G z(E-hDa0FxNVqY$m#H3NzJGU&Q8A*;7-Z)~!Fdim}3@WwEVjj%=p?7=W%jBB1?xT+d z{%o|EfKjuaB;@TKqC%!dI<+=wU2O8B{yuk>OCIKQlH)+QFad+y&V_2*wkfE|b9Nh( zIsi!=7R}H_Z5O+^I7$Sv22GIho?vb+DH zJP6)BFnqZ)?mN;%hrh7QnpziCncZrC1I~ef=N9u9yERF!25LrxL^Gonyj(03v50h! zf6BQRZ>TD_7`|e=Dz)BfdMD`i@YBr|oxKkrXYyE=ImB6nu=Cc+7##W_O-*@^wcHgl zyh8zrqkyU-qNd>OTIX~KexxXJWvF19VwhyV5iVyloo5Y2`YfM!Xti09UN5ic1$l+Z3$%;>iTx!rb0 zULiG>g|rJ?byj@y33+{3zf&#nGG-MrT*_i!F-RHBhZoo~KrJ$1Fx)-ir~nwgo`;!Q z5#l#@-E`3!h0yS9#HP$_e=X8n7AOD zg^kMw-{3pMo77am+Wy6SH4i&4Ec+>N*E3`X)7JSQh2N(!li3Q8L7+hgnp615{MiP1 zHL#zx)Qz*UvlrqQ^*o>>=-xLOOMNQW@6ri!2U(>p{lEdJYE2fz89qVi=EyTW+zU zR>$w{Baxi7K>9eBVOu2xOPZchP5(Y%8FtSqTu}~p_zH-&_uevjA=h7;PW12BY}Z1$ z3l1wF?C*aG=tNwKU-@U53^uu#$-KwQWqZm**gXO*5mDp!s}S!hm`G^jC}${&26Y&A z_W>GtDdpRtXAuAEh<9nPTS#+Au|aKc?KJhK;k?*@>r38`E5!g7H=s_gf1!Je#&~j3 zOCF!FqT*+-^NAWr$pMFg?LXM~1wm%;ewq~j9)%^Y70p-%n;4^|>?G0#pRMzcn~ujW zgn#Z)O`Pjx?%}kjJez`mz-~P6W*y8iqwE>rd|!PjWMx%oPB!(A-t-S85)L|kufnUN zX#lTU-5mP2`&=??rI#I6tCMcAHTtXptNIP9#dBMiYR3B-s=|gJ0wLS8E^=v2O=1NP z3d3z(Y^z7g3)Cv%Yvm(PE@Xv(hl&6h7+6lKS1oko?0W^--mdWW6H)WHtH zqena(0y+4QqT_Fuhe=z5r={)Lm_;gy(N1O6c-`*q#sT~Rprp}TXfE>^1em^ z@ZuQlS6JF)dAM=;7+>@Ycc9k`C=mi=fXog2_$^WE;;~`&_aKY#(XAu|Xwm?$@w?cH zm$F1GZ3Rg^q{CAqG0?zXJQ-a)X?EYk{`1B2-dbgwZ|ro1btIzv72A5W9xd!w8ZM zfhDYjv{3U57gDQR|Ea2K<~(``s9Q9%^9nyc?F9UmQ?L?UiFu7iBVR^?jZDx%KL67) z7BHU5@JoZrG$|wlNb7nMMg2>m#c34GARf!YKrU1i{VaxHn*O}UZAR0W=nr38(wB(1 z9z1#d2jUWs$ZWu3@Fx5_!(%&UKzzGH^&0WmP&BUoS%X{e>AXL>LZ&&;mVVFSN6!+j z+xz9qt9>gcr^>>@Ze7*wB*PjD`@r&suA0Xok`clMS`CBPy?sne0hH){>kQiOs&4f*+X>FIii<^3Tg z#n#p~9Z?~(v$LC0AmEHIJh1vzj(6FQXOlz(xYptM9uhOZlAr6?`IlCEr28dcIP-LL zoSmITkcp2JX)3FC4AO#tvaFS=pO~14^dtfUZ?3jzDl13*(1|Fu_5WB-Dk_5fNgm*C z`OhSc{f(t^W=9XmC2W3~+p1!B*M$&itpNT@caWw=xSsdwo4!6PyXIAEczzW)gt$p< zG?{G}UT)}b?j0+ROprydSpH=&Pbk$-)-&W@l`SRVWl~f9h%f1Ywq1+;vUp+sl}Ug3 zer@=L6*88L-G$C)SZ5PNA?(>uDW4Sy55SRPauXINCgw z3`mG1^w{^1$_CZqYQ!y-QC!7s^u07KtHO_Ei$S)$ewJTkGKzjtNVH8{`|HW!_|kkP zGM;kBZ61iOfcYBcKOr?s1!ka+X6?9Rk(~5Sqv2M!+~4;Gu{09!42cvM_mIiWdJcom z^cPng;}I7u6i;_qnXMhIWiJY9TUmIpU}L0IDZhR*C`J-)7GBRhR(n-;yWs<=YA9eS6R?za z39lg~N7|b|+lL44!Q4Zf23!wi^!6@35dUJ5KDGfvxPvQn-9+Qa$$UOZ#5&pMy%sR@ z8vz_o@Q_MbaT~7`ag78RA%Z6-KI*9J zdk=3+U5c^=8UKe`GftW@f}3YNvZ-rD7S&s_+VIdQ{P@+*{Efr;^Q9kE($d;@CPI1F z5IYiQE$A!2z6&iS@8G68detTm4m4N}qdG%oYo_(s1s>zaEd2276sQm@1fUc3>FG@+ zp%5_8aoDd6<@@{J04O?7hxl7(h_0&*ru08l*k70f*yrzxrEusY4Frs56ICC;4QHC^LBg3uSO9cY?v)Fk{Rve4!L zIh|cfrhD932NcF)3`VmyM#wcjS$_T%A)Qm*fi4piK zNG%{dRY^vB&qq}ox7X-PXfGaT_BTq3h=O@zLPlyHW;iPKEFtw9g}ec2Z85`x%CuH% zAf+M{GB!YYy{_!t_@<6wH;-;7o`+UkeG539QTjzk_nVy*Zsbx4S8xD?=TQpfRe~PE zzzl0wx`MrYQdS(rfCk4`-^4gk1*g47muU8QIs zbl)W83cI?bw!0NMAzS5@zP71;k+-;YFc(o4^rd`yu`to0Yl%Z%892f4{75|UZgeM- z5q9d+jMxBjilqc(mGD_)mbHpQTt!vk`pVRCte>R9+7=~oH*5(x10G5-+mv-`51ZFy zbqtu@sdJKLO%89%wpLSO4I5ag0Q}R0e34y(;YhJS9&su=B#NQ}&R$!FwfZ`c7~J>+ z*C=l^KhH35S!yU{J<6cwRfbaDeegE1vQB(?TXq_e%VT&k5}EpsyeT}Odqv(#e}WNSLsXX|#4qM^5(OCX zv0;GRx4ym}5)zUT;sp3DRaI3sHZ~b|!+=b)(4((VC@maT&XW1uch<%$h=_r=(pqJ+(64TIjLi_UZ7fNiR_W; z>c*i^oPpsDQ99}sQO8zVF_p3r;=PjUJVH&c3 ztXlM}{=d>lkVy9ckz)RtX2_IcL_DD1Bsczw{lOr8pb13v^D7sEmPg8^B zu+-4tv2m-LI*y{CzP@3S%2lo5;T=xI+Dl7%fwUo){=}==4{E7Lha~3I@Lc`PV7F6lk0Dch*+& zLTjd`-XfCK71T6fA~P5v@ zwe}q)3=_{C|8D*ox=44fnHIz_`t7I(Sp-j)TCQfe%Z!yhoXf$Q%pzBcNqXOcDoVBZ zfwVX(j`Lb)cauBf8`Bb^^`I;m6}hMsrq|pbUbAeC-^kXGO!RcfD>FW6O^Vr6Pt_TL8bS*QSUbok1spKPn97(M zu`f@B3AS`5iDa>)>{qi0zbb3KCl1a-u z`W2{TSOklXmq1zlJ*FNo0<}+Bu?=G|CXauD>a#7X=oMW%Zydm|;bIMpEH~lg<}$N~ zIJ(K+@b=Y-l<94J8hRU#0@*Nj$^H`^eGf!YB@#WOiD%|*6!CvCV*YN4{NI2+9Ygpk zN;3?vR$(2$Awhbdm7+>PzrT=s?3)zTiIzJB*IeiB ze1%82N*XPlz0-g!_pAL{cG-%Gia`(VpRwo~fz)EnikyxsA zfiE#JTHH&z>;n%vj+nw=>s)sb6B8cTz^?fCsPSavW@_r_w9n}Hd*nVRKZj>XX=$o? zdU-dqs79Rn7f@8F$#$x9)|Nv}&=YjgE21}yIuB(p{Exzf_k;k z@|I*~`Sei{ovr|#!+zqSYAj%HWj*tCCQW4eSsW5ep2sepN89 zc8}AB`%lfQ>t%j^X0sQ<67;*}&_UEJ4pquW@K$8wp&|Jbn*XwjvQ=u@fIxMX0T3=Q zwgAG>8k3rv$Y^%RdudRn_r#PgB7eXW92q%j?*f^<(;uE?pfNQb#plPIS8(n7muwf~ zendM75555+qcUQ{i%>S8aiV5Ao~g=A;qWiY>Jd6ftV?&k*J}Tg-z_rq7?7zdg^Pk+ zs4(vfN~u_vXv};##Y{{TPQbEf`p5`25(ffo3M)7n1#I31$r=c3RmmQZ(SDyk{o$d~ zE zP~2h+p&5sT(E2>ry&!a>$>>*!(IN$rQTDZIeyxP8SZysRVW(Iab} zWu98km0)kVV2Txmyb1|rpl!vdTJ6TaW?3RtxicccWo~{gB^Z<$cqWVpfnW2W4emEW z(B;&;w(r1>5|^BgND2qcJs(%`AK?5+{+~Nfr3Gu&@nM(!4KL|W@AScWH;PI)@5WK1#JpZVwXm|XGO!w}s#Fnb+wUDa8fC;f$y3QckY`UL7=2`i?%yvE*DGCSWCqz=|Hr_5R5yxxG)E9x0Ig zF$Bn#KVz|_g@8-;r+=3Y_;*1F--_39QAW0x7J&!rC7|lSY!(qx4WyW@^3$aId#e3^ z&!qdEevXj!H->BEj?Nkm4nP0|LzI8P*~sZpjIC3PoD$^vSO}o4%kD0Y1i9Eu#5=MZ zV)IevQmWUK0=Wh3^;4=N?9$uGQ8B~ZK-ge^-$@SGRnr_FA5~RV$f&1zxLPvtD7Nc9 zGF!k!r3epuwK(2oYGkETOXtzS;mY>re+*v>Lg3oD(3xN)1S9AOkl99p%J25PDANqv zF#oTZdhLsRBF$gh-vS)?|A2*}kdQZ_^cg^QY-L~zqk9xC5FtCoV9AUvd$GdupbAjr zDA(_=W=sLQ>Nx)->DIRQER58zWRQLa2o(rW9rPj>`f%3& z3~7zmB?z9(D{!SU^B^8Z8cVbeG^4{AJalq{RXl@w0yA6T83JsCqqnmQBdBeUAaoCUQCy4(yz%qwVj~CIj|`+;wBz z2&LRXuaWDz!XMKH>_r6j3MR-88QK@jYw->mfidcCdNhMF&oXcvC7f9aGJcqrGXH%5 z?mg6j9Ndh_;wwBu5{oV+fLMr57l?r<_+tf(I>rt0i2KQtV!wU+_DE@ee}72{qw8=Ge2VrekHh((m8dC;yac0QM;ZTR;%GrGWi}$&nE;n6Zho9I#i~$S4!x zsvvi=Sn<~Z0>Xd2Veda>?q*see=&DJx`Wr9pB@=X?VIVdRi=k?Mu;tYlmaLHVSEQ; zHKJs8$XykPsqkCU{!3@5NTCkjDuIOvrj~VmFNta49ZpFDwd1X*vJdLUDorE`Tb7#E z(h)gGsMd7BMSVAQ?Pzm-l?UC+EH05gMv)+g!?lv0-o}O4$$;)_zz#tJ6NJneO;#|k zcV|I|Vw5k9DheyOY33$9Mh_`_20)v=C3&+19$1cH^-^67btEHpCk9sJ-lXw_$W%O3XhRC$M_ZTzqZTW1rMQrh;#tCrYJsL`$&n$ zV4xJnZ7Q*9ES8HLx@R$8Wikv7DY?15J5Q3iSH+tqInTZtJxF(@Hj)Vf_SH$wzPQkY zM_dg*Fh*Yy2&9J(r@+O%%eHY z{fdsKWLh=Vfau|*|J=&_@HZh0A!rggMZJi1)D#fHxR<{&l99~e@sAxG$|s7wMSWi| z9tkE~EN9v75A&HX>u6%YcL(y_KQ@JhI03PIKF~5#=u9;Mdjb&2 zi+Mx%rZ4$^ZUMO@uKuwxgo8W0o;-TlSj@aXgMlE)8II+=K4)&q%8tUqjR+KA=I5W9 zoP34=2Vjq{H-B;zJPl~NXbfnLh%9|aPtW^(?vMCCT;2vigC~KJ7yJ+G-D9s~ zHhJvs>WP?|3OInj0&IYB>cw6c5LEa5nqr}8Wb>!asOlgcr%h2)cJ3`M$J}5NfeJ!4 z!v7|;#uMad=D5uRtAbso<_Ni)t^R&<7%=$2rJF&L^7A#@#+%ALHXB)iF0SDJly{zC zO{H7kcg9g%ac%cTYalgN&8m;+>7;sRAQzKcsL! z9pdSp-)^vD46y^}ZSo8jw7~|G+H&sxaLztL2KDbbZ0?mi)ClgWC9UwIH- z17CgkS`JW8#g)EVwxU^5+l4f*{DI-wYZ4s7KrOL2cH>;^Xnc(=#Kr}~2eBT{{rL|d z+T{I0lC7_u7L1*@nrq^;#*J{QMywSe;GdeohQ!z2&9Usb4zV2je%+=8FuN-Wo4osyaw zOG%I|3KuP~O(nBoAZKvJ6A99jOgB+t0cj4+Lo|*^>p>a>K0)hdeQ;2Wa;}St#?YC# zjqH^IvcbLR39D`;M=8&11eM|>vtMMy>F8U)yuzWf&YxuZ`#?v2-hm>X!;}?Q@tB8` z!fOmsT#}Re+TGXCMhEnH$C*(=;_j?TzK#I@Ha!F&iI-)cfvO?E8!?-H!PX~Qs5H>v`6bfxFdo14N~kp_>vNA47z9PSn7%X5y^mcq};(@5$Yu`t-EWoV}Nke?`&98vC<*d=66R>Ot`8# z&|CP-8zazRrzcgs{y+q9pK1zgX=wp%_ij|<3-f&wm;7*oWDp6(W09gQ^?%W3)zQ`@ zzb#zM(6}c2hLvGwM~6Y$Vc`5p7&xHw=!*Y~s(2_abuNrPxCD|&3ZLl?0n1h_W93W6 zFEtnb*4Fnm5r3wf;R3RsCNFa5`GaNrx3MNj=_*sq%2s7biEbNm29*0`N+J z?>wQ`W|IhmA&~T7V>k%FP@5# zIm6X<<~=8J)gLm7G<$|s_klLm>pVM&mt!%X>V{ z8OkVf2)fqC1ux?`7>>0(P8yDl9eONSW-J802x>U_D7SKUVN8OdWk4J=8-pFp!QLzd zQ%7n6R@!8d(e^m}AW)q8#|XNO65@Hx-2Y3)5!FR3g(cfI~Sf_55# z2s+Q)#^7fO;5k~N$-(_(>659=$+0#FiLsZUhdqwx`I<~ zHJ^Q!4_~#&g-4JXVg8$PBEVpu$lIAT^{I`@OmXtS5TUWE%kBwo!4fhe^S4{{(awhkNpg=`Jfxt7In5W3@)d7Pu!C9DL?p53ulWm`KA<$hwy zq|f8_?1?44Zy54Vm(HE2uSTB_I+peknNFArf~kp+JZ9*00w|{PTT3>oo<;tUdKP;E zy3bp;%Lhlg%MoWZ%*s8ohb!q*bw_O%fZ<+mo_x_QS2Ig97-(r{b~x1dX;w(Ahb3P@ zhB;Alm@+MXF1aLp@Qm?jd?)fPdg$v)W)C_WnY`pBO^y}|gCZsZQvLGB&i0}7jVtQ4 zJF#^&B;?E?-DxY9y?KP`1a+kHKbQ(h?p5%cI-ETT&0w^qwUaaj4qjZ2f1|$t&3}D0 z=~Qp!^=;k*bN=5r0H|vh{?%{)sc*Hc?H`6{zFYe$%gej})i-mCY?U-p=O-g_;x;c1 z`5Tfk0{;XE5c;eAZ%apj{E;*OJV&qN{r!zUqns`1R*`?yMtRU__9FUccfm@=5%t>o z?GxnE^u3F+rkLTd{Cg(8CbL<;l{g`}i)|vBn-57K zgG0xIe}6tAb`OVR+#5H$A-{lbmRKc1&N^fc4GkH!=M5*buiqLGE^I;Tj{?kcbTdyxjot~Y4)i{T@hjy<+1ZtZ6PrYMk#S__K>z!*sk7$GKuvkx z?Djz=T;wW-XPZA})EM)jR{O|pP}9628^AQ~KT|3*P(rZ--w8P$(%*a3&ZNbbSHVA= zSSGuu62hoS|SV#5o~d8Ie%3Kn`pAEv$wGmycK$6 ze2tBqH2Gep-~V1)3x<$uYp13^YwHA1TXQJD*?-6^4+O%+rmG?xOed7*-k1l0A%y=; zo+&mm`J)$+vXlK+AJ>@J-q3;xcxli~dtfOboSmlY92GpecZHh?CF9sl(lAfhRNWWM zS%{$~_s|hk3?4am*~o(9T@QU=P`KarDm_!i*_LDL%FD<{HfKPzgzMUSJ74=1`@zxV z$zvx=tug__=U0JRc+R9+5pkQ|S1`rD&hp@UF6ZZePd%IOY?4w>Go}>l*@NnwtOf?l zNfmKVC=2@BGUqJ4=s;c|>1}a3!>md^EtYnIogbdvoH@It#ZV)P(E0qw*=GJP)G$AF zNo#UDhNK1p>`?3tho8JH$#>;i7FThZyp{;Wn8=TSgW-^4?RQ#+;u0n4ORbwuGN?V& zW*`w|wo(VHzF8mtAtkMN&W-w^n(tU5k-g#!ov#Xj2@Cn>({ds{Y)Z@PWUO1W*0RWrMHS< znBh&n?wo%r=RcECC0y5m1D&HcJ|^j#>#_g;G++H4`2p&|1&=PJPlJSdw(L1z3E~^1 zeF2=%`h77B`~ZyTCXt=x*T*ByS<{=XHUM5n7UgQL)Z)5`>Yjm-b_L13+3FNOZ{DL` zN~Q*m$Ayp(+}AlOWUh8LBO~K{aslYufSv+iH+}-SC^;|1)(1xG0n+WW|Ji(Gz9$%e zKS#nT0^CdknSN%p)XG8T=afjZ8w<3PWlG=~KQOWyC_OpwKK>PIY5DNrYbq-WF88}D z=%5>{>1wlm&Gt2LAjGU0B^}<~|2DW|_Mct+|NU>}{s0=fkxOzeVt898QykPk8WzyC zN)(a`?^2$3WL45|84$tLP3Fx&)eG4o=bgqD%<~KP!{u4iFP#)~J`LgE7=y)&f*=9#d);a7Q8)-D$BoJ^VS zw)A8ajO299nwOo#LNTv>@nxfy+|-&&Y|Juq+c=H=RaWNdxL^ExT-==3J-$u%NR<0|q1J2|-=;+~ zZvV89e1rUh!wxsG3>03jkj!n}M;a9p+h!V#*OkUI-{2e1C3qKF))`H`pwXSmRZI8m zN!63M$~>)KK?NJ27VWY*W zQ)DezvXGXox+lf_XG3Y=;j-Q;AX9Fpc3lBjt^GyOe9CK!=1*F6+I%S)mnNLzBgdiW z5wRFv3J(0jCurDdnG4<#Se5veK#DPYDG#lEbGMmv-sbX81BaIQ6tv<-UF~T@P{n4x zdqIkQA zOodNJUK(13$SPhA9L3h7bd3rL{ z1}>QfUr6?f$HV>3vIIu>u_zfUYk3sixQ{=dyjyP)*-<>Rl-WpN;Dk@-#=pbd%1u;3 zI}77;buE^c4VC9g#%G%EG`Ky6xkT|SFxAOSJyz1}vVNK+j@;#k@1UGcsw;Np7(&b#e*M}=eAT-#<-voHLR(k94qFB!M`88NHLy&+9NzwOjvB}Dc^j3w*(SZ! z$>r%KIZ-I3PZ}Bm!Q#}d$##p4_|J~8xGT$(l(aiTeGJQ`=l@vfn_jb#F&cHx#281d zTV%aw&vzZvj?=#Pz9;X6=dy%dptg@S3bVx_!D5ioU43vZt5prXDPW-JTi^nY1 zduhn)cB})E7hrmc9eMY`%JodPjoov$CC*+P+7*}y&>@`DE7s{&`FQyYe25|qj*sh9 z`FJE?gKs#H-I-fS?fs&SLeXwLh5ls;$cD%L*3U**Whf>~YD1+`W=9V*;xM(IzwO*e z5MUNS69f8NQ{#1e#Q3Xh6%5qWu9#MPj#Ad)f=maFvUlyYhEMJz?Iq`e5U>r05PT={ zY;$ziZ&6YieT26!PTJ8DTg}E9DJf`ZDi)aZ|ImzJ-&8H8OCe&{N{F(&_|`l68AV9K z`~xF-A~F}$=&>=4Ma;DphRLhaC{9z&_a8s{jIhivFePR;dFWJ_8IM9Zz|%DwRQ82> zCe+sOMnYGIms+(lz9Zl|Sa;r}br;K=ZJ0JD-|iR3+2yX$xlGI`GTSN8mrKM~RL|3X zG_wFXTFzjlE>t6VXMfQK`6U;3x__y~qE~{gTXQ!hR#rM?njmwN_Z2jIP4C2BjheDf zalH&D&klP1KAXgJF~~+CJg&m&o}=_;*qPijdrEQ7hcGCywgBAV$TK6Sw>h7P=gNk% z#D$2sT8pYK`jcq*lw`tuvb?1HFJMKX*X<@bK2UUBR@ee3AC=bTM_FA2tCz0^D~h8n zsy7B*rI`Q5Y|MjxWxFU%rvEqlmp#5&#T3nOLuCGlU_i;MYLE!O`|@%;cLx>55t=*F z+@g(5+4YKAzx8%8V?-)@s_?{a?dL(3TLtE+C1+^cG50=E0P$`2?F%HXIh1-29v^_q zj9;xJ(r~x;A_M8}__gSs*rOSlQn#wL2)l6EuZJJqaCQs}m^$LnQyPn6@6YLprz!j< za9!FrVMslV2|VmfHJ*7mA}bAvQj!Ffw$~> z+aXTVb@q9_-aO<6ux|$DeWb~l;!U;xqWp%Qmg{M48sE^Bb!>@J1j0( znVzA#l=qu0x16mf!IOJL2%$BYL0u9h^BQ-RcTXNbY{Pokw}^jmrd{%i+D;ioXf6as zeF*`8h>S;x7i0qNZ0&Y*sA!Z2-$70HnrdRKelU?9)CqTQaP-o)kaPj?`n$1??|{_* zOkn+g^jmK&{duW1DX6-u<$$m5@lp(vzdVKw=p6S*o}D;aAgjr-;;Zedm*W?oavRyS zkxd4}w%V0#mO$C&k|hZk>BpO`iZ^Preg+8VGqsXjpc#<!dv!hWLF=PxZdsvP zxxdjp(oJ3Btv>~>HJNW8_X1;AW_8enh_2;GL)Qg_}dl$aoik?y6oCZzkgwBS*tGN zWq+e*&En@~`5T(W>VhE4hw~R=61r!`UueU#prxGCMG;es6dM89yOkjb&yJZH7VozX zVLHwAe~4XeGZPTi^}Wh17IOhOGCjMjKw)u&4C%B{QR?7qyNcjq6a!|;a;*%xrrnoE z1R+Y;N?E#XR^d2E!kOh_OiW#%WJ2jY=zV-3Pk?Y)SxRfFw#Qd8OgD#7X&simU$O}k ztavikwkFOkJb}D(UL+LR{l9Tfa<9Xskn%CEpK<|yb z%cMqs@~)iOIKvItCbOF!ze=7RLYtlAbcCqF6C_>QTRWvKC+4o)xaId{{bn_ZG!=^P zQXiZ4>vslir3*HSg}h)<98;`<#-iudnoVrEV}&l}KBd$H)By4W%;gCtY2xILTO{(G z9V!@4%}`SUgPL-~&e%&+$%f&=yG0(qIrl{3NbXKur)g?Kp-3=zf>Z9a=H_d(DS zW{09il11yfqvVbxD5jM)p55zRGO=cs@-E$WRZAkyq?Qj)jt)IJ23P}UGJhzH4yw0n zFTkb~RtJjie>}l_V9)#iXa|Ts%no$j^;Rcysx-s_n7VHaF)|0PPY_l2Cx4I&vp#G{p!F-iaeM|p}i^0f+VJ;eAR^MA{7~hUf+n)w> zh%sR>=|pTNdh`MV6sAw#d=>!&pErXCTY{uBricm=D+SU5939lkdQBS;liLVrnqB$~ zzKbZf-|0#iTIkJ|ml#9Ku;9lgs3Jh!{H34?MzMCMmKb@AaslO7un~1lx=N72_QfSF-e(t>6VS4+W?n1q(M(FE1yW)@S&9g@Z(#V-pv60ZT`MAxOH1}X9w(ma~ltK zkz#Rj)1Mh_edt51gJ#ui4Qe}LO7xfO^nbb8e|5bktt7}8veHbS7PmFrPDwMYzg#oD z{Lwx7k}B9bM2~mY!bil`bjC!SAJR1_Dk+ZHH)|V*jx}sXbcqXgjzbeuA6Y9<>z#z+ z7MqccdbWm3uQA?w{w!jxr?2)TC@k+@Q$y0t3O?O=FdV#OyJ8_AAnBj9XV8gf_yQd@ z%R_=3DvPA=X_y+F`_&ig=$vy}g}w=g!@oUhZ<;9NF6$rY)g8RbvX5A=)2Uuc{bJ)| z3R4)pNbC2EX-CC2v$4V$QHj`DHBOdY4wP0&XB&K^m@Lrevl@k5ZUhYnzRMnI_(uU_ z@tD_)%qc|;D#R?BLMOi&*m64}_$~f?P?)!mPk2_=r-6aW%F3{tgnpmdy~IoCj9N^lB3VLA*FFw0(l*lnVV+3&PuyJ2b3Y6J5D3U-^fXYjp#seSEaJ3C4sJw-vVrNw4Te&sQ3yZO^Uu;)9 zAkoki_0WebPq)Mm zw+dv!g$ix$!6Ns)bY*BcT7ZM_{lF+b{i`78Eb8@*2I$7x&9J_L``(FQCsZ~pt=&-8 zG3lSxqc|&->?wL5IhbRcDU0iflJtJaQj!lH%($2=@U{waSqxXb4(*mqoC)0Kv$IT_ zH42b{pfk^m2oIPrpCCrr%~aU;QZ;NEUyZo=Q;d*}OY7w|xnBguX2i_6SF^j4cVcUC zv0Jt5!Qceh(W-p@r{;o=&uqS_n}>nW4lJtR_ALgm8xVgJ41(Ks+NeR zFZ%UML6MR>1F+!~eh~zeOWoDxRGOcFEhzbap?;!mA_I)N(-f*5Wa#spDGU z3Fh>CdOyuNEHay*mGr@ibE_<_HH|RnnIE%xeQVGbp`_E%d85PA&_le>1J6Q4qFrlO z!Jy`liFaRU{Z2CxW_RXVTxvObOq4^VXYFw!B#RgsBjQ~TIFn&jR?QX;zqz@Wl1F1YlWBeEWsWBJj=nNkCOvK(k4cYPWYD_ot+aYV;7X+7 zI7P6x_gGy+_g3`nI=j7Lw=`%1U8VKSmuoph_9!QjQ8bFKc-wOX<~lSTM5Q+9W4wZ7mwpdC{~$5n#h%3)AK*U6)o} zdv&9DlP<~!DQE7Cq`u!{4>sRzV+;O50eO70dc@yf?>A4@&M&v|J)0Wz{s=8dMZ5Sli6wZCTqbg1 z?BgTW7>b_5IMlM(w#gCOTmjKko*bhE9Ko4htrr(dK@$AH!&{6=he+0th5;bg-KOZ98*t1i7d(5%nP=ag3FOAMZl+T8U$4nc->{a?L;C>flNRi zplitg`cJtJq_-!%{+56LU%uB5P9$3L+j40a9^aH9M%4`By43^kv@=3>r~GEIdz;(n zz;r8t0AeUIenpCf&ek_ zno^0AIi3)fg&{*e~y@EJqFwi!ipU__DEJ#qQ-16{S z|DA|a*G?q5O0iV7i(~(D6kl4E{cEYy_BBE@==cV8lj#gjFUXbf@>n=b zEJMbnZqy}v!6f+6%(8<2Y$UwDAFi~=Q&>wt8FfXri$1iOoABPdws zqp4Fuq@c@$;J8b5){re~y#^Ji-qxefjCD`a#-j2dMgkCus)7Z(^5Cq6TAati zYguGLr0DXY_ihR{LPF?m(?y&>3v5>+k&z4QeFnt0fC_ghUBafT%Md?QuNKo zai}G~GY-WHamRcpCBiEB4Trm4q!Nr~*^ zn{_>80{RM3`+JWeo5c%fb2krHP5;I@y)#h8>^)rSvV5H%^C7XhAmhoBj5M!dO?hl$ zBhL6Wfz5breR5*QV5vhDWmnw!$bGnYcIl3ZV_e{T-vLP3{=%$yj=& z!hNZ)8~fzwbtamRjIC`6b?s-EeiS)RguQhYmDf~jz_070-W;*v0~f)4uGx0kp^UC( zaV1p7ZL9Avn-3J>yfU*yk<412vaUdwZ9eQmInrKOwXeEw=uU<1nQMO#CX6;7sFxUt z)8iQE_Z#0y9AJzaDR?kku5*h$-zv*Ogs2TwOZ{9C6Ukjz7SmxEw^}zuoBQPlZl9PuT?ut@#>I4jtKjOCkMqHdziOPd>sSE(3jidh}P9 z&>ODr9aGYG!0lOlqs;yTgX-HLYii(20Dr>&;*%fYezh diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/images/nf-core-crisprseq_logo_dark.png b/docs/images/nf-core-crisprseq_logo_dark.png index d24097857e452af60adfbecee5faa159e38bf81e..b06a09e7ba902f4c861300cb44a383c1536a7d47 100644 GIT binary patch delta 28599 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 delta 28716 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 diff --git a/docs/images/nf-core-crisprseq_logo_light.png b/docs/images/nf-core-crisprseq_logo_light.png index 642e73894c68fc51e100514e7c2846b326a52171..3e9dfa5060d27894264695e97e85a6f82aa84200 100644 GIT binary patch literal 25147 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 D4Oj%% literal 25158 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 E0G&}PdH?_b diff --git a/docs/output.md b/docs/output.md index ffc58e89..69d28b40 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,6 +14,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [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 ### FastQC @@ -29,16 +30,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [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 - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: - ### MultiQC

@@ -55,6 +46,7 @@ The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They m 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
@@ -62,7 +54,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ - `pipeline_info/` - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. + - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. - Parameters used by the pipeline run: `params.json`. diff --git a/docs/usage.md b/docs/usage.md index 100156b1..b37172b8 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -85,9 +85,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/crisprseq -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -199,14 +199,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf index b682cefa..828fda16 100644 --- a/main.nf +++ b/main.nf @@ -9,8 +9,6 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS @@ -20,7 +18,6 @@ nextflow.enable.dsl = 2 include { CRISPRSEQ } from './workflows/crisprseq' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_crisprseq_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_crisprseq_pipeline' - include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_crisprseq_pipeline' /* @@ -56,10 +53,8 @@ workflow NFCORE_CRISPRSEQ { CRISPRSEQ ( samplesheet ) - emit: multiqc_report = CRISPRSEQ.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -70,27 +65,24 @@ workflow NFCORE_CRISPRSEQ { workflow { main: - // // SUBWORKFLOW: Run initialisation tasks // PIPELINE_INITIALISATION ( params.version, - params.help, params.validate_params, params.monochrome_logs, args, params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // NFCORE_CRISPRSEQ ( PIPELINE_INITIALISATION.out.samplesheet ) - // // SUBWORKFLOW: Run completion tasks // diff --git a/modules.json b/modules.json index 79a99b94..d8c3dbaa 100644 --- a/modules.json +++ b/modules.json @@ -7,12 +7,12 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a..691d4c76 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c86..d8989f48 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // 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) diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e0..4827da7a 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4d..e9d79a07 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { 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("fastqc_versions_single") } + { 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() } ) } } @@ -54,16 +51,14 @@ nextflow_process { 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("fastqc_versions_paired") } + { 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() } ) } } @@ -83,13 +78,11 @@ nextflow_process { 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("fastqc_versions_interleaved") } + { 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() } ) } } @@ -109,13 +102,11 @@ nextflow_process { 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("fastqc_versions_bam") } + { 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() } ) } } @@ -138,22 +129,20 @@ nextflow_process { 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("fastqc_versions_multiple") } + { 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() } ) } } @@ -173,21 +162,18 @@ nextflow_process { 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("fastqc_versions_custom_prefix") } + { 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" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { 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 index 86f7c311..d5db3092 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "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.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "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-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "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-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67..f1cd99b0 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f..b9ccebdb 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35..b16c1879 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + - - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242e..33316a7d 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd802..b779e469 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 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/nextflow.config b/nextflow.config index 5a1f1ed2..92aa81f0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -16,7 +16,6 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false - // MultiQC options multiqc_config = null multiqc_title = null @@ -33,48 +32,26 @@ params { monochrome_logs = false hook_url = null help = false + help_full = false + show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - // Config options config_profile_name = null config_profile_description = null + custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null - - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true + } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/crisprseq custom profiles from different institutions. -try { - includeConfig "${params.custom_config_base}/pipeline/crisprseq.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/crisprseq profiles: ${params.custom_config_base}/pipeline/crisprseq.config") -} profiles { debug { dumpHashes = true @@ -89,7 +66,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false - conda.channels = ['conda-forge', 'bioconda', 'defaults'] + conda.channels = ['conda-forge', 'bioconda'] apptainer.enabled = false } mamba { @@ -178,25 +155,23 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// Load nf-core custom profiles from different Institutions +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +// Load nf-core/crisprseq custom profiles from different institutions. +// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs +// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/crisprseq.config" : "/dev/null" +// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +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. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -208,8 +183,15 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// Set bash options +process.shell = """\ +bash + +set -e # Exit if a tool returns a non-zero status/exit code +set -u # Treat unset variables and parameters as an error +set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute +set -C # No clobber - prevent output redirection from overwriting files. +""" // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -238,43 +220,47 @@ manifest { homePage = 'https://github.com/nf-core/crisprseq' description = """Pipeline for the analysis of CRISPR data""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' - version = '2.2.0' + nextflowVersion = '!>=24.04.2' + version = '2.3.0' doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Nextflow plugins +plugins { + id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} + +validation { + defaultIgnoreParams = ["genomes"] + help { + enabled = true + command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " + fullParameter = "help_full" + showHiddenParameter = "show_hidden" + beforeText = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m ${manifest.name} ${manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } +* Software dependencies + https://github.com/${manifest.name}/blob/master/CITATIONS.md +""" + } + summary { + beforeText = validation.help.beforeText + 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 20cad0ca..2783a994 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/crisprseq/master/nextflow_schema.json", "title": "nf-core/crisprseq pipeline parameters", "description": "Pipeline for the analysis of CRISPR data", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -71,6 +71,14 @@ "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,41 +130,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -164,12 +137,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -245,27 +212,6 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, "pipelines_testdata_base_path": { "type": "string", "fa_icon": "far fa-check-circle", @@ -278,19 +224,16 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf index 4da12227..1a9386d1 100644 --- a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf @@ -8,17 +8,14 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* ======================================================================================== @@ -30,7 +27,6 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit - help // boolean: Display help text validate_params // boolean: Boolean whether to validate parameters against the schema at runtime monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args @@ -51,20 +47,16 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) + // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( - help, - workflow_command, - pre_help_text, - post_help_text, + UTILS_NFSCHEMA_PLUGIN ( + workflow, validate_params, - "nextflow_schema.json" + null ) + // // Check config provided to the pipeline @@ -80,8 +72,9 @@ workflow PIPELINE_INITIALISATION { // // Create channel from input file provided through params.input // + Channel - .fromSamplesheet("input") + .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, fastq_1, fastq_2 -> if (!fastq_2) { @@ -91,8 +84,8 @@ workflow PIPELINE_INITIALISATION { } } .groupTuple() - .map { - validateInputSamplesheet(it) + .map { samplesheet -> + validateInputSamplesheet(samplesheet) } .map { meta, fastqs -> @@ -117,13 +110,13 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML + 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") // @@ -131,11 +124,18 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_report.toList() + ) } completionSummary(monochrome_logs) - if (hook_url) { imNotification(summary_params, hook_url) } @@ -165,7 +165,7 @@ def validateInputSamplesheet(input) { def (metas, fastqs) = input[1..2] // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 if (!endedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } @@ -197,7 +197,6 @@ def genomeExistsError() { error(error_string) } } - // // Generate methods description for MultiQC // @@ -239,8 +238,10 @@ def methodsDescriptionText(mqc_methods_yaml) { // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi:
${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) } else meta["doi_text"] = "" meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " @@ -261,3 +262,4 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } + diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28f..28e32b20 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,10 +2,6 @@ // Subworkflow with functionality that may be useful for any Nextflow pipeline // -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -58,7 +54,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -79,10 +75,10 @@ def dumpParametersToJSON(outdir) { def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') def filename = "params_${timestamp}.json" def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,7 +86,7 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) @@ -102,14 +98,16 @@ def checkCondaChannels() { // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) + + required_channels_in_order.eachWithIndex { channel, index -> + if (index < required_channels_in_order.size() - 1) { + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + } } if (channels_missing | channel_priority_violation) { diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config index d0a926bf..a09572e5 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -3,7 +3,7 @@ manifest { author = """nf-core""" homePage = 'https://127.0.0.1' description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=23.04.0' version = '9.9.9' doi = 'https://doi.org/10.5281/zenodo.5070524' } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 14558c39..cbd8495b 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,9 +2,6 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -34,7 +31,7 @@ workflow UTILS_NFCORE_PIPELINE { // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + @@ -66,11 +63,13 @@ def checkProfileProvided(nextflow_cli_args) { // def workflowCitation() { def temp_doi_ref = "" - String[] manifest_doi = workflow.manifest.doi.tokenize(",") + def manifest_doi = workflow.manifest.doi.tokenize(",") // Using a loop to handle multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list - for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + manifest_doi.each { doi_ref -> + temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + } return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + @@ -84,7 +83,7 @@ def workflowCitation() { // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -102,8 +101,8 @@ def getWorkflowVersion() { // Get software versions for pipeline // def processVersionsFromYAML(yaml_file) { - Yaml yaml = new Yaml() - versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } return yaml.dumpAsMap(versions).trim() } @@ -124,7 +123,7 @@ def workflowVersionToYAML() { def softwareVersionsToYAML(ch_versions) { return ch_versions .unique() - .map { processVersionsFromYAML(it) } + .map { version -> processVersionsFromYAML(version) } .unique() .mix(Channel.of(workflowVersionToYAML())) } @@ -134,19 +133,19 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { + summary_params.keySet().each { group -> def group_params = summary_params.get(group) // This gets the parameters of that particular group if (group_params) { summary_section += "

    $group

    \n" summary_section += "
    \n" - for (param in group_params.keySet()) { + group_params.keySet().sort().each { param -> summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" } summary_section += "
    \n" } } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" @@ -161,7 +160,7 @@ def paramsSummaryMultiqc(summary_params) { // nf-core logo // def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map String.format( """\n ${dashedLine(monochrome_logs)} @@ -180,7 +179,7 @@ def nfCoreLogo(monochrome_logs=true) { // Return dashed line // def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map return "-${colors.dim}----------------------------------------------------${colors.reset}-" } @@ -188,7 +187,7 @@ def dashedLine(monochrome_logs=true) { // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -287,7 +286,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi } def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } @@ -344,10 +343,10 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } @@ -364,13 +363,13 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); output_tf.delete() } @@ -378,7 +377,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" @@ -395,7 +394,7 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 00000000..4994303e --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,46 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // when this input is empty it will automatically use the configured schema or + // "${projectDir}/nextflow_schema.json" as default. This input should not be empty + // for meta pipelines + + main: + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + if(parameters_schema) { + log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) + } else { + log.info paramsSummaryLog(input_workflow) + } + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + if(parameters_schema) { + validateParameters(parameters_schema:parameters_schema) + } else { + validateParameters() + } + } + + emit: + dummy_emit = true +} + diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 00000000..f7d9f028 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 00000000..842dc432 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,117 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 00000000..0907ac58 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + id "nf-schema@2.1.0" +} + +validation { + parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + monochromeLogs = true +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json similarity index 95% rename from subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json rename to subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json index 7626c1c9..331e0d2f 100644 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", "title": ". pipeline parameters", "description": "", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -87,10 +87,10 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65d..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b04..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33f..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cfff..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/workflows/crisprseq.nf b/workflows/crisprseq.nf index 3ee6cfd5..3aa31e97 100644 --- a/workflows/crisprseq.nf +++ b/workflows/crisprseq.nf @@ -3,10 +3,9 @@ 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-validation' +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_crisprseq_pipeline' @@ -21,12 +20,10 @@ workflow CRISPRSEQ { take: ch_samplesheet // channel: samplesheet read in from --input - main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // // MODULE: Run FastQC // @@ -42,11 +39,12 @@ workflow CRISPRSEQ { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', + name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } + // // MODULE: MultiQC // @@ -59,18 +57,19 @@ workflow CRISPRSEQ { 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_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( @@ -83,12 +82,14 @@ workflow CRISPRSEQ { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) - emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] + } /* From 9a0849db43c5f682c3ed4d646d0258166b6e4902 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 8 Oct 2024 12:30:39 +0000 Subject: [PATCH 02/12] Template update for nf-core/tools version 3.0.0 --- .editorconfig | 6 +++ .github/CONTRIBUTING.md | 4 +- .github/workflows/download_pipeline.yml | 45 ++++++++++++++++--- .nf-core.yml | 8 ++-- CITATIONS.md | 5 +-- README.md | 4 +- assets/multiqc_config.yml | 2 - assets/nf-core-crisprseq_logo_light.png | Bin 77406 -> 77402 bytes docs/images/nf-core-crisprseq_logo_dark.png | Bin 29440 -> 29473 bytes docs/images/nf-core-crisprseq_logo_light.png | Bin 25147 -> 25158 bytes docs/output.md | 3 +- 11 files changed, 56 insertions(+), 21 deletions(-) diff --git a/.editorconfig b/.editorconfig index 79945334..e1058815 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,6 +10,8 @@ indent_style = space [*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 + + # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset @@ -23,9 +25,13 @@ end_of_line = unset insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset + + + [/assets/email*] indent_size = unset + # ignore python and markdown [*.{py,md}] indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d1397d97..3ca292ba 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -25,13 +25,13 @@ If you'd like to write some code for nf-core/crisprseq, the standard workflow is If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). ## Tests + You have the option to test your changes locally by running the pipeline. For receiving warnings about process selectors and other `debug` information, it is recommended to use the debug profile. Execute all the tests with the following command: ```bash nf-test test --profile debug,test,docker --verbose ``` - When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. @@ -81,7 +81,6 @@ If you wish to contribute a new step, please use the following coding standards: 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 @@ -124,4 +123,3 @@ To get started: Devcontainer specs: - [DevContainer config](.devcontainer/devcontainer.json) - diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index a048b315..713dc3e7 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -39,9 +39,11 @@ jobs: with: python-version: "3.12" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 - name: Install dependencies run: | @@ -54,33 +56,64 @@ jobs: echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + - name: Make a cache directory for the container images + run: | + mkdir -p ./singularity_container_images + - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ --revision ${{ env.REPO_BRANCH }} \ --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ --container-cache-utilisation 'amend' \ --download-configuration 'yes' - name: Inspect download run: tree ./${{ env.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} + - name: Run the downloaded pipeline (stub) id: stub_run_pipeline continue-on-error: true env: - NXF_SINGULARITY_CACHEDIR: ./ + 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 - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline if: ${{ job.steps.stub_run_pipeline.status == failure() }} env: - NXF_SINGULARITY_CACHEDIR: ./ + 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 + + - 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} + + - 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 }} + 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 + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi diff --git a/.nf-core.yml b/.nf-core.yml index 87c82114..44754a3f 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,11 +1,11 @@ bump_version: null lint: files_exist: - - conf/test.config - - conf/test_full.config + - conf/test.config + - conf/test_full.config files_unchanged: - - .github/PULL_REQUEST_TEMPLATE.md -nf_core_version: 2.14.2.dev0 + - .github/PULL_REQUEST_TEMPLATE.md +nf_core_version: 3.0.0 org_path: null repository_type: pipeline template: diff --git a/CITATIONS.md b/CITATIONS.md index 253aa7f5..1f98bfd4 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -13,10 +13,10 @@ - [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/) + +- [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 @@ -39,4 +39,3 @@ - [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. - > diff --git a/README.md b/README.md index 3216b658..8bb7d8c5 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ nf-core/crisprseq -[![GitHub Actions CI Status](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml) + + +[![GitHub Actions CI Status](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/crisprseq/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/crisprseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/crisprseq/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/crisprseq/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) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 7a711d7d..f6c78648 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,9 +1,7 @@ report_comment: > - This report has been generated by the nf-core/crisprseq analysis pipeline. For information about how to interpret these results, please see the documentation. - report_section_order: "nf-core-crisprseq-methods-description": order: -1000 diff --git a/assets/nf-core-crisprseq_logo_light.png b/assets/nf-core-crisprseq_logo_light.png index 3853ad53f32ec6a10c57918e8b676cfe19716f6b..98b93405f73386d873f631ddfd4e836d71380c98 100644 GIT binary patch delta 42364 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

    OjjB;1cWLy41jbdLs+Y8M{0~ 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 delta 42411 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 aMp(FGvipJMQEOMzb<&QI?RDE?fBZjJ`hjx* diff --git a/docs/images/nf-core-crisprseq_logo_dark.png b/docs/images/nf-core-crisprseq_logo_dark.png index b06a09e7ba902f4c861300cb44a383c1536a7d47..d24097857e452af60adfbecee5faa159e38bf81e 100644 GIT binary patch delta 28716 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 delta 28599 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 diff --git a/docs/images/nf-core-crisprseq_logo_light.png b/docs/images/nf-core-crisprseq_logo_light.png index 3e9dfa5060d27894264695e97e85a6f82aa84200..642e73894c68fc51e100514e7c2846b326a52171 100644 GIT binary patch literal 25158 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 E0G&}PdH?_b literal 25147 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 D4Oj%% diff --git a/docs/output.md b/docs/output.md index 69d28b40..7f13f552 100644 --- a/docs/output.md +++ b/docs/output.md @@ -46,7 +46,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d 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

    @@ -54,7 +53,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ - `pipeline_info/` - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. + - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. - Parameters used by the pipeline run: `params.json`. From 8273def84183a4fa52b09643b88a7e964e83f622 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 9 Oct 2024 10:53:32 +0000 Subject: [PATCH 03/12] Template update for nf-core/tools version 3.0.1 --- .editorconfig | 4 - .github/CONTRIBUTING.md | 2 +- .github/workflows/awsfulltest.yml | 6 +- .github/workflows/linting.yml | 4 +- .nf-core.yml | 2 +- .prettierignore | 1 - docs/output.md | 1 - modules.json | 6 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 26 +- nextflow.config | 8 +- .../utils_nfcore_crisprseq_pipeline/main.nf | 12 +- .../nf-core/utils_nextflow_pipeline/main.nf | 46 ++- .../nf-core/utils_nfcore_pipeline/main.nf | 279 ++++++++++-------- 15 files changed, 209 insertions(+), 194 deletions(-) diff --git a/.editorconfig b/.editorconfig index e1058815..72dda289 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,6 @@ indent_style = space [*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 - # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset @@ -26,12 +25,9 @@ insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset - - [/assets/email*] indent_size = unset - # ignore python and markdown [*.{py,md}] indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 3ca292ba..e0fc3174 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -90,7 +90,7 @@ Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index bf12796d..c0279137 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,16 +14,18 @@ on: jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/crisprseq' && github.event.review.state == 'approved' + # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered + if: github.repository == 'nf-core/crisprseq' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - uses: octokit/request-action@v2.x id: check_approvals with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - id: test_variables + if: github.event_name != 'workflow_dispatch' run: | JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index b882838a..a502573c 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -42,10 +42,10 @@ jobs: architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: pietrobolcato/action-read-yaml@1.1.0 id: read_yml with: - config: ${{ github.workspace }}/.nf-core.yaml + config: ${{ github.workspace }}/.nf-core.yml - name: Install dependencies run: | diff --git a/.nf-core.yml b/.nf-core.yml index 44754a3f..67bae3a8 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -5,7 +5,7 @@ lint: - conf/test_full.config files_unchanged: - .github/PULL_REQUEST_TEMPLATE.md -nf_core_version: 3.0.0 +nf_core_version: 3.0.1 org_path: null repository_type: pipeline template: diff --git a/.prettierignore b/.prettierignore index 610e5069..437d763d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ - email_template.html adaptivecard.json slackreport.json diff --git a/docs/output.md b/docs/output.md index 7f13f552..25c2b966 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,7 +14,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [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 ### FastQC diff --git a/modules.json b/modules.json index d8c3dbaa..85dcf4c4 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", + "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", + "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f1cd99b0..6f5b867b 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.24.1 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index b9ccebdb..9724d2f3 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index b779e469..2fcbb5ff 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T12:41:34.562023" + "timestamp": "2024-10-02T17:51:46.317523" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:27:11.933869532" + "timestamp": "2024-10-02T17:52:20.680978" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:26:56.709849369" + "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 92aa81f0..57751154 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,10 +12,12 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = null + // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false + // MultiQC options multiqc_config = null multiqc_title = null @@ -36,6 +38,7 @@ params { show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + // Config options config_profile_name = null config_profile_description = null @@ -44,9 +47,9 @@ params { custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null + // Schema validation default options validate_params = true - } // Load base.config by default for all pipelines @@ -161,6 +164,7 @@ includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${pa // Load nf-core/crisprseq custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs // includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/crisprseq.config" : "/dev/null" + // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers @@ -172,6 +176,7 @@ 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. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -263,4 +268,3 @@ validation { // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' - diff --git a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf index 1a9386d1..5dd03202 100644 --- a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf @@ -18,9 +18,9 @@ include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { @@ -99,9 +99,9 @@ workflow PIPELINE_INITIALISATION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { @@ -147,9 +147,9 @@ workflow PIPELINE_COMPLETION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 28e32b20..2b0dc67a 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -22,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -45,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -72,11 +71,11 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = groovy.json.JsonOutput.toJson(params) - temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() @@ -91,9 +90,14 @@ def checkCondaChannels() { try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present @@ -106,19 +110,13 @@ def checkCondaChannels() { required_channels_in_order.eachWithIndex { channel, index -> if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) } } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn( + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index cbd8495b..b78273ca 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -22,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -33,12 +32,9 @@ workflow UTILS_NFCORE_PIPELINE { def checkConfigProvided() { def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -49,12 +45,14 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } @@ -70,13 +68,7 @@ def workflowCitation() { manifest_doi.each { doi_ref -> temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - temp_doi_ref + "\n" + - "* The nf-core framework\n" + - " https://doi.org/10.1038/s41587-020-0439-x\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" } // @@ -102,7 +94,7 @@ def getWorkflowVersion() { // def processVersionsFromYAML(yaml_file) { def yaml = new org.yaml.snakeyaml.Yaml() - def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -112,8 +104,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -121,11 +113,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions - .unique() - .map { version -> processVersionsFromYAML(version) } - .unique() - .mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) } // @@ -133,25 +121,31 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - summary_params.keySet().each { group -> - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

    \n" - summary_section += "
    \n" - group_params.keySet().sort().each { param -> - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" + summary_params + .keySet() + .each { group -> + def group_params = summary_params.get(group) + // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } @@ -199,54 +193,54 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } @@ -261,14 +255,15 @@ def attachMultiqcReport(multiqc_report) { mqc_report = multiqc_report.getVal() if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") } mqc_report = mqc_report[0] } } - } catch (all) { + } + catch (Exception all) { if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") } } return mqc_report @@ -280,26 +275,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -337,7 +341,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Render the sendmail template def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() @@ -346,30 +350,32 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { +new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { + ['sendmail', '-t'].execute() << sendmail_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") + } + catch (Exception all) { // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -380,12 +386,14 @@ def completionSummary(monochrome_logs=true) { def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } @@ -394,21 +402,30 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) { + misc_fields['repository'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['commitid'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['revision'] = workflow.revision + } + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] msg_fields['version'] = getWorkflowVersion() @@ -433,13 +450,13 @@ def imNotification(summary_params, hook_url) { def json_message = json_template.toString() // POST - def post = new URL(hook_url).openConnection(); + def post = new URL(hook_url).openConnection() post.setRequestMethod("POST") post.setDoOutput(true) post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + post.getOutputStream().write(json_message.getBytes("UTF-8")) + def postRC = post.getResponseCode() + if (!postRC.equals(200)) { + log.warn(post.getErrorStream().getText()) } } From a84c3dfa7ca28b77da6cad51fb01d0bca0f30eeb Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 11 Oct 2024 12:33:06 +0000 Subject: [PATCH 04/12] Template update for nf-core/tools version 3.0.2 --- .github/workflows/ci.yml | 60 +++++++++++++------ .../workflows/template_version_comment.yml | 21 ++++--- .gitignore | 1 + .nf-core.yml | 2 +- main.nf | 2 +- modules.json | 6 +- modules/nf-core/multiqc/main.nf | 2 +- nextflow.config | 4 +- .../utils_nfcore_crisprseq_pipeline/main.nf | 4 +- .../nf-core/utils_nextflow_pipeline/main.nf | 30 +++++----- .../nf-core/utils_nfcore_pipeline/main.nf | 10 ++-- workflows/crisprseq.nf | 2 - 12 files changed, 86 insertions(+), 58 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ef4539a..30a45085 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,8 @@ on: env: NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity concurrency: group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" @@ -18,7 +20,7 @@ concurrency: jobs: test: - name: Run pipeline with test data + name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" # Only run on push if this is the nf-core dev branch (merged PRs) if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/crisprseq') }}" runs-on: ubuntu-latest @@ -27,33 +29,57 @@ jobs: NXF_VER: - "24.04.2" - "latest-everything" + profile: + - "conda" + - "docker" + - "singularity" + test_name: + - "test" + isMaster: + - ${{ github.base_ref == 'master' }} + # Exclude conda and singularity on dev + exclude: + - isMaster: false + profile: "conda" + - isMaster: false + profile: "singularity" steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - name: Install Nextflow + - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 with: version: "${{ matrix.NXF_VER }}" - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + - name: Set up Apptainer + if: matrix.profile == 'singularity' + uses: eWaterCycle/setup-apptainer@main - - name: Run pipeline with test data (docker) - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix + - name: Set up Singularity + if: matrix.profile == 'singularity' run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Set up Miniconda + if: matrix.profile == 'conda' + uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 + with: + miniconda-version: "latest" + auto-update-conda: true + conda-solver: libmamba + channels: conda-forge,bioconda - - name: Run pipeline with test data (singularity) - # TODO nf-core: You can customise CI pipeline run tests as required + - name: Set up Conda + if: matrix.profile == 'conda' run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results - if: "${{ github.base_ref == 'master' }}" + echo $(realpath $CONDA)/condabin >> $GITHUB_PATH + echo $(realpath python) >> $GITHUB_PATH + + - name: Clean up Disk space + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run pipeline with test data (conda) - # TODO nf-core: You can customise CI pipeline run tests as required + - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results - if: "${{ github.base_ref == 'master' }}" + nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml index 9dea41f0..e8aafe44 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template_version_comment.yml @@ -10,9 +10,11 @@ jobs: steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: nichmor/minimal-read-yaml@v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -24,20 +26,21 @@ jobs: - name: Check nf-core outdated id: nf_core_outdated - run: pip list --outdated | grep nf-core + run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV} - name: Post nf-core template version comment uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 if: | - ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + contains(env.OUTPUT, 'nf-core') with: repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} allow-repeats: false message: | - ## :warning: Newer version of the nf-core template is available. - - Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. - Please update your pipeline to the latest version. - - For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + > [!WARNING] + > Newer version of the nf-core template is available. + > + > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + > Please update your pipeline to the latest version. + > + > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). # diff --git a/.gitignore b/.gitignore index 5124c9ac..a42ce016 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ results/ testing/ testing* *.pyc +null/ diff --git a/.nf-core.yml b/.nf-core.yml index 67bae3a8..47c8590e 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -5,7 +5,7 @@ lint: - conf/test_full.config files_unchanged: - .github/PULL_REQUEST_TEMPLATE.md -nf_core_version: 3.0.1 +nf_core_version: 3.0.2 org_path: null repository_type: pipeline template: diff --git a/main.nf b/main.nf index 828fda16..fad94df0 100644 --- a/main.nf +++ b/main.nf @@ -76,7 +76,7 @@ workflow { params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // diff --git a/modules.json b/modules.json index 85dcf4c4..5151b046 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", + "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", + "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 9724d2f3..cc0643e1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -52,7 +52,7 @@ process MULTIQC { stub: """ mkdir multiqc_data - touch multiqc_plots + mkdir multiqc_plots touch multiqc_report.html cat <<-END_VERSIONS > versions.yml diff --git a/nextflow.config b/nextflow.config index 57751154..3837f935 100644 --- a/nextflow.config +++ b/nextflow.config @@ -254,10 +254,10 @@ validation { """ afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} * The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x + https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md + https://github.com/${manifest.name}/blob/master/CITATIONS.md """ } summary { diff --git a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf index 5dd03202..a3cbf486 100644 --- a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf @@ -47,7 +47,6 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) - // // Validate parameters and generate parameter summary to stdout // @@ -56,7 +55,6 @@ workflow PIPELINE_INITIALISATION { validate_params, null ) - // // Check config provided to the pipeline @@ -64,6 +62,7 @@ workflow PIPELINE_INITIALISATION { UTILS_NFCORE_PIPELINE ( nextflow_cli_args ) + // // Custom validation for pipeline parameters // @@ -110,7 +109,6 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML - 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 diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 2b0dc67a..0fcbf7b3 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,9 +3,9 @@ // /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { @@ -44,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -106,17 +106,19 @@ def checkCondaChannels() { def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - def channel_priority_violation = false - - required_channels_in_order.eachWithIndex { channel, index -> - if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) - } - } + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } if (channels_missing | channel_priority_violation) { - log.warn( - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - ) + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index b78273ca..5cb7bafe 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,9 +3,9 @@ // /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { @@ -21,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -62,7 +62,7 @@ def checkProfileProvided(nextflow_cli_args) { def workflowCitation() { def temp_doi_ref = "" def manifest_doi = workflow.manifest.doi.tokenize(",") - // Using a loop to handle multiple DOIs + // Handling multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list manifest_doi.each { doi_ref -> diff --git a/workflows/crisprseq.nf b/workflows/crisprseq.nf index 3aa31e97..fd2368a6 100644 --- a/workflows/crisprseq.nf +++ b/workflows/crisprseq.nf @@ -57,13 +57,11 @@ workflow CRISPRSEQ { 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) From 0fa8505a277a2fdd6d4278c97baf046e4160b99a Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Thu, 17 Oct 2024 11:09:12 +0200 Subject: [PATCH 05/12] Update .github/workflows/awsfulltest.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- .github/workflows/awsfulltest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 339dd496..47219827 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,4 +1,4 @@ -name: nf-core AWS full size tests +name: nf-core AWS full size tests targeted # This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch From 59e77754cf86891fdee78ba375f2e40e0276495c Mon Sep 17 00:00:00 2001 From: laurencekuhl Date: Thu, 17 Oct 2024 11:24:51 +0200 Subject: [PATCH 06/12] Add the mod in screening aws test --- .github/workflows/awsfulltest_screening.yml | 22 ++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/awsfulltest_screening.yml b/.github/workflows/awsfulltest_screening.yml index 3e1ecf90..94dcb72d 100644 --- a/.github/workflows/awsfulltest_screening.yml +++ b/.github/workflows/awsfulltest_screening.yml @@ -1,18 +1,30 @@ name: nf-core AWS full size tests screening -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] - workflow_dispatch: + pull_request: + branches: + - master jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/crisprseq' + if: github.repository == 'nf-core/crisprseq' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: + - uses: octokit/request-action@v2.x + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + if: github.event_name != 'workflow_dispatch' + run: | + JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' + CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') + test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 with: From b8c17f0acf5e2244a3fa9ca21533deeb24dda909 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Thu, 17 Oct 2024 11:38:02 +0200 Subject: [PATCH 07/12] Update .github/workflows/ci.yml --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3083bb9a..1809eaf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,6 @@ jobs: - "docker" - "singularity" test_name: - - "test" - "test_screening" - "test_screening_paired" - "test_screening_rra" From e927d7d210c6a6b70bac7fc946a10961f649bc45 Mon Sep 17 00:00:00 2001 From: laurencekuhl Date: Thu, 17 Oct 2024 11:52:32 +0200 Subject: [PATCH 08/12] Add the function --- .../utils_nfcore_crisprseq_pipeline/main.nf | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf index be2b17cc..570ca8cd 100644 --- a/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_crisprseq_pipeline/main.nf @@ -468,3 +468,29 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } +def validateParametersScreening() { + if(params.rra && params.mle_design_matrix) { + warning "mle_design_matrix will only be used for the MAGeCK MLE computations" + } + + if(params.fasta && params.count_table) { + error "Please provide either a fasta file or a count_table" + } + + if(params.fasta && !params.library) { + error "Please provide a fasta file and the library file" + } + + if(params.day0_label && params.mle_design_matrix) { + warning "MAGeCK MLE module will be run twice, once with the design matrix and once with day0-label" + } + + if(params.rra && params.mle_design_matrix) { + warning "mle_design_matrix will only be used for the MAGeCK MLE computations" + } + + if(params.rra && !params.contrasts) { + error "Please also provide the contrasts table to compare the samples for MAGeCK RRA" + } +} + From d9e43908a7fbee28919bec1209f19fa6deffe84b Mon Sep 17 00:00:00 2001 From: laurencekuhl Date: Thu, 17 Oct 2024 12:16:21 +0200 Subject: [PATCH 09/12] Add 2 empty channels in multiqc --- workflows/crisprseq_targeted.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflows/crisprseq_targeted.nf b/workflows/crisprseq_targeted.nf index e480e977..4ed4dc97 100644 --- a/workflows/crisprseq_targeted.nf +++ b/workflows/crisprseq_targeted.nf @@ -735,7 +735,9 @@ workflow CRISPRSEQ_TARGETED { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + Channel.empty(), + Channel.empty() ) emit: From 5f12dcf8c62354754592180154d457f371716e37 Mon Sep 17 00:00:00 2001 From: laurencekuhl Date: Thu, 17 Oct 2024 12:46:09 +0200 Subject: [PATCH 10/12] Try again --- workflows/crisprseq_targeted.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/crisprseq_targeted.nf b/workflows/crisprseq_targeted.nf index 4ed4dc97..55a88f51 100644 --- a/workflows/crisprseq_targeted.nf +++ b/workflows/crisprseq_targeted.nf @@ -736,8 +736,8 @@ workflow CRISPRSEQ_TARGETED { ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList(), - Channel.empty(), - Channel.empty() + [], + [] ) emit: From 5c741bb890fdfb38849c6ab2986a5d217cda704f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20H=C3=B6rtenhuber?= Date: Thu, 17 Oct 2024 10:47:06 +0000 Subject: [PATCH 11/12] add empty channels to both workflows --- workflows/crisprseq_screening.nf | 4 +++- workflows/crisprseq_targeted.nf | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 4c7782d4..5482b555 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -402,7 +402,9 @@ workflow CRISPRSEQ_SCREENING { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) emit: diff --git a/workflows/crisprseq_targeted.nf b/workflows/crisprseq_targeted.nf index 4ed4dc97..55a88f51 100644 --- a/workflows/crisprseq_targeted.nf +++ b/workflows/crisprseq_targeted.nf @@ -736,8 +736,8 @@ workflow CRISPRSEQ_TARGETED { ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList(), - Channel.empty(), - Channel.empty() + [], + [] ) emit: From 9fb3903a6e09bb625b40dedccdfcb10d61706bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20H=C3=B6rtenhuber?= Date: Thu, 17 Oct 2024 12:40:08 +0000 Subject: [PATCH 12/12] fix resourceLimits --- conf/test_screening.config | 10 +++++----- conf/test_screening_count_table.config | 12 +++++++----- conf/test_screening_paired.config | 9 +++++---- conf/test_screening_rra.config | 9 +++++---- conf/test_umis.config | 13 ++++++++----- 5 files changed, 30 insertions(+), 23 deletions(-) diff --git a/conf/test_screening.config b/conf/test_screening.config index a359596f..6731a617 100644 --- a/conf/test_screening.config +++ b/conf/test_screening.config @@ -14,11 +14,6 @@ params { config_profile_name = 'Test screening profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + "crisprseq/testdata/samplesheet_test.csv" analysis = 'screening' @@ -37,4 +32,9 @@ process { withName: BAGEL2_BF { ext.args = '-s 3' // Seed to avoid random errors due to a too small sample } + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] } diff --git a/conf/test_screening_count_table.config b/conf/test_screening_count_table.config index 9dfefe96..8e8e2be4 100644 --- a/conf/test_screening_count_table.config +++ b/conf/test_screening_count_table.config @@ -9,16 +9,18 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} params { config_profile_name = 'Test screening profile with an input count table' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data count_table = params.pipelines_testdata_base_path + "crisprseq/testdata/count_table.tsv" analysis = 'screening' diff --git a/conf/test_screening_paired.config b/conf/test_screening_paired.config index 1115f2a6..0a9eb66f 100644 --- a/conf/test_screening_paired.config +++ b/conf/test_screening_paired.config @@ -14,10 +14,6 @@ params { config_profile_name = 'Test screening profile paired-end' config_profile_description = 'Minimal test dataset to check pipeline function for paired-end data' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' // Input data input = params.pipelines_testdata_base_path + "crisprseq/testdata/samplesheet_test_paired.csv" @@ -29,4 +25,9 @@ process { withName: BAGEL2_BF { ext.args = '-s 3' // Seed to avoid random errors due to a too small sample } + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] } diff --git a/conf/test_screening_rra.config b/conf/test_screening_rra.config index ce9c94b8..a82addfd 100644 --- a/conf/test_screening_rra.config +++ b/conf/test_screening_rra.config @@ -14,10 +14,6 @@ params { config_profile_name = 'Test screening profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' // Input data input = params.pipelines_testdata_base_path + "crisprseq/testdata/samplesheet_test.csv" @@ -34,4 +30,9 @@ process { withName: BAGEL2_BF { ext.args = '-s 3' // Seed to avoid random errors due to a too small sample } + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] } diff --git a/conf/test_umis.config b/conf/test_umis.config index d77b71f8..a9da431d 100644 --- a/conf/test_umis.config +++ b/conf/test_umis.config @@ -14,11 +14,6 @@ params { config_profile_name = 'Test profile UMIs' config_profile_description = 'Minimal test dataset to check pipeline function with UMIs option' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + "crisprseq/testdata-edition/samplesheet_test_umis.csv" analysis = 'targeted' @@ -27,3 +22,11 @@ params { // Aligner aligner = 'minimap2' } + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +}