From 6b863ec3909a91cf89f5b00ed240d0a6a19e6a47 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Fri, 7 Oct 2022 15:01:32 +0200 Subject: [PATCH 1/9] Template update for nf-core/tools version 2.6 --- .github/CONTRIBUTING.md | 20 +- .github/ISSUE_TEMPLATE/bug_report.yml | 39 +- .github/ISSUE_TEMPLATE/config.yml | 7 + .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 8 +- .github/workflows/awsfulltest.yml | 34 ++ .github/workflows/awstest.yml | 29 ++ .github/workflows/branch.yml | 4 +- .github/workflows/ci.yml | 2 +- .github/workflows/fix-linting.yml | 2 +- .nf-core.yml | 16 - .prettierignore | 1 + CHANGELOG.md | 4 +- CITATION.cff | 8 +- CITATIONS.md | 2 +- CODE_OF_CONDUCT.md | 111 +++++ README.md | 32 +- assets/adaptivecard.json | 67 +++ assets/email_template.html | 14 +- assets/email_template.txt | 16 +- assets/methods_description_template.yml | 25 + assets/multiqc_config.yml | 11 +- ...icsghent-nf-cmgg-structural_logo_light.png | Bin 0 -> 4582 bytes assets/schema_input.json | 4 +- assets/sendmail_template.txt | 6 +- bin/check_samplesheet.py | 9 +- conf/base.config | 2 +- conf/igenomes.config | 432 ++++++++++++++++++ conf/test.config | 6 +- conf/test_full.config | 6 +- docs/README.md | 6 +- ...ticsghent-nf-cmgg-structural_logo_dark.png | Bin 0 -> 134945 bytes ...icsghent-nf-cmgg-structural_logo_light.png | Bin 0 -> 134747 bytes docs/output.md | 2 +- docs/usage.md | 18 +- lib/NfcoreTemplate.groovy | 60 +++ lib/Utils.groovy | 21 +- ...calgeneticsghent-nf-cmgg-structural.groovy | 77 ++++ lib/WorkflowMain.groovy | 15 +- lib/WorkflowNfcmggstructural.groovy | 44 -- main.nf | 25 +- modules.json | 31 +- modules/local/samplesheet_check.nf | 2 +- .../custom/dumpsoftwareversions/main.nf | 8 +- .../custom/dumpsoftwareversions/meta.yml | 0 .../templates/dumpsoftwareversions.py | 0 modules/nf-core/{modules => }/fastqc/main.nf | 12 + modules/nf-core/{modules => }/fastqc/meta.yml | 0 modules/nf-core/modules/multiqc/main.nf | 31 -- modules/nf-core/multiqc/main.nf | 53 +++ .../nf-core/{modules => }/multiqc/meta.yml | 15 + nextflow.config | 31 +- nextflow_schema.json | 57 ++- pyproject.toml | 10 + ...edicalgeneticsghent-nf-cmgg-structural.nf} | 32 +- 55 files changed, 1231 insertions(+), 238 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/workflows/awsfulltest.yml create mode 100644 .github/workflows/awstest.yml create mode 100644 CODE_OF_CONDUCT.md create mode 100644 assets/adaptivecard.json create mode 100644 assets/methods_description_template.yml create mode 100644 assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png create mode 100644 conf/igenomes.config create mode 100644 docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png create mode 100644 docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png mode change 100755 => 100644 lib/Utils.groovy create mode 100755 lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy delete mode 100755 lib/WorkflowNfcmggstructural.groovy rename modules/nf-core/{modules => }/custom/dumpsoftwareversions/main.nf (79%) rename modules/nf-core/{modules => }/custom/dumpsoftwareversions/meta.yml (100%) rename modules/nf-core/{modules => }/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py (100%) rename modules/nf-core/{modules => }/fastqc/main.nf (85%) rename modules/nf-core/{modules => }/fastqc/meta.yml (100%) delete mode 100644 modules/nf-core/modules/multiqc/main.nf create mode 100644 modules/nf-core/multiqc/main.nf rename modules/nf-core/{modules => }/multiqc/meta.yml (73%) create mode 100644 pyproject.toml rename workflows/{nfcmggstructural.nf => centerformedicalgeneticsghent-nf-cmgg-structural.nf} (70%) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cdefbaf8..0cf971b0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,20 +1,22 @@ -# y/nfcmggstructural: Contributing Guidelines +# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Contributing Guidelines Hi there! -Many thanks for taking an interest in improving y/nfcmggstructural. +Many thanks for taking an interest in improving nf-core/centerformedicalgeneticsghent-nf-cmgg-structural. -We try to manage the required tasks for y/nfcmggstructural using GitHub issues, you probably came to this page when creating one. +We try to manage the required tasks for nf-core/centerformedicalgeneticsghent-nf-cmgg-structural using GitHub issues, you probably came to this page when creating one. Please use the pre-filled template to save time. However, don't be put off by this template - other more general issues and suggestions are welcome! Contributions to the code are even more welcome ;) +> If you need help using or modifying nf-core/centerformedicalgeneticsghent-nf-cmgg-structural then the best place to ask is on the nf-core Slack [#centerformedicalgeneticsghent-nf-cmgg-structural](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural) channel ([join our Slack here](https://nf-co.re/join/slack)). + ## Contribution workflow -If you'd like to write some code for y/nfcmggstructural, the standard workflow is as follows: +If you'd like to write some code for nf-core/centerformedicalgeneticsghent-nf-cmgg-structural, the standard workflow is as follows: -1. Check that there isn't already an issue about your idea in the [y/nfcmggstructural issues](https://github.com/y/nfcmggstructural/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 [y/nfcmggstructural repository](https://github.com/y/nfcmggstructural) to your GitHub account +1. Check that there isn't already an issue about your idea in the [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural issues](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/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/centerformedicalgeneticsghent-nf-cmgg-structural repository](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural) 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). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged @@ -50,9 +52,13 @@ These tests are run both with the latest available version of `Nextflow` and als - Fix the bug, and bump version (X.Y.Z+1). - A PR should be made on `master` from patch to directly this particular bug. +## Getting help + +For further information/help, please consult the [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural documentation](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage) and don't hesitate to get in touch on the nf-core Slack [#centerformedicalgeneticsghent-nf-cmgg-structural](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural) channel ([join our Slack here](https://nf-co.re/join/slack)). + ## Pipeline contribution conventions -To make the y/nfcmggstructural code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. +To make the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. ### Adding a new step diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5c04db22..9d2fd851 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,6 +2,14 @@ name: Bug report description: Report something that is broken or incorrect labels: bug body: + - type: markdown + attributes: + value: | + Before you post this issue, please check the documentation: + + - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) + - [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline documentation](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage) + - type: textarea id: description attributes: @@ -9,45 +17,34 @@ body: description: A clear and concise description of what the bug is. validations: required: true + - type: textarea id: command_used attributes: label: Command used and terminal output - description: Steps to reproduce the behaviour. Please paste the command you used - to launch the pipeline and the output from your terminal. + description: Steps to reproduce the behaviour. Please paste the command you used to launch the pipeline and the output from your terminal. render: console - placeholder: "$ nextflow run ... - + placeholder: | + $ nextflow run ... Some output where something broke - " - type: textarea id: files attributes: label: Relevant files - description: "Please drag and drop the relevant files here. Create a `.zip` archive - if the extension is not allowed. - - Your verbose log file `.nextflow.log` is often useful _(this is a hidden file - in the directory where you launched the pipeline)_ as well as custom Nextflow - configuration files. + description: | + Please drag and drop the relevant files here. Create a `.zip` archive if the extension is not allowed. + Your verbose log file `.nextflow.log` is often useful _(this is a hidden file in the directory where you launched the pipeline)_ as well as custom Nextflow configuration files. - " - type: textarea id: system attributes: label: System information - description: "* Nextflow version _(eg. 21.10.3)_ - + description: | + * Nextflow version _(eg. 21.10.3)_ * Hardware _(eg. HPC, Desktop, Cloud)_ - * Executor _(eg. slurm, local, awsbatch)_ - * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter or Charliecloud)_ - * OS _(eg. CentOS Linux, macOS, Linux Mint)_ - - * Version of y/nfcmggstructural _(eg. 1.1, 1.5, 1.8.2)_ - - " + * Version of nf-core/centerformedicalgeneticsghent-nf-cmgg-structural _(eg. 1.1, 1.5, 1.8.2)_ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..112b984c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,7 @@ +contact_links: + - name: Join nf-core + url: https://nf-co.re/join + about: Please join the nf-core community here + - name: "Slack #centerformedicalgeneticsghent-nf-cmgg-structural channel" + url: https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural + about: Discussion about the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 61b212e6..ca1eed17 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: Feature request -description: Suggest an idea for the y/nfcmggstructural pipeline +description: Suggest an idea for the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline labels: enhancement body: - type: textarea diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 86b00716..9781e254 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,21 +1,21 @@ ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/y/nfcmggstructural/tree/master/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml new file mode 100644 index 00000000..11dbcf25 --- /dev/null +++ b/.github/workflows/awsfulltest.yml @@ -0,0 +1,34 @@ +name: nf-core AWS full size tests +# This workflow is triggered on published releases. +# 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: +jobs: + run-tower: + name: Run AWS full tests + if: github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' + runs-on: ubuntu-latest + steps: + - name: Launch workflow via tower + uses: nf-core/tower-action@v3 + # TODO nf-core: You can customise AWS full pipeline tests as required + # Add full size test data (but still relatively small datasets for few samples) + # on the `test_full.config` test runs with only one set of parameters + with: + workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} + compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/centerformedicalgeneticsghent-nf-cmgg-structural/work-${{ github.sha }} + parameters: | + { + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/centerformedicalgeneticsghent-nf-cmgg-structural/results-${{ github.sha }}" + } + profiles: test_full,aws_tower + - uses: actions/upload-artifact@v3 + with: + name: Tower debug log file + path: tower_action_*.log diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml new file mode 100644 index 00000000..3001e8f9 --- /dev/null +++ b/.github/workflows/awstest.yml @@ -0,0 +1,29 @@ +name: nf-core AWS test +# This workflow can be triggered manually with the GitHub actions workflow dispatch button. +# It runs the -profile 'test' on AWS batch + +on: + workflow_dispatch: +jobs: + run-tower: + name: Run AWS tests + if: github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' + runs-on: ubuntu-latest + steps: + # Launch workflow using Tower CLI tool action + - name: Launch workflow via tower + uses: nf-core/tower-action@v3 + with: + workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} + compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/centerformedicalgeneticsghent-nf-cmgg-structural/work-${{ github.sha }} + parameters: | + { + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/centerformedicalgeneticsghent-nf-cmgg-structural/results-test-${{ github.sha }}" + } + profiles: test,aws_tower + - uses: actions/upload-artifact@v3 + with: + name: Tower debug log file + path: tower_action_*.log diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 3e8de6ed..dbce813a 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -11,9 +11,9 @@ jobs: steps: # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs - if: github.repository == 'y/nfcmggstructural' + if: github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' run: | - { [[ ${{github.event.pull_request.head.repo.full_name }} == y/nfcmggstructural ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == nf-core/centerformedicalgeneticsghent-nf-cmgg-structural ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0146d0e..9c41d0b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: test: name: Run pipeline with test data # 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 == 'y/nfcmggstructural') }}" + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural') }}" runs-on: ubuntu-latest strategy: matrix: diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index 966879f0..62b771c6 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -9,7 +9,7 @@ jobs: if: > contains(github.event.comment.html_url, '/pull/') && contains(github.event.comment.body, '@nf-core-bot fix linting') && - github.repository == 'y/nfcmggstructural' + github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later diff --git a/.nf-core.yml b/.nf-core.yml index ab088353..3805dc81 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,17 +1 @@ repository_type: pipeline -lint: - files_exist: - - CODE_OF_CONDUCT.md - - assets/nf-core-nfcmggstructural_logo_light.png - - docs/images/nf-core-nfcmggstructural_logo_light.png - - docs/images/nf-core-nfcmggstructural_logo_dark.png - - .github/ISSUE_TEMPLATE/config.yml - - .github/workflows/awstest.yml - - .github/workflows/awsfulltest.yml - nextflow_config: - - manifest.name - - manifest.homePage - multiqc_config: - - report_comment - readme: - - nextflow_badge diff --git a/.prettierignore b/.prettierignore index d0e7ae58..eb74a574 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,5 @@ email_template.html +adaptivecard.json .nextflow* work/ data/ diff --git a/CHANGELOG.md b/CHANGELOG.md index ce7a4f64..033b6d49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ -# y/nfcmggstructural: Changelog +# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## v1.0dev - [date] -Initial release of y/nfcmggstructural, created with the [nf-core](https://nf-co.re/) template. +Initial release of nf-core/centerformedicalgeneticsghent-nf-cmgg-structural, created with the [nf-core](https://nf-co.re/) template. ### `Added` diff --git a/CITATION.cff b/CITATION.cff index 4533e2f2..017666c0 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,8 +13,8 @@ authors: given-names: Johannes - family-names: Wilm given-names: Andreas - - family-names: Ulysse Garcia - given-names: Maxime + - family-names: Garcia + given-names: Maxime Ulysse - family-names: Di Tommaso given-names: Paolo - family-names: Nahnsen @@ -39,8 +39,8 @@ prefered-citation: given-names: Johannes - family-names: Wilm given-names: Andreas - - family-names: Ulysse Garcia - given-names: Maxime + - family-names: Garcia + given-names: Maxime Ulysse - family-names: Di Tommaso given-names: Paolo - family-names: Nahnsen diff --git a/CITATIONS.md b/CITATIONS.md index 4f016dd3..42129bc3 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,4 +1,4 @@ -# y/nfcmggstructural: Citations +# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Citations ## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..f4fd052f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,111 @@ +# Code of Conduct at nf-core (v1.0) + +## Our Pledge + +In the interest of fostering an open, collaborative, and welcoming environment, we as contributors and maintainers of nf-core, pledge to making participation in our projects and community a harassment-free experience for everyone, regardless of: + +- Age +- Body size +- Familial status +- Gender identity and expression +- Geographical location +- Level of experience +- Nationality and national origins +- Native language +- Physical and neurological ability +- Race or ethnicity +- Religion +- Sexual identity and orientation +- Socioeconomic status + +Please note that the list above is alphabetised and is therefore not ranked in any order of preference or importance. + +## Preamble + +> Note: This Code of Conduct (CoC) has been drafted by the nf-core Safety Officer and been edited after input from members of the nf-core team and others. "We", in this document, refers to the Safety Officer and members of the nf-core core team, both of whom are deemed to be members of the nf-core community and are therefore required to abide by this Code of Conduct. This document will amended periodically to keep it up-to-date, and in case of any dispute, the most current version will apply. + +An up-to-date list of members of the nf-core core team can be found [here](https://nf-co.re/about). Our current safety officer is Renuka Kudva. + +nf-core is a young and growing community that welcomes contributions from anyone with a shared vision for [Open Science Policies](https://www.fosteropenscience.eu/taxonomy/term/8). Open science policies encompass inclusive behaviours and we strive to build and maintain a safe and inclusive environment for all individuals. + +We have therefore adopted this code of conduct (CoC), which we require all members of our community and attendees in nf-core events to adhere to in all our workspaces at all times. Workspaces include but are not limited to Slack, meetings on Zoom, Jitsi, YouTube live etc. + +Our CoC will be strictly enforced and the nf-core team reserve the right to exclude participants who do not comply with our guidelines from our workspaces and future nf-core activities. + +We ask all members of our community to help maintain a supportive and productive workspace and to avoid behaviours that can make individuals feel unsafe or unwelcome. Please help us maintain and uphold this CoC. + +Questions, concerns or ideas on what we can include? Contact safety [at] nf-co [dot] re + +## Our Responsibilities + +The safety officer is responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behaviour. + +The safety officer in consultation with the nf-core core team have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +Members of the core team or the safety officer who violate the CoC will be required to recuse themselves pending investigation. They will not have access to any reports of the violations and be subject to the same actions as others in violation of the CoC. + +## When are where does this Code of Conduct apply? + +Participation in the nf-core community is contingent on following these guidelines in all our workspaces and events. This includes but is not limited to the following listed alphabetically and therefore in no order of preference: + +- Communicating with an official project email address. +- Communicating with community members within the nf-core Slack channel. +- Participating in hackathons organised by nf-core (both online and in-person events). +- Participating in collaborative work on GitHub, Google Suite, community calls, mentorship meetings, email correspondence. +- Participating in workshops, training, and seminar series organised by nf-core (both online and in-person events). This applies to events hosted on web-based platforms such as Zoom, Jitsi, YouTube live etc. +- Representing nf-core on social media. This includes both official and personal accounts. + +## nf-core cares šŸ˜Š + +nf-core's CoC and expectations of respectful behaviours for all participants (including organisers and the nf-core team) include but are not limited to the following (listed in alphabetical order): + +- Ask for consent before sharing another community memberā€™s personal information (including photographs) on social media. +- Be respectful of differing viewpoints and experiences. We are all here to learn from one another and a difference in opinion can present a good learning opportunity. +- Celebrate your accomplishments at events! (Get creative with your use of emojis šŸŽ‰ šŸ„³ šŸ’Æ šŸ™Œ !) +- Demonstrate empathy towards other community members. (We donā€™t all have the same amount of time to dedicate to nf-core. If tasks are pending, donā€™t hesitate to gently remind members of your team. If you are leading a task, ask for help if you feel overwhelmed.) +- Engage with and enquire after others. (This is especially important given the geographically remote nature of the nf-core community, so letā€™s do this the best we can) +- Focus on what is best for the team and the community. (When in doubt, ask) +- Graciously accept constructive criticism, yet be unafraid to question, deliberate, and learn. +- Introduce yourself to members of the community. (Weā€™ve all been outsiders and we know that talking to strangers can be hard for some, but remember weā€™re interested in getting to know you and your visions for open science!) +- Show appreciation and **provide clear feedback**. (This is especially important because we donā€™t see each other in person and it can be harder to interpret subtleties. Also remember that not everyone understands a certain language to the same extent as you do, so **be clear in your communications to be kind.**) +- Take breaks when you feel like you need them. +- Using welcoming and inclusive language. (Participants are encouraged to display their chosen pronouns on Zoom or in communication on Slack.) + +## nf-core frowns on šŸ˜• + +The following behaviours from any participants within the nf-core community (including the organisers) will be considered unacceptable under this code of conduct. Engaging or advocating for any of the following could result in expulsion from nf-core workspaces. + +- Deliberate intimidation, stalking or following and sustained disruption of communication among participants of the community. This includes hijacking shared screens through actions such as using the annotate tool in conferencing software such as Zoom. +- ā€œDoxingā€ i.e. posting (or threatening to post) another personā€™s personal identifying information online. +- Spamming or trolling of individuals on social media. +- Use of sexual or discriminatory imagery, comments, or jokes and unwelcome sexual attention. +- Verbal and text comments that reinforce social structures of domination related to gender, gender identity and expression, sexual orientation, ability, physical appearance, body size, race, age, religion or work experience. + +### Online Trolling + +The majority of nf-core interactions and events are held online. Unfortunately, holding events online comes with the added issue of online trolling. This is unacceptable, reports of such behaviour will be taken very seriously, and perpetrators will be excluded from activities immediately. + +All community members are required to ask members of the group they are working within for explicit consent prior to taking screenshots of individuals during video calls. + +## Procedures for Reporting CoC violations + +If someone makes you feel uncomfortable through their behaviours or actions, report it as soon as possible. + +You can reach out to members of the [nf-core core team](https://nf-co.re/about) and they will forward your concerns to the safety officer(s). + +Issues directly concerning members of the core team will be dealt with by other members of the core team and the safety manager, and possible conflicts of interest will be taken into account. nf-core is also in discussions about having an ombudsperson, and details will be shared in due course. + +All reports will be handled with utmost discretion and confidentially. + +## Attribution and Acknowledgements + +- The [Contributor Covenant, version 1.4](http://contributor-covenant.org/version/1/4) +- The [OpenCon 2017 Code of Conduct](http://www.opencon2017.org/code_of_conduct) (CC BY 4.0 OpenCon organisers, SPARC and Right to Research Coalition) +- The [eLife innovation sprint 2020 Code of Conduct](https://sprint.elifesciences.org/code-of-conduct/) +- The [Mozilla Community Participation Guidelines v3.1](https://www.mozilla.org/en-US/about/governance/policies/participation/) (version 3.1, CC BY-SA 3.0 Mozilla) + +## Changelog + +### v1.0 - March 12th, 2021 + +- Complete rewrite from original [Contributor Covenant](http://contributor-covenant.org/) CoC. diff --git a/README.md b/README.md index d8992c89..659623ad 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,26 @@ +# ![nf-core/centerformedicalgeneticsghent-nf-cmgg-structural](docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png#gh-light-mode-only) ![nf-core/centerformedicalgeneticsghent-nf-cmgg-structural](docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png#gh-dark-mode-only) + +[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) + +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.10.3-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/) +[![Launch on Nextflow Tower](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Nextflow%20Tower-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural) + +[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23centerformedicalgeneticsghent-nf-cmgg-structural-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) + ## Introduction -**y/nfcmggstructural** is a bioinformatics best-practice analysis pipeline for A pipeline to call structural variants. +**nf-core/centerformedicalgeneticsghent-nf-cmgg-structural** is a bioinformatics best-practice analysis pipeline for A pipeline to call structural variants. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. +On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/results). ## Pipeline summary @@ -26,7 +38,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 3. Download the pipeline and test it on a minimal dataset with a single command: ```bash - nextflow run y/nfcmggstructural -profile test,YOURPROFILE --outdir + nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -profile test,YOURPROFILE --outdir ``` Note that some form of configuration will be needed so that Nextflow knows how to fetch the required software. This is usually done in the form of a config profile (`YOURPROFILE` in the example command above). You can chain multiple config profiles in a comma-separated string. @@ -41,12 +53,16 @@ On release, automated continuous integration tests run the pipeline on a full-si ```bash - nextflow run y/nfcmggstructural --input samplesheet.csv --outdir --genome GRCh37 -profile + nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile ``` +## Documentation + +The nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline comes with documentation about the pipeline [usage](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage), [parameters](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/parameters) and [output](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/output). + ## Credits -y/nfcmggstructural was originally written by nvnieuwk. +nf-core/centerformedicalgeneticsghent-nf-cmgg-structural was originally written by nvnieuwk. We thank the following people for their extensive assistance in the development of this pipeline: @@ -56,16 +72,18 @@ We thank the following people for their extensive assistance in the development If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). +For further information or help, don't hesitate to get in touch on the [Slack `#centerformedicalgeneticsghent-nf-cmgg-structural` channel](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural) (you can join with [this invite](https://nf-co.re/join/slack)). + ## Citations - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. -This pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/master/LICENSE). +You can cite the `nf-core` publication as follows: > **The nf-core framework for community-curated bioinformatics pipelines.** > diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json new file mode 100644 index 00000000..24f89ac9 --- /dev/null +++ b/assets/adaptivecard.json @@ -0,0 +1,67 @@ +{ + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "contentUrl": null, + "content": { + "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "msteams": { + "width": "Full" + }, + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "size": "Large", + "weight": "Bolder", + "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", + "text": "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${version} - ${runName}", + "wrap": true + }, + { + "type": "TextBlock", + "spacing": "None", + "text": "Completed at ${dateComplete} (duration: ${duration})", + "isSubtle": true, + "wrap": true + }, + { + "type": "TextBlock", + "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors. The full error message was: ${errorReport}.<% } %>", + "wrap": true + }, + { + "type": "TextBlock", + "text": "The command used to launch the workflow was as follows:", + "wrap": true + }, + { + "type": "TextBlock", + "text": "${commandLine}", + "isSubtle": true, + "wrap": true + } + ], + "actions": [ + { + "type": "Action.ShowCard", + "title": "Pipeline Configuration", + "card": { + "type": "AdaptiveCard", + "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "type": "FactSet", + "facts": [<% out << summary.collect{ k,v -> "{\"title\": \"$k\", \"value\" : \"$v\"}"}.join(",\n") %> + ] + } + ] + } + } + ] + } + } + ] +} diff --git a/assets/email_template.html b/assets/email_template.html index e4468091..a035790a 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -4,21 +4,21 @@ - - y/nfcmggstructural Pipeline Report + + nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Pipeline Report
-

y/nfcmggstructural v${version}

+

nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${version}

Run Name: $runName

<% if (!success){ out << """
-

y/nfcmggstructural execution completed unsuccessfully!

+

nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed unsuccessfully!

The exit status of the task that caused the workflow execution to fail was: $exitStatus.

The full error message was:

${errorReport}
@@ -27,7 +27,7 @@

y/nfcmggstructural execution completed } else { out << """
- y/nfcmggstructural execution completed successfully! + nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed successfully!
""" } @@ -44,8 +44,8 @@

Pipeline Configuration:

-

y/nfcmggstructural

-

https://github.com/y/nfcmggstructural

+

nf-core/centerformedicalgeneticsghent-nf-cmgg-structural

+

https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural

diff --git a/assets/email_template.txt b/assets/email_template.txt index 16fd6fd4..e26c2a98 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -1,10 +1,18 @@ +---------------------------------------------------- + ,--./,-. + ___ __ __ __ ___ /,-._.--~\\ + |\\ | |__ __ / ` / \\ |__) |__ } { + | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-, + `._,._,' + nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${version} +---------------------------------------------------- Run Name: $runName <% if (success){ - out << "## y/nfcmggstructural execution completed successfully! ##" + out << "## nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed successfully! ##" } else { out << """#################################################### -## y/nfcmggstructural execution completed unsuccessfully! ## +## nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed unsuccessfully! ## #################################################### The exit status of the task that caused the workflow execution to fail was: $exitStatus. The full error message was: @@ -27,5 +35,5 @@ Pipeline Configuration: <% out << summary.collect{ k,v -> " - $k: $v" }.join("\n") %> -- -y/nfcmggstructural -https://github.com/y/nfcmggstructural +nf-core/centerformedicalgeneticsghent-nf-cmgg-structural +https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml new file mode 100644 index 00000000..2455bf46 --- /dev/null +++ b/assets/methods_description_template.yml @@ -0,0 +1,25 @@ +id: "nf-core-centerformedicalgeneticsghent-nf-cmgg-structural-methods-description" +description: "Suggested text and references to use when describing pipeline usage within the methods section of a publication." +section_name: "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Methods Description" +section_href: "https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural" +plot_type: "html" +## TODO nf-core: Update the HTML below to your prefered methods description, e.g. add publication citation for this pipeline +## You inject any metadata in the Nextflow '${workflow}' object +data: | +

Methods

+

Data was processed using nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020).

+

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

+
${workflow.commandLine}
+

References

+
    +
  • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. https://doi.org/10.1038/nbt.3820
  • +
  • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. https://doi.org/10.1038/s41587-020-0439-x
  • +
+
+
Notes:
+
    + ${nodoi_text} +
  • The command above does not include parameters contained in any configs or profiles that may have been used. Ensure the config file is also uploaded with your publication!
  • +
  • You should also cite all software used within this run. Check the "Software Versions" of this report to get version information.
  • +
+
diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 6300c0ac..b5e492b6 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,10 +1,13 @@ report_comment: > - This report has been generated by the y/nfcmggstructural - analysis pipeline. + This report has been generated by the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural + analysis pipeline. For information about how to interpret these results, please see the + documentation. report_section_order: - software_versions: + "nf-core-centerformedicalgeneticsghent-nf-cmgg-structural-methods-description": order: -1000 - "y-nfcmggstructural-summary": + software_versions: order: -1001 + "nf-core-centerformedicalgeneticsghent-nf-cmgg-structural-summary": + order: -1002 export_plots: true diff --git a/assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png b/assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..acbf5370e434c98d3204abd17e4be972baa9fc98 GIT binary patch literal 4582 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 -Content-Disposition: inline; filename="y-nfcmggstructural_logo_light.png" +Content-Disposition: inline; filename="nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png" -<% out << new File("$projectDir/assets/y-nfcmggstructural_logo_light.png"). +<% out << new File("$projectDir/assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png"). bytes. encodeBase64(). toString(). diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 9a8b8962..11b15572 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -98,7 +98,9 @@ def _validate_pair(self, row): """Assert that read pairs have the same file extension. Report pair status.""" if row[self._first_col] and row[self._second_col]: row[self._single_col] = False - if Path(row[self._first_col]).suffixes[-2:] != Path(row[self._second_col]).suffixes[-2:]: + first_col_suffix = Path(row[self._first_col]).suffixes[-2:] + second_col_suffix = Path(row[self._second_col]).suffixes[-2:] + if first_col_suffix != second_col_suffix: raise AssertionError("FASTQ pairs must have the same file extensions.") else: row[self._single_col] = True @@ -157,7 +159,7 @@ def sniff_format(handle): handle.seek(0) sniffer = csv.Sniffer() if not sniffer.has_header(peek): - logger.critical(f"The given sample sheet does not appear to contain a header.") + logger.critical("The given sample sheet does not appear to contain a header.") sys.exit(1) dialect = sniffer.sniff(peek) return dialect @@ -195,7 +197,8 @@ def check_samplesheet(file_in, file_out): reader = csv.DictReader(in_handle, dialect=sniff_format(in_handle)) # Validate the existence of the expected header columns. if not required_columns.issubset(reader.fieldnames): - logger.critical(f"The sample sheet **must** contain the column headers: {', '.join(required_columns)}.") + req_cols = ", ".join(required_columns) + logger.critical(f"The sample sheet **must** contain these column headers: {req_cols}.") sys.exit(1) # Validate each row. checker = RowChecker() diff --git a/conf/base.config b/conf/base.config index 26a4c413..97791759 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - y/nfcmggstructural Nextflow base config file + nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Nextflow base config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 'blank slate' config file, appropriate for general use on most high performance compute environments. Assumes that all software is installed and available on diff --git a/conf/igenomes.config b/conf/igenomes.config new file mode 100644 index 00000000..7a1b3ac6 --- /dev/null +++ b/conf/igenomes.config @@ -0,0 +1,432 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines reference genomes using iGenome paths. + Can be used by any config that customises the base path using: + $params.igenomes_base / --igenomes_base +---------------------------------------------------------------------------------------- +*/ + +params { + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'GRCm38' { + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + } + 'TAIR10' { + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" + } + 'EB2' { + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + } + 'UMD3.1' { + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" + } + 'WBcel235' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" + } + 'CanFam3.1' { + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" + } + 'GRCz10' { + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'BDGP6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" + } + 'EquCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" + } + 'EB1' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + } + 'Galgal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Gm01' { + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + } + 'Mmul_1' { + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" + } + 'IRGSP-1.0' { + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'CHIMP2.1.4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" + } + 'Rnor_5.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Rnor_6.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'R64-1-1' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" + } + 'EF2' { + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" + } + 'Sbi1' { + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + } + 'Sscrofa10.2' { + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" + } + 'AGPv3' { + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'hg38' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'hg19' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + } + 'mm10' { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + } + 'bosTau8' { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'ce10' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + } + 'canFam3' { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + } + 'danRer10' { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + } + 'equCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + } + 'galGal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + } + 'panTro4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + } + 'rn6' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'sacCer3' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + } + 'susScr3' { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" + } + } +} diff --git a/conf/test.config b/conf/test.config index 8b10c89c..9119d300 100644 --- a/conf/test.config +++ b/conf/test.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a fast and simple pipeline test. Use as follows: - nextflow run y/nfcmggstructural -profile test, --outdir + nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -profile test, --outdir ---------------------------------------------------------------------------------------- */ @@ -24,6 +24,6 @@ params { // TODO nf-core: Give any required params for the test so that command line flags are not needed input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - // Fasta references - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' + // Genome references + genome = 'R64-1-1' } diff --git a/conf/test_full.config b/conf/test_full.config index 823769c0..9e8fd627 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a full size pipeline test. Use as follows: - nextflow run y/nfcmggstructural -profile test_full, --outdir + nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -profile test_full, --outdir ---------------------------------------------------------------------------------------- */ @@ -19,6 +19,6 @@ params { // TODO nf-core: Give any required params for the test so that command line flags are not needed input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' - // Fasta references - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' + // Genome references + genome = 'R64-1-1' } diff --git a/docs/README.md b/docs/README.md index a7d50c39..3373d420 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,8 +1,10 @@ -# y/nfcmggstructural: Documentation +# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Documentation -The y/nfcmggstructural documentation is split into the following pages: +The nf-core/centerformedicalgeneticsghent-nf-cmgg-structural documentation is split into the following pages: - [Usage](usage.md) - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. - [Output](output.md) - An overview of the different results produced by the pipeline and how to interpret them. + +You can find a lot more documentation about installing, configuring and running nf-core pipelines on the website: [https://nf-co.re](https://nf-co.re) diff --git a/docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png b/docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..baa0e5b1861dcd4cdcb0f2ba1d34c5e3185c28c4 GIT binary patch literal 134945 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 z z0&(?-p6V}yY(D8cnNnG`YB|Emc7^6~!mII+72~v)z5A&yWMSytq@L5@GLX@IrnBK` z_aW3dBjuKc>re4Z=MX#lzEh)bz#y)HFPuQOGj!GouCPgJFpO0BWqV?tSfO9XTZx34 zAq8??OiIEzaLg6G{5AdCd;i!A@ZUAX2~5b8{Z1ManFDBC4T(*a%Mnwf$tY^4!w*>4 zW|yzm6*R`9g{i{qm%y);^^(jW*oJuUOXY}$>z```3l6wAP|pIL%#DuRI`aSkwVNg| z5ZllFH2fvo3hsX{e?h_~8CdomJOsu>Sjp3>AW!3@!hq}_fX@8)8~fwCUQsK!-%Dv< zBUP-$t((oKno^#cb_9(*fOWeG>-IGv>2*fkqyz^ur9Wq-PxSP)Z#>!(GzO#KEnw+T zUwRV`X@V0R48sc=`?`InD1V{{)>aN~^CAxVYH_%zUyH8{DH2R`0m_*k7~`A(Sm<>H;4VE!LO^LWdsQII*cCuppcU`ea_mSBE+3Q`k7 zyuchR9gYSa7{0m_l9Li#r&Z8;jvRW!fT6e6T_3exktXiS25#))ifm8@FF zczJ&Na^AJRf{l0LzyX1<2&q=sgV(?o^Co(N;D`iVyt2oywAAZM3BWGybwN-7TRH_x zehT3m`MFW*G4oF<5(6MEO4aOY+7mP2s8q>D?P8}6s9kz4A4Z*oqSKi&-{WW9cA%*! zqptCh%La~Y0UAo0VQmVIq7-hG7w^J)xzqIkm?5GO?Jm?xhW|Mp4Z7>SOU{fd(?11@l=<4e1X^Jvv z$N{!k4dtBGUS&PYVgHJE@5w5h6~xWn-Q4Z8Tu3v5`K2b5=f6$aC$mXu{owiN!F1Ay zT~dnp_GlGKm*8l9fUZ0EbK7R~v5GLLC@sf(>(yqk+c8-0OY=q)4ksl^a0L!zs-Bs8 z9hcY^GzO)!FJ|*uN?fhUr?aE4U*}qjd(dn_T#>i~O}`3^=~C;wZ=DPSmvt?XSLDAGKP5}nb zQC2?~ow@=YUjVrOh(uWR9XKkZDCvXQ3_)Y{U`w{xL#kj)28(FH*gx3A$Wi_wg_c`G=UgKCsnx~iB<}RI52vo7D}|c0u_T@5GF`a136ac zIsi#jq8aut< z_bnA@MjSu8st*@5u1Iw>pWs)6cYdO)%7xfcJkdh}u2l|&)GXD`ATnry3E!g4yCQso z-}wQNcIPypJj^9C0NYV)-)Rfp0n-#jP`oK$-{1ojvjvF!MHurPJ$!Ym-+r*ndEgSw zV?YNfKS0(CR;vbXhb6ER;h3@f6GgRUUhc!yfwxwwX+$h$zptE9Vm;-N(!!hJ$g#45 zq7pUqw7Tw~g%7<+tD?NqwiTK7fTk|uCi2D;PKDC!Qejp^Smi{I7OdqIo8&&JP2iUT zJuRH*0rj!;xq5`f-7)jq&F<&z5qIN)AZkAC$JKTRjrl;SqfLC{#@qs&(m}&T(L>h_ z^$cUWeu10`P5=WVe0~faY~KiB4vaw?LV*^Uu`FX+d(fB;>X~ro$B>0mSN~V7xNJ)x zXk>yuu6UHR8S-S`pJFT#*|>d30Sz zof}J7Jj5*rf9hkC903%*du$&=pXjj%ql0)l0%GpuIx0$x5I8&Y5cfeVXAO{RTxEWh zOQgeXfiXmwR;a_&XF;lMiJ0LkRk-=DZ||(q;0{71QaaQJk%qMG1pzfeGi1IKr_6bXin+(W5el8q}R(U@7PT5sJ z;3TL!Mw@&Hl(%NAeYYE`z;H5}4W;h-;ho$?oUCP(SM253OkA*weCQa}6fq-*ez}^& z`za=9EwbT`qtWDRNb8OU-Z9sD;$J)Bj^3Camqi#io4kRO^$MddJ?S(=b|^rOWXSX7 zm!{+9kkKV}{gPykZJ^D)i%ZX&b8n1?nn?9TkC|fS{VLZx`%a)R6uukG#T&Tf>x>Cl zGY^78B1{Solp9>%2UCpG@oNV-Ol8UCGZEz2FEo!MJI1PK;&6^9CI`32m&YU%tiA?Z zpq)DaCsxig38_`@rx)o;^6ksDr9p@m42TvLgGA|ugvTJiq1R=QpGC-Tep4+wKf$}b zYC^IJnq5$6?Eo!FQ9Id+++@1#z@u@TyU%q6Fz0>T!inu8gc(I`kL}wf6ROIU5LjOB z>)R3p@y;F*M<;U^hz9_Rp|pWyR*Y%BQH5{;ygy6`cuBCJ zo-Bi4z7;LmZ1vyGz0tnWtmF4*twO@0IZ`Y?NNln`WBp7o-oE+n zCQQAAmdnu(@+Jst`z4#SlYZuiKjWwy2XYLYH3SxObcmEXfxX{bsV~s97l<`ZP7wx{ z4C1ssbOw1BM4u3-++BPiFrxGA zUkEdGV-;W3d>hki<@Ok@P_jXuowiWU(leN!Z;qI_J{+k`0$4(DwKTya6T2}1PMX$R zt$J!zc@neGI*nTk)PLX>)o{U9lrPr9R~ZvMj;51^!*N>=8cpWjxQR0a3TlTW(*PbX z5#+lnfaV>2<2G5L34fN4%U069C78k)AcEg<*<|a5uqr=DULcnWhEyV#^zDV}wAkGg|U2Y?xDMuy|jUqJ%!hd^1?F53Y^XB4>w2AJD@t`LJf{fBu zGHGnSQjN>BGUV)-t%Mn--HzC`{xD!##sc8J5hW}TsMmiO1P~nh0dA}iLYfwr5-hmA z_;*z$$@7j)s}iZBEojStlM5a@%_c=0@q+g@XRP7q{0+gA<>IZjzpd)E>l>E2s#`ado{|I`+Ohkc6iiT|y$Zp! z%_yHV6v8P;zVHsQvDw5AWyHN{f`#^t9E*7$fZF|}~^=Sry^!THd~BUNYW-?+6B4LLPEhs$dYavwhaZa-7T z3c?cacKKQF9Vd%)xEmneE_t4H&8c#Cg9^ODNhm}{Z=Eq?NXgg#{_HgHsc?O+A#%Io zSh8NpG2W_*T6b=_D_RVky@NJyfke@5o$de=5&`Qz=50I)UX~C9=HP=k-XD()2G)HM z*UTL6`q>2z+{dmt+4$f_{VAkesnYwbtB2Lu=Dm{23;Yk<3mrYfew2sls77{jClrH? z%Vq-m%fX0zz9?UnD6Ef^t%ht;6<|ZGXbmf}6Kn`4$sCsH`ZlU=x$b)cndjlsn9-5i zqG6l~kgl2_xO@7p$QBgF!*#F@Dq$aUJmI`FZ3jL2!}qW@O>p8X zu9=_p-8#v{s*ee$R;=h~6S(;zuJ%;lnxlujmEeff#bKEX$YNhbVi+BUTRcK5Th>NJ z4t;AyP$BOl{9Q@C!Z}lnB5( z8-X5PEnR+|{+QgWxthoS;IynRody!E*B-k@3Z|pWg0XxRV1+DIZzY4QzRugCTMe~LuFZ&?p1L=ES!vz zBmmKJom(>CY~|HZSGyahXY1a7pND~i^C0-aVS9ecjiK4^zt;2X_m+qWiYs;r{q0H%Ky z{<;cRn=JVGJ5$!-$Cdw&z4r`=;_4cJF(e^AB0PzSiVDOyfQBlBx)hCxxKtIEUIii2 zi?Gr$M2JyAXBE(;Xb^#+gA3BpRmn<~vh)RI0qMB({+&hf!I;SR{rdjA^FwEcnOjaj z=iYnH$AB4p;LXA?57a8LOb!obhmsLv4VIhxf0QkV!gCh}zvvDFS6^4y$KH!;*eWv> z;tP&%RzjjNJ-OHUNy2lJpwrvg)bFBKd;5)>RqgE@q*5>=6Er0+Upg*2qr8|9^m=My znfkm;C3R&%J#c0!FrZe~e`I+J!*_-=KSN~3+3?7<5PU}T^j(lNQEU@DO51M~Ndgic z`96Bb$7azYyc&yUyBo}NX#6pj8|YJ5qlEZA2-$H32m+_L%e*$?$$de=tLgzsXoFcR zLC*}~l-!R4Y_7k71vC9Lo=a91t@)AN7@AMhZ=2DJ{u2JEOoP%RuR@n8bd1i5TP`)OpqNHoypLLxpA4_Q|MVdj{yS9G{NJ)TZ4G}<0 zzjOOf5nX0`a34d8l;j&mAVD}K359}(Q-j-gqV6)rx~v9#xM6;I!UIK`B#=EB^fQEi zyiv;F_Lj}y_LG^t>}Vhu_{U%VCgQUcB~oAytjgw!yXjx-`V$0f1IeuHGqO^icX83& z$c*ajg)M-aa>p^h@n0qLmr6wnvx&=7UCK)rEDQXaEtk#x8n)lx`mhpROdV+%2XeiG z#OtuamFE_g3|g}*xIZ?Js)RR4ISUf`4x+}E$S~l1k-33Ep4m;K+N=aXNSe~8EydtM zh(dZ%MG(rk@=7%3I4sJSmA&4{Q5BzlF0GBkv|OFYz%zg&DbI==lATvrEJEXAJ)UXG zc3px&`jx#llsETX=p0&^EMxf9l&uUU*sqLqxoUSA7A-&S@0gqN3>w-UVRt@>> zzrX%e^}4bW&;9H9zVT0gI@I{({@#<%UrKop8_(eDj*z}cI=1gL&uR^rQOmt0ob8zftZV*^3*CQ1(TH`EvDrGC0WBbFl$WztTrX6XTG zcOphhCKgGCIp+&5%=x-lFGI2+Ra(%ooYUW*ZlEN5{4}+ciWgMt;b;-V3Vl|R`CW8b z@f!K%mm$JPf^5TQzaU!xjT1T{+5V?S1(=HjKZPnH1ht^VvvgoFj-;Wk)g6h%L-Cuh za|6D~D-frZX|i1Vw)aVDc|5$`+*S6U1>-F%!n7fQnyt9lnule$v$K)9qb2zZua{0u^!q{q|UE>Fw^aM{$F0EI8VlEo;9KBAaPn=zKS%OfA7?20Cnfwci+Ss#3G3p?Uw<-YZXOLCenq zY6H8L7g!DLf&o24x-IUFbeI0S_2v=fJ*18-AOy?2o{RnFD{g^SfXDj?WMTR&l~3;H z3aHNZvFl!v1RD(Gx^|M2E^8w3h?Rl9SFVCX7!-WiOUq95Yq`!aZmQ;jwABrSChemm z<5%zk@l4C>>F1|x8hM~{`J;ONZ7pObTL0yt6Yb4bf{<(atk0ep)996-&L@L-NcgN1T00En8qawBctVwBB_C}Xts5TW*L8~-M$dBI#m+td zv1<*VWXwg{A*>&1jbnNx`mIjauaU1E6N7m%f+hxw%D_8VTyp za?vk(Y5-0H2%USN4%F9_fGaaZebi7qV##yM1ZeVKP+eZ%CGRVy0*wq@ZIBtda*LUq z$jm4z^*uLJvozB`$ayKE?8W%_EK;#UC+4qTViq5kT4=%3?XWe;2t(6wB&!)`SF4d<&%w2nuNnj1{<_H z)5sH~M9V`~u(P~Xe_$>dyD3yCZww`MwR_qS*W^LFl(S!C`C^5wY7Sv)F;FlePQQ@L zt~HrofCK=-3D*hFbpmePg;x4}&Z6-q0%0&1R}CnoTxMi3Dlj?k_?2|NRGAPBkJnkc zU{l&NoOqcS)K?nPxuW8vd(7j}t)J3zo-53apI^{j8h4)QuMiAq6nFI>&em+lMpFQ@ z>ai2Ydf4_nU4$Pf@2o`b*!K)#>?L{hS(Hb?pF}lj2 zVL+zQ$d2nS*3_c!Xk{6Lea8p>Yc)mi%5`kyDN_TV*~el)Alh1uWa~Ka`(`tfrs_EM z6ffa{h_3C+jIT8ouq4(3yH?|&fHJwax4A+k#3E?mg^NF1hUAGT%F)7mdwWRAGEkXG zr-s!P6y(@d60vBJwk@iIIDTEzrTvCryLV%H=2C_Yk8)qTfY-Bg$_#_TAyb9f-psA8 zbBzqniojvU!t(dD6Nw@BnAR&iADwV+<{L&eCdh}WkBmbB-S23w!UNlNe!Y3Tsro{K z_X9QBScUt;!P#S|yuMdMB+n+g4nckaKv9JRU1bu0*6EkqtYewtfYh^xA+x-&m@rh- zetbkhj>fCRJ+xk`PdytFINTB6{P(Ea&(m7<1IF zIeyIw6--eGhTg6eTk~>9neQ9nyxaqlt5*{wm!^FBCu6A}bCIn$U+*pC;5cqXkjHzx zNakl;huHic)4VV2ju7N`M6|s)j|fK0WNI~EfT~p(IkA3kd0XmWU)`$o%|OcZ6}arQ zC25-z_X)e16XfNgu%F$dQv<>3$z(QKue<~SDn7RK?7V&1j3^hYwlMZcrt182T+n#D zi)%!CVXu3qtV)^J^w{!XvrEa#%7uve*?^gN534haF_d=VmkiU7A*B5ClThOW&L<@g z_O+eB`5QpFNDp72s?P|WW^xW;lI)eNyvR}OBMOqVBCPO0=ccdqo2pNu6M&H#q%7*L zslsNvCk2U|!e>taGVH`6d93pM&zvcqdKADF7x2QaLOFG9FF+|L9wiMrbn!)~4u+4l zFOP)9O^%pGEazcXC|jS2 z>DTTFOxxznR@wi4S@{mKB};i1z&YatZt*-jvZ(iVQnDZ)qM2nvtrmr0UXBN7p!ntv z0bhCRdrh1_fdfaR3~4neC z6rs^|><12bdDZshH!cViovu9JBS`5TcaOlLyq!{pT!*}eo}Y_3k@Lf@h^V7IVw4{D zw#3)1r)Lx0b-wp+wtIN;|J}^g00%D+R{;vO>=?@rpZB%S zuP?E}0vC{y-+~E0yuXuL=&3*xO)WIu&;LnP90*L9PQUP6E|mBfJ^yQsIKR}L88&|b zwLN`UzbQ>J>}k)aB~QD}ibsn8d4cyvjq%v@jg7RfDciO<=LWPA!;FV2VR@gjsa{^h z#|3TI%+Jbz{eDLY@>>#*1h*2Js>Si8YP9M^)7!tDz$r`6QZoA6Arv^A$ z9xvb9$XHud8RbU+vGdPb3|LEh)|$EoNZQ>9a%7!tfZq1d=pA24OGwi9t9+A3r#tKhIqjNA$H zlcr6OIzWkP0I;{Piz1sRnnrIfyT&X4fS&+!cm?`Q!pMdqP}QSIW2W3;CxwbA=AW(j z4a&B0RNY;GYIDL~Gq;=7^gmwt>MfkDJP4isav*o`@fYFiy_B4s-I>6q+a0A#E zzJdLXltDXC5)&xI;Z7&|MPqUhs8!Cz$TDD_V}NXJ8JKwq06>UcJp0eHys3jn@Ns5M z)$PFQV*H#=JcLfDAzX#H>UunIgDA>z&?F9xJc3bo4GV2P;qqWE@{U`T9#`U!OEKTb zHW`d$^Z&gBjBE})en;cOyBz4G{vjqj2PuTjo2ngQPz7h}eD#{DN8kl98ZT0ia+X(b zY5=Ll2K%OfP6$e$xA?CTvX4EQ)c=>`SLE6k2n5T1M(ww|7+=h{4OqI;%}MAKV@o3X z2(Tq--g2XXndk}z!_btufnb!N=1@#5^N$=^tzV!}ldz8#LB7nWsoFd-gkA)qK${f+ zJ0~9Z6qI(x?aOqu2YXm=U}rGq;-c$u6zvx&D0bsXbv;09!ZWTi;|X39U|mW8$sd1_ zp>EsA6QRM90ZSw6I#UHyK&$MlsTtu`!$MBEo0*n^AF~TMb{|_MEGaOy#eflg2=bsz zp=8278sm|%@_leH)+s4@;wi(;Os%ydlj<5(`k zTuwGs+ou*P;%Is#SXz4V$XKhn2I)uGv$Z$y@^l9qNmE_>;SjpV95{aqPyrbDRmJU^ zz=NJk;E8_G{PV~7pq%rpCR;A0roO?pI8;X}hAMOyNV9&1LW(kMaWi)etTs(9XIpR| z0Kevn9%97@Y2xq-T{V{Z4ZaUviN##n9;tA2og~P|0~C`;RYE?7=+Xt!IVSkl;fOAn zu?ry9MlhFA34U4e1n(ADJ$Wl2jdnnJP!749x~qiu@58;9xvF@KcEdoRJrr{R@ic&E zMA>G$(e2Laq4^>{4geScyB9$|kt}xubJ?C+2$j?A5l~GLLT4%svWKn0i{(^+o!Ejj z4clG2H7f&%g9xlF9#eBgXs$v~K0OJ{15vi%dvJzQEJeG>HrG5+M{p>I z9$7{Ki}yX-$eZz61+XKCS5p{^CpyNih?f7gPTOCRs2PbVju!wimkV(Sdw`v22W5cZ z1zvjwK(PrAUd#x76e=MZ0~J^NMFcwS0}>YH|1|3)&=*jEH7X+Pqm7cch`g?z7MeSR z%6Kr9Ms@&;reNep#;Kzn^_#X8T5VGnDL>m`0Z_gcfOi2g`R`EX;Lx&M4Ib{(H>(Z+)J2Kl$+$BAav$$QBrnfY zr=B^e9!~1g^Z;C3@Z>O1C&)XanqWVodld7F<lBed_}fQD0omB4IMuhY z?Jqp*PqzIfLaTtP$U{&2*&4-T3aDAX`J?N$S;pWx?jP(-H%3fr=D2F?7)ayIw-q!*dlScD2d;s(Wdgq+&7k3`*hYOY}rQi(*k&U zxpqUjGkKTWUOdN_Ml+M^#d-C}%xqu8iX7F&i;#-k5smO+L2b@VjO>!rlM zZObR?9qhFItCM7N z>hQWJtG8B9lzOrYw7^bM2WuOQyB{G?7!%D*sjS>aauSWs`wA*yUSsAV@<{7V<}~IK z`G>(l($NtqD2eG|g4#proL+bThiMe3D!4nU0&2m6p`hD}1YdzT)DXK$@zHQI$JiLA zA9_~PJN-@~QiS?j`}ha?_^6}pY;-23ORfq{dlW)2Hy?w*0HynBR%w-Zm6`}GK58_0 z>uB2H%pk&h^$@$s8{k5#E16%Iwi&NuCZOwAKJVW93`Mw5sK0H9;?Tt@7RYY!{}lBl zu3P~oh|pw}RQ4FNYhpe?I#F}cED@SG-bKrU%JR@9$p4(cAx8#h3WaIJ#O!M}6p@S& zu?>i`+3v~QHN2&=XM)!VEC_AWEN3cMjTWfdfzE^HYYn_67VEz(pO?v(>e6QQA{EzN z&Tk#`#K$SUn$je$M+NVn4Fl0eAM86a%C0%*B(V*GM$T8-UgRMaNNc3+0*iHisGX!d zzjxW$5j}$E38KzE9UEb<^ZE%&jpB1aB2yjRupm!!$LpLcKQ}DzAMhjUd!=Do z7;61x^!9cIQk(q%{>=|I2X6*$paaXXYuu7zVwjs1J+@9w4JD86>fNK06V2@AjO0Rx zHDGhN<+<_}VDnw4oh=f)XKx~s`(d7jASI2#E)Tc`;l*Fr@t)wVgI6G$y7XRw`CzW* zfwNj-U#y=u`##NRRVuUXDr2o2qe4!)2|->HKP?s!%j*qL9~N%C#+*e=NqeTYR&r$o zEy(+qTxVLr%ttLP1pLcc-SYmfK`0xWKTP4al;1K56fg7f@h6?YX@$o~=1E34^BM(p z&y?Eu1UN1)cer=4JYMgPJm&P);0VjEl)S|`M*-xDgEuj8T zPyX-YUH?0)aMd+m_08=L&{QfpIqre(KolP+k4l(Qcj1!2c4p`SWk3nrW-#M9b~k47 z_%5-_wSVLaZfaVKgR|*)^cbrLj5ases>#+H?VvC~6ab@J!C!D2HPyVk~U)e4CJKBUw)CJMX|4Iv0%gnsaLU;SCXsXWyEXK3V5 z2HwNxJr4b#Ei30YCK>!eZzcgBF3NxKJb3g4B`^}}j_bC%17Eaov?2Z6zDxBV^>NB~ z4Xhbd_v{;aAd>(fukbb`gm#B-6A{7vott)-w|`!;oW22UC~tgI7?D=f0A7bZqFSK> zzMGG{s{>!Xz^P9{^A1_W?-uA|^fL87eu39DFTh(tZ|6B%)Yos9UELWNy5f&3~ zH(P$s|AF#Y52m#ARRx?0bwgbn6sR}yTMI>( zH!hmdn^%^CZewJix!|os4S1;0zGn}Xl3XnF^U_o5A z{3-YjBxV=LXD{Y6WNiO?+GhQ%R`0L>57JL`5q5y{Q}9ach#)qorpIz}p>8K918yvuv+0RP?(HQV$>^kg8F)FX7cyI8m*MRFAS-pSu z4sQm-mcoh!FeVob4|5ojC+N>+1Qw9Es*+>z7ShlbL~cK5VBLdfLu({yFuY0w0C1pz zJ{BF(Ox$Pnv?GSeR${l$ejxtVHNqjad)04-N2}^M{whT>*8$#Z$MYb2WqZvE-uE%7eK;T%I8b1 zJVN5N>cu-hN$sX16QDuo-$QVD+pDum!rMR4NCs70%d3K=TnSi0f{9jZHUGi8g;n!usFAQ;Dm~8t_bOm70CQ1_CnX5O`cff>2KFb)NGF z9(+fu-RippW!2Yz`uF?bsg!lo=51JAz`6t>co(1O?Ih)U7?~3q5UA>SH&;ERh+D2RMvHwYiFHKp=(u;G6Iu!bV0=%Ud; zoY&}abO`OpE)JAZ7iiXttjO-Im%Cenhh5iCJ_NePvx*VdV=N3&*OqY#DHNw=iWJz^4duT_3Bj%P z|6-!qE6YV~UhO%J3oO5We4HMrCU&UCYv7AuJQ(XDv@&hh&;>oa*7Hav-{gFhu8j@! z+m04X(Ar6R)UG(YNa09}CTJxP;K_lV>)>l8w}CMa@8*JgqO0ivRqZ!-L^971IKXz4UBPEB&4&em=_}zT7C;dbp(8kE^FX$re)!0>-vp$ z-x$tm5GH_4a~DB~oUyJLp_W># zE%?0jzEZn7bG&LKlL~wsS$}X{zvc7KHw1H4&g!B!h=L=!$^_vF0h1;2Hj2YV%d+}D72 zqfY~lQ}N5@Z21Hcvcq zttJOuYij1F-HFB5?3tYB(gxb`NR{H(-cF(1=XipQr zsoU#s5?;rrLblHKXY+&mY3caV>$U|7_VSD0(-!1}9d!v|#nCsWntJf6QOp`d{SVLO zfs-is(D6+B-6UDHZR_S0T(C3rVb-_n=DvC>m20g;VMj*TR~EnMP-+DVE0T0X{gS8m zvrM$u-X>@Itk++a*>fth`e-epDA(V-BFoN`qRTpjUfNBfD2lxK`pv%xRchyl`p-^I zD=80R7^|0Ec223U0!34e4jCN2C8W)}9mrez^MKYbx z-Dr%ihZ3!RyTI#T&@FfYMzN%m7JWH~`bLVs?GR_T^KHn>Kx5<^q03ROV`^-v z63L82AQo)yT&?LVM@y0ycI-;yX%z>!iqkG45S+7{2=qcl@dBD2XC{>6nDtL>M?AC- zteaQ)G&j}i!$3oHt5j^8^jn0sup7jKiP=ulLN9BC#EnJa4WO^G%=c_ytA$W&sSn-x zDyL{2=e6loQGv9cBh5lSy6B8>!M**xDF{($jt=9}I0373|GRLu8^fSDJuOq1mV&?; zA=n)%q*z>;358dhN&ajyVoH>)SKq;kd>bP0xbx`%uLHCJ#2zhnpHL++TP{ZgO2dJd zQZiE=Xhu{zNcp@{6BcTyUViN`i~ejewWVh-K+n2 z<3Jhw$LD{4c-!Fr8vHv<)_(sV4A&s>!T^oM8uMzgqL*+$$0#H4CqZXtS+fE45c8K?#M{ z;ibv~5t0P;H2`po*KgFr_{tOmW*@~|!q*7-Xgfa-_mgAW$9xeLGlU9uLs`Tr#*P7M zl&e5Q#g273OU|94N{Q9mx4-M`?M<-xYVt1lWi>Wf0%yyjn0-h;X-|fD8$lDFq3dyw z7VujsN|!id#L<1CJXAOX82QXh=Ssb=j!1L+4kI&%jr*zGD?6|GhL3bkFxS8}xO% zZjHw021^9-tP4oIhR0n6t~X=qJ~UJkq)Ow$aD7ZJphZ#0aP-et`Sfb4D)?h`JYxaU zW69EJgKx7B27i`~GM&60$1Fk$r+>LxO4mkTlsU5;ia<$olg_uE)W3YfQO=NIr)7i7 zYG#t5&R*XhMKqr%u0HDZ9qT&gVd_;;e5Io2&f7d&!Alig&8vTY|DWw|vW@|#cRu%1 zi)H%ZYxMKqf8~Q;S@~<0q_@S`QY6AFqNo?M(TG)7Q=39tR{fJe=l(dFI%fJo)9*iM zQClO2;meE#8ltAfid+Nj`){uMH667E&)lIBOEOag53BJT(1O*RT)J<;+`TeXA}LakU--UK_~3)! zkd(D~`t6w)QZemZ9FE!wJ|+mLuxc-bgiv_`M=xhjXZQx zA6ud$GX_Ncoe>pByf`_e4CA#u;JEewz6&m)t-R+auKfv@xHhda&=hb^x^n}nE`Qj} zPT>L9xf4VoMU#&&+=0;k-}`qM3mzyg^`oaRpUAsK0{A?xl81C2@Dh-R%0uE`w~89N5&PuCIYKlKv)r19+-j-egLH=1hsONX~2 z7s1!OCG3A{_06-a2Wy((QpOBKZiX=2^n)^CAA~lBDn~MP@o^d~EwmEPBLs&^-B3dz zA7`-r7^rQ*?Hzw_br$DG6m&8+XIxyaOj(W{giF&MZy9Lq+VNH|UQw6TTg>4Q8!NAuWdo!$BC(Q2H&7E*sKFuYl&yCWL2b7 zx*XC2{A2>52p?xU1r`Rp(IWXC;`@{O;8#^bBIAwFdYXoLBZ}$7@S0H#)?Ip=>wWs@ z&8L!1=}X3FP$ZMTVK(4{uit-=>yq-OyWnd$wVu%?MkKSC-saq}{3M;SVB%PYGNIzD z@<`YEz~1{Utp1YHjP!j2(VYboeq66!1>gfSDBhN}|4pZ;>9Fo1#F?rM_}wL5Mb4x{l^sY}<}xPs4}GtHq#`!;25V9t{gXU(4`CRIl)Oyh z)f*;`UD_-e{OEA(`%cUHuUGG_+SV{HWk8_B*cy)Q;V-^VnNDErG=6H&F{*bQ{2 zRogpgWH*qU2KY}sE3GqG$Yt#PpttuQ%;HVgz?d!L%k`>zW#A3j?98XPT|$eKiEkx+ zG#9=3{ZChaJw3gK%`b7eL?~9`4TM#4u7wQot|{ZXy|Ro-LzmQAhh>WuP3<%;@^bT>!DJ3w4(YX#T^ByI>hfv$Ie zps=x2SVoyXH1@%6#`PnE`*kyNupi^lJ4@UU2zy%Jbu^_{!m0JV^KYSmzjXmW-E7~1 zyKyu7lYswEpM*0u-TTGz|I5HA2>=1#2O9z{+-Z&AuC+bKm4B_$u_0>I^BUj0Q+{mZ z6~EOV(=%_m=fi2geNui+d`*6wY=6s%|N1gVaL7A0Pw9Otk^lYe?%VGu(xG6(=_>r9 z2~fO>5GX2e?zxh$Mpsmj#C$<}{nsD;ym|C#Z8Zovq$bvID*V}-u=1r999}w!syBZx z8j*-B$TS`hjR+$RS02w*mR@3l{yAD#w7O=jARVC3(Xz89<)6k`MP_TytZ2+Zkp}r( z5Jex4#SmH#9uGPuko906t^VM0To|b%in&a4w?tw4Njt5Fm$djT%{-kF7O~{|DaWBd zYeIZZ5O8SB)fWK|0-m_L-L84K4?nFNe&dMOw01aD6n7iXrc8HFE^klB@}E@uB+Y;@ zqLm|hBsRy>W3lm%ei3F}|BGK(iM$!t-YfZ*gHP9q^Mt^Hh=D0>cViDuE3c2>)8-`+djQH zSS8xx%nCTAjym%>L^_Lxrz`4H#Z(68_VM{%62%_{Dhl zYbw3%2zk-a4qU=nIKBhtdDQS8^GpTViU;l!yTtqJ7KV>a8#WQy;g4og$4#avzSPM| zc=0X-GvYFGNXIlFn{sCk*^%oM+H>Gg3wKvf*MMspvZI})bI}R14?fC5)P>&1wCrMh*-H2ASU=BXgM|~J zhjFml=n}dYH~(d7g4z~GeL|8j9RA_MFP{mmeQeI>a6O&>JLlLvA{l+WhE1j1@lk5g z%7NlX_$O}A+alydzN-?D-D;C{F@Sz!i5@1MCMe+VFBKMgiV@FTsT|*B>9hEkqu)fj zkqo2YrNRR{|M7UXu&!Et;ftj>(i$&Z+pIPd%s_AW<m6@&te<1yQkA(+xCm9--`*%%pVd29txh4<)EJm zrGKbk=_3y~xp*dPI6Uoh_@48TdhT=YZXd0=W6fx2Y4N6vR!h|_biXe7rnaozq`g^W z`$RI9CseSX_8GpWGOJ)>G~*84)e9B`m7`TiGrc$Q zH5#n4-s8Ndh;~I5xL09(p~FCG5J=ifGc@KsZqbPQbizjZ7;_lu z7n$oP_1oLFj0c=hx%$F$q7o0MxnO(y>sFewUPD&$_S?0-AP}^|;k3fOBk@z@bc*2F zDp^C2Bw_U5c{BLpRee;`t&>wJlA`qAWhUumvDQ+9`2iURD<>uHL;!VD7e+b|H5DIa zm0Yht+^sN~MwTDR-<>skf!;>lJ+2NWljRx0q`=?dP{ z&nP@Z``L`;YQ&PP+%;7A;K>PsA8OWwtGI3?C~$|iYb;~WAZa;)n^N(xhgs!4rp%Y2 zx9k$gQtAz<4Z0omEUjMs!dyOwW8LVK^n_G2RKIB&(bWQrd54IinoQQ0&0qVg z&_L+kV%nrrxN!aFWmB+N#YN$?B%#*l2ixq5B&k>1GZENTu>~<2g;-2VOi2tRU^=w%xP?|)&&_~s&bPv( zV?|Fxl;c|t{7;AV8(D%HtmoiUO)X|!o0_RH9b2(1?{m8%YIB@WBvbsfR)eK0GwGzG zo0D#zaiCBXvbFgO(~?Mw6vvl+dV~?Y2VrcF-l>3d=e0wF;%~gjoeQcRzv=HAdcONo zM}?09)$5s`%;d=#;W-aLRz}KBp#c2={l13Zn{RgxQL7+%qmKDcqxqZ)N<)s9Tkn?n znS?rq=xDNdWz2Z}98f*bWz|J;)7Ow05ub0V#3w}}6_8)qg|(Q05GnN0&b!=M4ilvU zImN{txDTBBERJxTo0XPlVfQOG_mbO|tC+7l5S#X?{ukWjjzC4)$id_G`j~?uDvBn6wl87B) z+U?fPjXn`~Y7)qplDJx{pMnZG-)B~=J?f5*ADqXd&;wf(Ya0no(YJC#yII>X2S-#y zWDXL0+U^vSep>s8;)_tTIwOSVj-l-)j=VEh9vh{c33Qs2tuAh`H@^`QK-U$S(?=sD zSTnEiyuFJ^|7jypRS{ZE+)X8LW!n`SP0P|L-iFOTiTzMgSy5MH+o1h1!Yij|onQofe3nbE&rOTW*@f2j;-n{Q zR|;K`?Ke~hZC)iv=fW29Kl}n-Jyo1K7^Ao2^1=v*K;^v2S3`~o`UIRbVD~U8Vmlk? zYl4cac&68f-~+F|FrjA(7kIK}r$AM!gk(o=cUQ6X@p1XE7N-moMEuhqlC}sq=HQ=0 zdXK%dUOu@4yL$dRme3l-+yb)OdiJ%wsUs2Kc{BxUASvT$GSW^?6)*TZ#^?HwAcjd% znWw*RLoo5%85kbfFk)fC{8`}nN1tl*AmNLfsC z7x5vYGbuJLS`N1ee5bW#BqxpK8<)95a#U|IOYkn_{=>$kW!e+`^3S2Q`Fe$)-!fOL zsxu98MZw$@7>)^3Od=LI_(nNJ)4HiiB6GdmU6uJW+CO*-9AoXkyF7Etz&QlSyhCmI z&Vr|2O=dkxVc6hr+|<8TBDkqHC4b-5YovUYN#!feEvt15@+LIJA%;^m2ZiWi{f*2b zw*GYrJ>1=2Q8;SSNxl=bdDWTX$C&(y4q|G7Yq|JbMAjw}0RrG^T7>p(SWz#A|F}G5TRV(1@dg zUqR}gqPbKu1`BLZ^PcZ>-?3NZUtBtGSX0|gWw^PD^IiAQ|HQo62VOHzx1?R70FG-( zW?d!=XUC+(!f983laX;!_OS@vyV?HqL%BxsUN{aV#$M=5g*Zr;!h~ba`T6@xmyp`Q zaX4IET!NlB>9Qk7 zwKLvjnE%w)(l(O?+p+&%vSQslcRF;F%?`WQpNmzYA)L=#o=M#vK40S#?dfpKi|ngS z-8&CwX@bxhA;5iE%#<~S;AMbnN>A>P)XB+pyghd|YxJC7C}UnFc0x*IQleRV43$mA zdJ$dPc&VQTnjWyN`U(WP+|eNuM>YRqHGP6j;VcURL=47WD>1X4LhDhmx9l|tvC&7m zXp*$LvTT>E*VA^dnu<#()4dF9g}c}^QhLy4BxQsSHeq^TTs~bx)P(@RWIB4 za?S;XDq%uLv{}dcm8%p28oe6SPwN?l#3{|pXSvj*4E4nnZt8HA_ZrO)`7*aO54xP9 z6r3QmOHX& z4Gd#mC|`iq?qW!hu|X7(tR4?EdbPFa-m6r6h9*lSS9O-$$|kdxLu2vwJ0sm(&=K<^ zSDN?nh3*I0<_!9I;pt7ueY-iT+Ln$wj;KxXWWQ?kA^#X#foaJdD^;L|zSPz6(BYow z{9=K$_%qt&oF3pM6Lifalqz+f$Pd;MK*5pEH`|*KUmC!tdIZvfL0oVNu*22(1KG|& zwmNzsx8^z*dkKAOIwfM7hqQPuc9w<@JV*mQ)gk}BXZ1VC)@ZS(<Ks*Q*=H9Lc7eQ#>(l?TKlfuN&Thl__mGX zNFKvFT6{j4{G;Fv8@sK(_Z~Ed$-3)weqEDN@r$h^J}q`(#40u|(;3vQOfs9JzN1On zKaisjEoYBvv!d_}5;LS!J-oT4`AB3`XUzwJ+O#frE}jK%(fUK=IrMbiM1Sm&(xhE-_<7Xi$>CfpDqSGX=!773>4ilg_Ln6B_N22E*fi5bZ zagBM4-q!CIc1KWFn@Bcj5c@uWej!VeW-9F;U+S0}2nN>;W-H(4?J?QLWnqK`Cp1-t z`$&5ij=Ld&*m{N0`#Yg25~&5Wpu>Y?yRRW3HqpeTxJ@K-`ey^zG2zu>9iTmG$RmR#9fP1cquk;}5ZL z49?l)qso$Uv$qJq9G0QgqYQh_!Rmvp%-8v7F+vNkaeq2oie%zhf~JlUlRVTuGPlOL zQ>chg!4I?oeBRluPmUHsg%hEILQs8UQn^p>jqG`1=F+BmsnJK~NUZ#K1TP0vl(gs& zIv>8g9N;*TFUR7-PAhO9@iV-G!PIADxc_5Y>Mu=m1i~NX|83xSL)G1_nP;{GFZ~GB z+2cj#mgsHy@-MjzfSKZ5Yjr&6M;Eo^I?VAF@l4&x6Whs*-m1EyJ=d_dTg=b!fg-d6 zu|1cc<51-U;_nBP-k}NdbOwO)aR2IxK>tNYv;JQl%?wj8o!aq$ML69)v?t7F<^^{% zHQ+Y!>cQmyv6Htx!CrW7iaY)}4p(9AJgVbi9?A%Jys_h|>R?r!IzJ!ar?y0OA2UWt zCPpvfk?bJMpW$jBaOF&HsoV|_ez&oFw=he6Uw0_%pYT^PJNLw#$U33;1PcG)c&Ka8FoMks8eu9fnnsT+hf0QmyxwzTso= zw&N;ZTy+(hi>0>}`Eps?uxWOO@Z21C$X61V4{x>sn-F$_e9rkbPc{g>gHhzX+ONDA zRVVw!lQE@(RJR3tk%IlcTXXxiz{->plUM(ZygN)#5vPp-2@|)|M;h=Jphc|4zI9TT zt*&Yxzh!4JkQ-jV55KHHReUu{S&m3`ut)9fX8nuYLUOZxO3Bs=gF$D~N5=R=uOtu^ zb0;Nsm=RPYX+xmA6#vtceU%!t)!ohn?8bbvp85R*FMkx$mQj#?VmS5bye}#*JXaeU zKRdnE_kPEa%qKM| zGL?!`?hlT}CPY^*jHG2A6sI@$MNUy{*io*zSZ+smht2_53k}ltfC31h#f3bI1{KLdg@i#7Vkro5d6}S6S z4>1!BRwGjOWxVUeXeHjlA-eHYT~W*y->5D3Fp28%&czsp@y^%_dzNvJ_SWeBk{)n} z`1?WkD?^WVF3DyPyiSCUF+sypJom^oL(!9JH|>s)5~|p(|6yS0x_(nQTO8ISMZgU` zBf4-L5#m}!MV{Nkuc;22)v23v&~F<*EK%L^Owmh1AxZTQ$413J3W~dG=68{+=i8vG z`8EeaQwly%o;HDs&1lQ`TI#U4@QglLoL^d4S|=+f;_JU_7ON!)zX#i#AlMr=iQ`pw zklV$7P2{FthN3zPgegA)CEfEL*oiv~n)vaIUAvWQ3oA(-#stYB{@Q&37eZ_R~C^Vgi7P6aCfMSYa~8xWycUV=yne`XftIIP5eD zBN-SZmi`Id;@fYnXLgy&OCyzg{Q`tN5(62iQh4$(;n%K>S#;@j+aBdZ&&jLnP-k>sScV1 zl_ae6Iy<2$S1vD1?8KD%GcG&aN(J5o8niS6`ir)m=*abMhxa<+&ERGG{#R^raGp##>jYs!f zd@)boEt5tnd92jxlqK*%B%`hw7L&5JleA009DIW4j>Lv(yKAu5zY~a8jSUIy*x)U0 zYElh6C$vL7SZv;m(CY7el+g4VcmeaZM^~=FQ6@=E50ft2s$_G#O9lq1^%@!0!E;G9 zWYfW7Md_3o3j+eNukMiL?sQJ&XSUJZj_fLsG63c8<8ClbNt=p7ovIXMx8~}^-;h*ObA^RKR-z-JVP+|wPxrhxqMi6K#SF= z<+d2bp7AaNO$mhz0+hl<3zY#GW9;!_*$lB?X@~lDh|KA* z4WzVC5@{IEx`O%Yj7dq^k$ijdWw<$mytp|9Q%Pv?0jkO9TnTmDXg+z%VL`8_Mj>{b z51Q?H6q6)A?bqiB|7(612;wNA0vXzFbokYtu!Q!T)}51ngsB|N!?o#aBi;}84@8U0 zZMNwnG(kX|H8tN-eCt{&mQI+u#~pHqO`Trt*O*T+Ur&Pb5Wn4Jh`!OXev1&9bL9)I zwAgi|S<$F1J=aU+ne>SG={`b}HVj%$zY z_hnr(lPTT|Ve9XbF$kR;4K1y~$M#5(*%cYF(PV7GFYJ7F3I=*IW;ukrYve^55}$&} z>)(*2^4*RobelYZ%l*7s*e$a*#!bgup(dsLyR6c@&7i{MKtmEbqk*rIW@@OnVy`oA zA#4FQ#gqG2TG-zuCP$UP?wo_U!esx>s}S?i8H(ldh1eU({~&FPue~)Dit>&SD5+rU zL_0+;r(wQ9Xj!F{*o&9Rms*UXPVaoR%w!x6ZcVB&{bjH?oGm_l%~3eUe2<&DX_LaQ zn3Bj5bJok*xGJjyG))v_?G7+)k2>tKyP+zYwHZoczs7uhKoR~)EU255u-7MyKf z#+A^YIjf|aALM+2In3NGo2WsG{Q9jWVqooq;AKwW)8ZzlVKph3u26v@Eu+RgS_QJ_ zeFwtz*{)OSKu+3%UVo$=mJtGGw600nQVq6U^%s zD}T)XP`F7IIsLav3&Y@;vI*KhS@TKmZOkGD)?R8}#a__%vc@lbCKQ1nO( z${KAWO#Q(){Pag{YFfShXL7BPh@oLq9Oj{-Y401AaGR)TgAH~dmKv-ohB1eNGyvw% zXjNU;c?zTwd5I8racm_gV0i{jf=GeN#j%k+)qH%u%7#-s(nsf$6M$Z5X@?um`vurt z^&H%8%lk4 zo2R>?(I+9H2AmP4Bn+CNF7}InqSKalH-xnA*d(< zrUP*oXSSzOWNC5Od;^wKs_+@WBO#*jArJ>An1K6Y^wcX9zp?ra80RQ~B1)arPk=*tC`!6Hc=#|fFk{I+p~ zCO)86bR`lFFWP&Be=1oeRoB_Q_fV|7#bB}aNkYFtlb`hD*KymIB!UU12hY7oiA|8Q zl+g81Ck*5}eG5A6So}AyhW~&nkKc#5B^?{{xIZa@OU0TIp!z(9aqxwtt}LDm_smmmGO}MLau{IMzv&h_Ww6kPFDnBlYndvX=DiP55yk5N%%&wb|2}LMEs;gQU;a>*;w%w zowzM*bI33_p->8Blb83{w^9+pW3f22IE%P_`=g)v=pMu=o}Aw&Ph3dm$;on zAl}hz6P?+J#ABGKFW341hp#t}i+O$j$0s4nF*(N@p(&234$>l}nih1(oHnUx(QaB0 zr81579EUhsm_dscM9ZsHsnj$zM48H@GVL>=l%|@Yn$rHeUe0-czTfYI&+o6}@!-_! zzOU`N7VV_ZpqUrzMBdi~cka?6kk+84K?7?_?|cXK+*r zIBG5;=)y;=?G1Zh_#^07+On(Jj5NwA47z#XH#JL=ts;z*fL)|^N(uDRuUVo0+yZhk6@V*om&X2 z8-E@Co>Djd+B5IGB`IF9T%Vl?V$aP&a%epX?&Z`Co}BCdC~j87ddYPO78WLu{;y@7 z&l=ZWLgDWuahIV(AZwrp6)UM$h6p|q`Ty~jJX0BOds|d)d_TkO%24r=@pt=_!nCw* z@D+^jQOk+Y-@waT_*;sUS-%af&ZnU=^e~}81-YJoz}1Gt&Bvz^$D%owcA-j&)35q9 z>(pC}KdzXtluy$QzYQ`zN^(F1Yc^>eG{~XK zMF!cB3jXk?h-8(YKw@M@dNdjKAI&wGGYQ_{bNJgfT;?m}z^R@gr$erIXK;p6mPOVL zg8i*|tN{oLMqxZG)<0>^JL! zR^t>*aEp}HuKz$Om6zYWwuc1C8f?>4`?~bVF_JA5ji}gx=UZ|F_Rt{QA`l?KCqP64 zM+YA-7gW|{A-qjm2f`0c6k^&S%1-X5Fay+9fi6F$UbTOaArZNzB)K1g7|2P2GO6s% zpPYPduw7qFDe6@JSN*i!9;0nR1P@T@SaWX^4Q}a)x>CZp- z6*MjPH}_ZrYBz8LRl63i5Gu_i#OtEHyZ(2N3c32p)Hc4g=9Unhy9rW_G$h!EHXJZ7bMZ6%rRdjAYmDZ{)(TUoWo1|J_5R2pX^5F_2}Pv%%+2KeseY44ChSL^&-L?3{4 z2`ZDndCgRZjZBj^@CA~l%ePl)uwOEZF`vIW_N^-1QL0$}2r(bVErk#c)$jKemY?3! z@a+>=b=3(=`|V-Yc6vf_=T=U3E+`l)`EgaP3<*eLW$@-Pbwk3T9{~P_25@!CRj8%! zQwSo0&`c1)CL&)p?Pcz3e;U<>%Vu7}Y#De6+!CzB8Ci;4-I0_jdblS03&^Swo)pw$ zud$3*3$rD0hk=w{qA1v2aZhyK20ttGhCClOC zf4KmeNU0dRglWy)MIX5q9KGP|NU|8looE|M_m7^ibo&C3my&Fya~MM4Tt7L&PtdXN zxl8}__?g=e@&h|Pty^wZ=$Y@*96JFmXh_9x>@~#F3C?pz-5qQoNAwU@6uPC_keY^Y zOY96Oa>EZflCCw@5aj#BR{RwX2DQ8w7R!8`LAu%qFZ7xj?kN*0ah4?Juk7)VLCm|) zAPO~2FMN3wb;YOqXp%2x2C!E7<|A})sw6NA`afnNyM55QjSXgT1;R$^2}!Ev7K$XUX4xdbRD1?2;u9?#cfCpXS4x zH`Pl1nsVYd>)-VPtQ|Ig`Rgk7*L!lc*OULH}t7-xYX2bb||0GzhsgviWTqhUs?9~h-)~#rD zl_O*OAXnf#w_)Jf^5>&4fo~bLGSUL9M6xzTj_`Ym6pOfpoSaB<^7jOvEGny$u^5J@ zFB)5dpzMr0;qb|+$Ovw&Ri;me$mgd>Ms6>vTkjg+tX2Ee{?i=}Jc#+@)*mY_1Ox#3jwmpQ!eC`ZD|{Rf`hC8R=94Lm+n zHCu$TY6|4&V%pqUT0ljy+G}?_~PsE#h2iVJ>iRG#x?Jpj)rHY46ldn|BM;kt=h@;H1;;}LHS_R&=$i8$AIX-I~qrHtBU4}2OBuMo%bP^2= zYPHh|D==yVSdr%db?sJ$d;BLSIrxcB@DYhGX1BVY9@*qvT(|z-YiQk66PAvYs@Hym zM}GvW8KX|*Xe)-1=|zK`jNj$g54a|1mqmsHz!fMl) zpznE2b2_e9aQkY%mg5(T;OpN&;7~$XS{&d>Gjx#u6?>*ypUCIpmT3D3^a3yGN=No- z)m{jtMR4KT-amgjA&cq2smhTZ-{MX@pHS&s6C7_m#js~eFLC{I#BbS2>NH$3Z<}jb zwECpt^mTmZd9RD<+Ny#NmnJMb*UV(8siul`wA!o#FKMoKT>_u`6#R@Gbw$GF@$d5) zk8@k`gwxSq=D+D*hG+Db5xik<%B9ZWgEW^!HYTu0}^0%Eb;#Q4+uut1wm{HV_n~jNq?=4cVm990|dI9r;@BP@(ii@0< zA?su5t+Ed#>?^mTK z^HMH%5;Xq-i$?N4SBtessau{6It+SMOs@nTmc0a=rs;~*<(Q5gnfU2W;aaQvRQB>A zCxbWgP*o%>W&NyNszip%#WTaB{miK=I(CqwU5<>+^K{-Vt@ODz?ht0Jb>tuAog$lg zT*}SfAODi+W$-F=%~&^)0}y3J{=s)EU)R48lTvK(Vp5fs+?}!vSR-`DF5I6lFSN+? z88eJ9gxbqOwX*^}Eh2!MTZ}re!BT~?=VVpj;qE{vt9TB6B>%K=EDw;47##2Y4Zt1> zWifg;^z$)v%3<2B3L};|$WNE83b?lJd^inI;v_^CibLtoD=)MSR^?`&p@HTafhJU_ z*Fu4;5Nzm2W;Ql5gk>pL?pB$;Bqc+JTJvt6j$N{gJUN*Mq2A9HTgW4$SP8uwx^apC zY1qNn_D;uFb@%TkM~{C~T7OU4Mrzcj3@VZSa!RF6X3(o7VpZfR6oMP~=kJ8+&>QA86{O?E$qisw3zZ)`Me-0%1O+5;I>; z!i7TTBN}91chWLMf7EYT$L0bY8TJM(F@GV`*Mc`}O_2;_WfQBa2`{dEN^d#!ILta> zThol4)sTnTGObgV0gB)!eDn)01W>U*1h0?&YMYe$q-m(U0lNIcLAwG9PiEqSLeS4m zPV5JN6}g@wx9%PQmv^lUyw40DbdDC@dif%Tg`IsS#NZ}W5+e^ys-NR5i@(*(06G2fRf4}1V0I-(V3t>}6aJ~R7};V_uh5S2Io;}QvWGzknzUZmkkt)QTNmH-AM6XN-BWsrF>-77& zz4gm5Pa+cM2Y#jz;PAXaPw{YyRN*;t^hU+>E;Ul9LDwrKyzpr@_BgSj)%bFv zLqDpYinU-yVDVcwk@Zvod?85rK~#X+yUh#_uc90^yNR5f)b9jv=PYMf`xGLWb1mj( zVXNcV8;D!_82$_Umh8<}`IJ#&rX< zeVDv$TEC0Nz79DFt2)0yn8Ngz|DvtKD75!8;r3t4kbNta+^ec`2rQLmWBu@%EQaqS zWI4O&Qhqt}ud6_NKCJuOiE@AGs5OCBbXK6jD?(h~my{9-lg+@9XQn;WGs%y4M z=kN~%gU>Pg>s>;$x;b$y7G!sb9IZifY)&Dsc0^hF3)|Qm5y6#p^BeObl%U%}!^aW* z?P*NH4L_e$-P)&5kg7MhrP@0HxhAc-7lm63_X;Y>8JuoCIK4mfJ^?fGXDe;)d}xFu zhR_Gm!449|f_j7ZkQ&rDp|a0+C9`2)-J`b{I_ePH80P`GNxWv<(%28XzbJ1Q7k?6B z2xju)grRgF{x36Gg-fpowbdmBH|A#FMUTA_j;*O`R+LG2vEivkPSR8te$k6okn6Hf zseJyz}-LRg`ELs#_q zZO}Y`>}rkL3&(OVD-BQL+m*^s&Cf)%$@`iViTDLb*S=cq-Rz;^_D#cagZT2TY$JMd zb@-^6|3JpVS`9HB0^;&Hh$SVw@UXU}i7M6U5gZ?tN$vD4Wj3hSE+aal8HW+-?ieYs zDwk-`fm@38ihjHg@|ysbif%;o<4gp5UaIrJOjcB8T$gVt=*$g;Z#tvrecBN4NA^78)+}XT3#UMu-tQ0P>N=w_W@x70H zch9OqvJh7*Gw4Y<^4mE>NK%0FN{zjybEAJ9k?%~}!U(+(c69>U(s}B&FNx0au=>Kh z+xp72;7L$$l2bdXLl*UWRLmpUM+b2XmRt7UrRizsObu*Q40>~TajBXU>Nqxp zI7)c-h0sC^!5*JE?CDEFnxW5I**wXU)aoBoF~q+U%>b2E_qHbkolP+I52e?yEtsglgZ*p)_`Nx3-P%AO43S zWysox*C{5v_zU>DP}rW~tR+#*XtvSn`A2}8r`k{??G|#D)()Akc|Dyz2mgni422(- zJ)QyKVc}W`wCIlf6tW5Ia|UA4QP>r8&BBf()s{A8Lge2K9W9EE$4@`Q5BmOE_fw@$ z^p`E9l4?lX3dM5mIM?_gCw@HtnuAb0a~fsr#NubAzrbp@A$zC# zfElJUbm408(&fFw6R+nj@3=+#9j2v$uzzlcw>(Ki(-J`$6;;Ym8X#+=` zoDFI(7?F5f++Xa@G~gxfQ!J;<&lC*DQ9VoAWE}&9oOabqjH%1#20crJ$&Bz(rwDg1 zeE?nMYq}zXw?VBLoWA`uMv(wF(treZmxc4fs@wI47w0dE7e)H^xWLe-?K{dv9;~Tw z+{l6C$KgX7&xIi**`wijs$!5Y424&Pj@%O~xPwC0K-`yGbw%}hZ=$ikIc=lT^!@;> zmW5eOX@y44_2<5?PUla#(0fY5adQj$9WMG`!>EPT!NE3RZ+&02hvY~%3C8@q7oLnZ zATIu&hZkG`3me+22WE?B=FcA&c3TD)5EPPwL!0j9@nn1yaasm`QI z#Lh{6a&$;hh3OYx`kWKZyM3dK5G1dk(=Y%!kU}h~QvQ;SuJk+grQ~v+N8Iq?&c6Ep z@NRQME)Bzw26w9e^>90o%?l7h?39act@f^*RPm)Yd3db;YOadCK}SuqMNiORtU3o) zr&L^GZL3rdE>jW+@bKh7>+mK)ehvb|SB&s5H6lb%isgFj>uvH}xhSpc`tN44rhspH zHee*ZNJDS9Sl@FVHEshiZYY^(V+XvqcvNYHLH$TgqD(31EGevz@ai!FoyWP;G#4Bh zc;j4HBRN1NJk#rcVRlw-Y~$Tm-?zE%UJBFR;L8!Xx(9L=@Gcxd^C3H#^0u{FO(v-yb%;abD;^sQqyJv+9M+ z>6t?gQZCYer>>KwtJlIhxULlP10QsSnn>@a31{CU1gvm1IeMQL#f=r`NwHihJt4r$ zf5JYCg&xelb`P%0yfoU(XdqF#%_C^)wWsXGq$%)DHcam7zM@1Gs+U;2;7E&jbvh%Y z_1nKFw+~BE{bTF}-lASGwOUEoqh4E15_5%H8T&>4heZA}o?M138jx!8bV}dwhz7L& z0=lElqbcEV!!N$3V^x$jlTV;MH1<5VD&pd(Tih_GxbF6j3MIDKUhK6nm0M+4kb^h` z_R;f(?+|D`=dvQIgbD__Y;v*Sy<-x0N>xd;(q4SqZ4bCdKun>m!$57WO5XwrB=zz^r{a20N8r6dQE=3en8K7IX>?d<+J> z2~DAASEB_TeY&YwoDMlkURHki~g%`}7A`+d1|&7h68? zTiZriWo!`BwiX%j>CEuhUJ%AO5P_8_L;;pSE3-MqQ=55Rw*Ma9&DV zPEd&#RGv-ebce&U9gFpXW4&A2M7?G8GlQSs9eP$5`rC|5-vJmf70~iv#pGUg4Q<3} zu{R`8ci1hXJ22Shdd*HZ>gq_VRg=r-JiToo2mH)pjK*7=0^A>Qx? z$?06JVv%x39{SLG0X_8ey7*)pt}Qz5oJp_L0Jwm7;y5iHUw*z!qw($b;u(?dmf(2k z2$#K14vtqfAG;@9>j2yfK>hif4M~Dr*e~{`qSX1?Ps!x6PEBvK$}nT3L7|8-!zk~ z=6(7XZ$W9|hosYSGoC^GSRRzm-X|2iuJN#+47nGl5Y&9j^PEyT;$uEGqh9Mko4byO zLC|f??9$kvSC6~@{y~YAeSGYIne5$tFQ?eoDz?KID72WHa#bx8fViig)3DNz7CO2| zl&KgrGt)PH_I<{v2T`sE_n=ZU2;d#) zSU-zSQP$Bz{pT5B$J(S!7NAfqhXUheqVw(k=DcU64e7MdEW(TX)?Du0g=BKHiPpSM z=7YZKspnbaZ-crIr<8p}1b+*EazX@cx#6PFFAIxjqWzB3n8WR4nj?)XG0(VZw7Yn= zD))-c4#Q@g>j}sc{yv*)i$xFzTIGr8FJ8ojt-*y;Q%PT|dUa1HEhJsR`N2x|KgQy% zj(fGm+re|y#_hdU;CTMV$CoX?8y`|M<2%P7iHC%0#A77jhahdEL z{d^^koNb0@giXndUYK+wIdvxwJ|%H&X_W*vqfW-lv&2xywHGhd37lNF2WpV|_OJ7` zi&XJJ4O&(5xrlU}xIlkd>C6OIbkXOM?>^(c!k|@D*_F{dn1~ZZc`t# z663Jq5mFS{vnudIWBb715Km$=yl}G`5u^&Y67mq?A7c*WXsV~UY9Iy@t-GgZ8jWH* z+c@9PnVY|8k@gu}(H51=d_t(ZQ?A7BRe()^zF7#g;Cjub&oPX$QI@3GZA>VKyz5`B?QnrNMZ|`UKwG_ znU#dx<+Ip?zfg_+W9gCN5Jbjpbtz19nx~MuE3BQLZcIM+Q{vW0kzVS^Bb! zD%G(pIDXv%E^IG|-aFdQjaEk;On3^+JztW3koiVdUi&*x1Yi!N^j{e`!eVyx1s@#o z^EmDE#~6W_n%G}mfOy$(fj-+-Ey_a(If8kTIE4sZ*I9ZGPuAPPu>*$@4o(y0TA*bC zRt%)p9<6GSKO;x*HwyS%q2BBNBmCyJDa&%{rWxfX$25qek6V@9)Lj2=MPs}9)#RweJS zBjW2txeYZD=c3~(!7rqau^2$;qcU5k{m zmv4iV50iG!@A>1-;ANuu5LR7cwy5H-_pbvOSMMW}B(67Y?ug@!@Hd<6oeD9$}MZ10pG<`jT;eJR&Y z_5!$vSNL6sV+o+@r1|qCC!I_Ydo~AAwc+l95F_-rs(o<-6HpZ3ZF}eJ%)_}p=cjRJ zpIJci4?5eKJE_t8R`yY=O?$^o)=ZYe8Elv}#HjAYAy7y;ZN@v%W*xa*!-Wty;N5V} zjT)&4shh4h`>D3tZ~erqMrA$(%lqHAsT*>Y8F zxo3G7107I8xF{D z!CqRDK7xc7Ai@#s6FR^;v1&UT7A)lGaIEz&MEeCpYO6!xn?mC-;pRq)R6=AoeQq3? zISExIYf?mV|B(HB5b$Vln1sA0FR|R$ZbUHO9lB%m0EuEmfYa}(?h#nnRz@<^rbdgZexHWyRS~#Py;Z4BswZ|Mh$Kmz zNfPIMsk%M7_pW};vs$wlJ#?DZu6mkWRo zvbNFRi4{E%!aF$R=m506Shtjy%ncu~^$Ca*pMz=}JeA<@P2FIA)j(hh4J;46;Tl=g z*f@WIsXa_A*c~_Bb#MS0G*L>44!8(q2u;#Pu+5JUgX5&QKgO8E4f_i8WI<+0;vdPZ zabUkzU{3=bEpj~<9vQ2^OXnfI2{j+tN)Hg99E1v-X@zN+c1Qq3v19l|`=QO2!IS5< zvP}jqsFO(Z=CruL!H#?KApC3Dh!SW14O{%EsQPw4f$rFz;`Lx4Fq>d{1HiNKK&5$JKfoB)WGVUV=H15YI zwt-%WSzG9OFlS&%Dx*eqt|U=xNlX>kj@`Jhr*z#pj-$%DdQ?gTJQVnL2^ddu|LljU37ckPu5k+do^+KYuQ0p2uhG)Cx8Nr` zD+%oD(9u_o?L|+gyS6hV_fCt27^|Zs`5dIqoht>%m%36-I_Tb^A0c1u`@OOpZ-%64 zM-)x(0m8Q@%`$3C50Q9BNx-)7CBhZ)Q`|SiuaJ^dciDQNIq2gvw)c#WKB~A8Qd#(Je*6_u>cSB{t!<> zabN&erIV`La7*p_vkNq9P;Mly>O#f!Jmv zsJ(YdQ>79T;uM4YNxM(P+LIt>*}~J&R+-5fe;BuF9okAxYK41!8&s6B#I-8$!hm;F zVdQid^}N){b0M@{(4{7l!l2~5JxBjUJ7w?`WHv6>lfG|`$g)w7(j?PI!*8SvCfwUX z(_43Z<179!%wYmlfb2!4W2;vG=d!p8R4X466M5IDlq zA}ABXJ95a(Ihrp-q{_KUXXM5(CMiF-)fV(tTXuoEzJWN~ffR-iUV%PApm2#K?#K7S zvx>Ac;`fo?YKM^8*TBy1`$$D5;T52Yv^(XV_?J)@Dn=VFXPtfC%iK^h6_c=?!moq| zddFe3TkF`ClHLsVOXh9UC2>ha=Ns;m;;x_dpjzfhT@iVfL<0W^iMnEcvJk__LnhHR z=1ml@#2X-vWMyVU5a4#DmlE{ZU;OTv)(@WsUWP?XY)Ewrag={0*S=1zPCtJQ)Esh% za>q$9`)`tcmTFCc!tf5_2K|lYY2y`=`)Tq5tlGBfoeHJ2GVLkiOJ0#N2@#A2E4~TssfjIYPp0Qp++uWybtf?k+>Hrujh6XLCyRg3-B4|@rxg3@*x1i3a`9?z}R{u>G$K|{M6?hewc9X~YHIY1#- zxOU5VXlAb|hc@?d=o-Uq0x@?KDv8oUF#JcHyFmHEbPp8aGpSK0$JoeB3~&$ta81Vs zgt9TvX^VyyWp^&Zzw1$;FcoMHjqxlbj0ioc1_)n2^gzo6N+SzESRR(DkTiW!f+}a( zc`1p)I-B?lcACRj# zFeEkv+dwo##RnY%5>hte!Y)!hvCQ(W?(YR)i7bZJ=tcvE`m#66j7MLc)`k?1YV3#Alu}}IMjjC#Y5D}=M>;eDqrv%pT(DYL$ ziC+r02H23=(cm|f48w5cRXQy{#{gw1$Q`gTB#gx4;T}9wg(UO_TsEdI9TA$2{n_{# z!|r?X!pPRmHhX--A-F=Vpg_1nUj!)t{@XoUMSFqAxXHXdrsI_1E$%WGlfc?E?w_=rzP?QT!T^s+G&;pW?ibsSMXi`&gB5rv3nQpmur$8_CQK4d(y(8@o zTWrg>7u^i8p>;EgOscggf6<1+&XPZmy0omB!^WFhScv$POP(?Zvs)RN0ZB-_{J# z&FyP)PoLJPh~VyW&`HSlih#WV(_2RLVAKr)+l~$2BEw38@g;A1Wf|ece@N)eN>55U z`%ZM(3G+W6>_d(8oTbg}M;j0B z2dg@8k=t90omK#KLZxX2pI8?n<1IJ{aZl{^=`Ov5g0meP8rz{jbB_%fKZ;t%NQO82 zyEW37CRTG1h)y(l_E@)5Q6bDc!v5kZaGQ}* z&{YnMid^>@R?h=D<;mzj=6UCvZe2JAx&?9eEtRT-q+X&wnR-<*9(-@YC75ZTS%549 z!GM<=rnpB?uO9B^TeUMBp`maJ)k#l)*(u;WJ(Uk}9Q8Z9?~8suVKjg!Mqq;vQ7<#64bW2E zlTeUYP;&QE=vl0I_L`j_EyS3_rI5r-Vikcs$QV!lZTtrQM^{pkNx;y@BzY1^P8*}T z{bbMvsv~&NOAv-Va><{#h@XX&jMZ8p$@+pI^F-%f@RLL2pD21GYbpF+!?r?5k|DYV z6&Dz(G=OSfJyc!rzMnYF{X2LP7|;F^qHqY?e9~{D9*G-649_7Lr{~Ql4Lhl{NI@{N zk{m6i1Ua#BI=t+I07Y$EN8jnVU3dK)XmG*nas*vMwbfGsJJKqmS;yV=8Qn&VThR83MaXG>_XVzG z08*VJMg7+enm%FQ^q0{`MA&BcyVV0QgDhUyL6AGO$k@)25TA zHyfW12A%EY<6L8r(+*P}cfSv^&RLu27T($(a`;ZjRj8yCA$LN*?lGPMr@ZC7EzNKg ztNwFDC(cz;1<1)L9qSDNYF=FfCOo&(Z-W|8qIVIrr|{o^dKL)40_@{M{4U(RXZGai z>p%i*eB~P`b@Iup#IG|C${tN#E-g=k9<3=vqo4bQn3#NvF`!Sf@;e96#I~!iURa^Q zhEDX94L6VH_B5`{OPqS@n)xV}b;1b*+3bJ_283(ZmA>t*v&xLCFa@sV*;H|-dD~kL zh~Z^Zrn@Hhxbz)?`q7*I7Kk3}JwO;gpfky)pEUsXq8Q{D!*@bq@>#!r9)Y!dope=^O_|5VKX_sXOhAMR>U84erGCP;K^Z-nPw- zZ8(gp3L-$zfEmQA`bgitng{x)zLB7LI9GV{EP`fn zey}4_>AY0ry2l1L7RZo5KgD1JBXxbtfgEAllMca0$HiQg+CCV8(6=AB{HYhV2)KGK z(9X2Zu8#t38_1eBs>mY;{jfg92ODa6r@3X^1gh@e)u zRkm3k^xpq86|-SzrM)n~23$7-N||5au>+NVRT}aLf5;;|p>dA&WoujoOL6_>2Z5Qk zqKSU)m5@zj#~b~B3T4+|@j>F5gF)J~2JlyJV$fFm+I8b)5S6|2141?T9{y=g*hp+p?`d!_eu;w1R8cb_dgHVG;{tOh02NOADDZV}K+ z*g}H&z&nBV-OGT6g<9*&;N9gF5C)uO-U`fA{<7!8*>9+Q7fvY}f!}lo52=d8NX1#6 z#+kTX`^S{PyktLNS-+Z1&kKBltsvV122cYqwOa?kPn|Gx(gHtqGqK?8#&OM9?gA*k z+^zmWhS3|JY|Ww{V6b0Tn`CE)y#=7{yL|8{*k^61<6Sdzff|`@@A6By5jEB+P$<(k z2XXYTsMa=t#@&mJN`dh@HPkTo)@tjsYbpZHywUd?>R^8@1}H04VyC0WYgB?1)b6}* z2?9+NE&zFHo=X6;VOcBV43!A_Aj&}`f%=WD0qSIby%3{Dg*F9I1qJa8WKXe&12`O* zQ1~XWSWU_^a5KdoRm+V_3m}Bp2N7#v)V-+hPlc%?J4icvpj3(dm&$CoEh-Tomqx40 z-RbXvZ}2y!H9@?ZWdZSRqzTk5h))p$rZDVn5TtyVgrw`mxm5s56c|p}J=u(x0?*t5 zwg{&&43xU}aw9|XoO^J5?vT@@{fF6DN#epil=R)vx9Wx?ox4nAQuJigig^`N|KrrF z%d2~F81ugjc6$E{oJ-oQ+u#u6Wb_c#a0n}UDCBwO)V0SGe&8$`@0{<{jZ&-CHf+#g zP2Ph_DDcTkVY)&>>l2;y@!)-`_-U1=Q>PJ-u0$9tI_&cW%T5V7muW*J}9?fg82w2g&dO zFrYU=@Dgia+IE&D3edV1g$ye2kN{M$|RUlnr<9AqBEiQfWW!}iefYZYVt#;w?yJH%PRDM(xEQf`iROt5FCGZDi4iR?;``@Lz;y=pu&Hx*aCLe z2zSG}!aGh%14^&b0r}f7730=5p_9>+RDS?qcv{WnQaYoYz z{|JpeQDyQ13d)^;$k78LfW%3dT+m}D@^rNN$01Q+ft{XVwX`iAcyAp=?>gr?`yJ3!u z=hhMQgX}=I045Mlmh59^17-Nr9c0E7l?jxZ&%CJ?VGEZnkU^2{TBh{I$8W;`jg5Uv zQYMF>i|Q48i50-pn_pDkcHN2?0d4tqoW{j&T;zseL2JoFgINB@<{>9w*Y^54c7lCm zo$dZ+A53d*9#JUdNNAM2n7S0v3OM!rZSWrqqP!R?VQ?OW%(KL5m)vY)l#jA^yyO(P zNcRiX{ukmEr@zYdEy|GRI$&l?xc^7IIZSLrDehG*ry>ir-vBrKc2+VHdr zj6T#DHFYTbVoLwkjSE4&MgL?Bf0?j}$@Lhcq^U4Xgk~atNR9^; zbeM#?E4;-1B&c#3yMm=lLLTdS3COUnmUrILiL@|y@BsA7jc8a5v)Gy78a-8X&bC<# zUni|nlOFIsHv&*sxJ>1bF<;tT1kC0D6TXtLR_QF*%eo&F0_dfXz2)5rOc?Bi-!UBO z0OIg}HQwx$Htq8C$rH)Zg!n}WL_2m0^n_*rTGo0G;e?PTLpeI(W)5oYkPl%zJ)t&w z{A-0pJYQi7-lnmKI{uq?#U#xsk-94bIQgIV^IL0#U)xa2%tkA{OUz+BdFo%^eyTXb z-xrJ|2#kbG4WLHu_79|`nT$omsV}%ie<6PhDEtoo*H$7I)0nf;Eh81fgvIQ99jltR zTVJ><|7Egk`TbuGKEAv<`e$d!+Q1_t+ODh%&l2QUE4oSkM}2wnqZ7Xs7zLSqy}h)r z5Wjk*;x?17XSYZ`m)Y{uiad$?w6l3OEArmdAACgGVbx`ylAS+KKHhdDwat`j*fh@{ zOl{9WOg!e_2jygn0yz4E6U_g^aw}AVHC4ZfqXm&GQ~vNLQg2uIeKN z&tA?p2qM>rdr}I@V0&L;{~!&0EcWEt4I5A0nq}2>{J`JcGvZ3z+B_sd-4}ds!|XXT z3hQ^DY;4C?`T8RHvCxN8;U3#%xL9~(XEC55;{7J=Rr))MHZxl>;J zo}Y`w*vWY3kjJJBT-sEE_ISs)PQMjIF4<=*g`syN*pBU9j&5qqsddEs`c9qC>xl*m z?2knAQqI<$9`g3`Z*)P&Tp6h~c z>^^7NINotNNDdRA_WZ&`g0zj4@|!$j)kEDAzs67SRZr#VJK~lUuKh>kS8|<-uKz4t zKUfr~^L%QC?URqibi`=n7oI_{BDG{(+=y=<7^(c+qPf`YK#Wx=4<7U`t7=6@=S!1$ ztxwMmM)dNJ6N(3FS9hu`jA!m`iP&`+)fh)-p89<&9Y)!TEo|ML44L-}ek#LRg|?Fl zUiAs}D$&`PEsYDCM-l@xasrguy8^4sr}$9lfaW-}B+&QNCV3CT??$*H=e4bI`xA5g zCl9Hne?GToQs7Qu{gvN2{b&D3)AJZuo>+KTDMwP#J+-bJ)L=mLHy8@f5?8oiJ|COV zar;Zr5{zq*xs8YCPVAL7rxhPN5|rD>J0w1@T9k5wNNXm}yO`z%9u3HBZOA-U=P`Q^FkOB(!& zbX^bDT5~*1m)$`R3G0q7@@MrE7pu4#uwPAq;4;Kqw5L%Or(=?N4#fseb>ZI)*i;C3#et=s<)563jr_IN+Lit79v3#}_y=$n ze3lH4=cW{h%*Kw2=6S?$4R%bPX0^lK-Lv1%K96+X7hvigQQ&ZZS43@$3;hm-?A(^2*=kkd0uJ&)OnLc^SB6MWd42p!{_{mgukWM@9s zRmRp@%5+3JNAg`{Zu%YsPRjZqW3`FP7GPZaI$Z85&3fn7r{RO_DKGZJ80be-dcC(% zDq>=PExZ*^Ib~ER|J|c`tW+F=z1NsYk}~}?07l!AiHb~GTgr8)aa`thkQ}QrB?|yK zEKgIl#Q8BSBw77%P}%hB_@YSRe_x$hIjmgnR4UL1enOx=W5q$?HA3T zq}k%9Gw@BjIEmN2sZ|R^nsKm5WInb9X3*f>)l-`a@1kIzP%d?sqq{SGr;G8j4Rs0i zS<%@nTBpk;CL>$d^_&vD5^R|<6>dfAt?y)(+?^9P*LQvo!LChkpT7m5DjjhQ$2vTA z&*AV#FZswv8g1%34QDaqfv5^jfeLo$g9-+tDkrc0Rd>gxb~i*D=X{9^?srT6;)@F-=+#NFjB9)3w+(U|`ePczH1O z8IDOx&fxR?;F(!}H4^OpyeVA&&N0Bwc-fto|B5AMZP$4Q=w(mwL9m7DVUAte`CXSyobp%(Yz|ie}rk6{?xnm2QJ^WNo(lhncOxH5N}1M zZshBh5JOtO9YyLtV>i4o8`yf%0PUV57vL)8vaoiAv*<@WfL)@lw{x8iPIrAgIVCey z*2aNls%ZS826jbfPPv%EL7yyBzr_~}x-{0MU~P&Dtsq*nJyv~C_s{TvG@w_-T! zXjSYg<-gR|gQ=VVQ<)D6p^XYwO!mVfBzsylEGK_DwNT5S)j-m8T0ef!KVwge z{`;tZ0jxqmv3Avo&W`3JtWu7h*X*bUY$5s}Lf2lXA2reD4tvzvBKg7!B;O#b4Pjqm{3M9){r)Aoyv)M{0RNU#tVxU~)c; z|J7W+JW`>kdb!kiD_0`-g$7C&beZHwlua!le8xQIM>?~JVw8GI4M7BezCGrA3~M^{ z80t>0fjiM?l1wOwD*&*q0b`y#3YrrOegc!5@Xvkgw1frGdR%arTb;KwYW^{3E$}#? zrsz|&`FX-^ME_sos$WeLq(ZNa2U0Lb+Lk!A#~}!~jKdYSk>lCUV9GTK^`Ag(oWW(t zgUhJt{y=rQH0mZQ_no~ zTN3#=VNhKcb@aM6fS;K?<{v~Fj(=#IG zws)RBt=|hF*j+cFg__U|Ma;zmqWPR)(RN`}Y@qzf??W=zLx)38O0yrK$p26`GG=d! z=8{2;mPdEL|KGk)7CWn9wZXR$kmB1*+|6g}MX9&8!QLUxt)h63|F&`o? z3wT^F`T1pdg8u^L#a}4cJU^nkEaG8FU_*31J2PeO$({^lBy&>0nM0Ilf&99T>hu%v$UJs>uB-A#H>mBw=l~Qvt zMo|TUZ$3QBPwJJ#n4Ivb`GmBq7&Dg3f4l9Q2JtC=k3froBjri!3s`8 ztv+n;-KEyTT#{@d*4iX@P@bhYnW5oA7LjoKuUVjB!gj92nTMdmktgCoby-ROqZR-o+f)_o)0(Tw;F~cR8whRFbDSBn zLsfc2bNII&S|1w=0S6%h-9npV;G=RJFspDm@H6MR5`|0JEH^p*UmrR7e4%Tu!-br} zKZ;{LG*_Iy%%2sB`2{(#_8LEmSfqM6qEPELEMyS0Cd&>#y3%PMhQ}o)U#+H=Wor zWbo$ui)5|ZEqHckEwZf7qdw3>#vAb!Y+gZqE;WsGdap>jKXipf1oKTwsd&dbP;f25M}c>>HIvLKin@iUL*w>xbwyla96`)eAnHz@;|*12y?2ldd#hM0oG54NU~9dtMZ_GVSsIDp%$A?@cx~ zND4dRZsz~o5fh~+S@`=vkSjoqZA~t>tgZ4*u-Wpt|3Zyqn@Z;1e?Bc~i%wsC7g(Uh zSiq)}s!Lp@zsbPlnLQdsy6$VUyhu{Z0IAxge$zM82PKo<#PA0dm;8Hg^y8RQX1x|2 z6AR2Aq$q_4odfq|fKg2Oq3H76hqVcG3i*t*?U=~d9;3gUZdWN=y*RSU3&I!`*N5dd zHS%*wqIo--i>ZHZ#j;7aCqcTJSX)SU79m~$g>#k&?EC4rLJ+E2#*zk&maje$F*}%A zXoh-g_5)r7C5=3+4(3Owa($y`+$jL$n28&THeLYFfqmPWFv>TB8RzK>1gP+48A?-9c(I6qB}a_B-F^;!4UGkH-wkP)mny= z?FpvdqvvS_=3_@Ft3Rfuq4$=~-8Q?oMceHMKJT*DM>Ik`BCVqP|MB(ZaWU`T|C26R zi_1l73QffoZAwiWy2@xn-fgs@!bFRvjI>=>T~|u)p+(yzOTF7mQqxAZQA(KhDKwO+ zCZ=U>O-;Y^j(b0!@Avlo`RCI07_T|6bDrmUme)CWM6?DNH|MX(AKWf}x6}q;bk8j) zvsr5Yf1-UT(5Djv5CF}+;O+zHw5W-+`nS9Bje7?+T|>srJy} zo^eKqk9qkiLioqxzy&43t$=dTfz$K7(;y0Hcu=&mQdoyh*72mnmuS4MIC3x8HU9W5 z>dL?)CuJPw9syg3_$WKW@3~IYAxlBGYFpl^8=aS6j0Nqnar9Q}Sy-CG4IJUX3}<1S=s?{c9Ay6MY-Sgm+dI&6<}|6|FIbl-Ia_J$`MhuJ?aQ?96BFXsT_);@GX*{GVRC)?Zn@ zmQ@D`GWQ#02~Ob8{cfijsY@i9ze8Nx3`4wnJa_60+F~E1u?WccbUE*Lqgjl!rpo(; zWSc`SaN*_U6*I>(UF*J0(H_==QvpA~!Jekw0SD`%R)SyY%OQzyWzEuv_L90dejVd0 zUoqlkPxPh%+o6z6tXR7sg7=j;mxX+nE6R|dZ3v%}?QRLzSztKU;Ha&;E~ zTj8+en}!uu&sz=$+k?Wx)dDyegzGHc@0VsdRd~qPclnx^M+hCcqy&3B-F0?8Y2c|m zT-0}w&1BJ+!?|={3j=4ua|i`zoTow$1CtEbN-na2$>Y%r}0|{ zIlIlx$$0dsvqN&&6TeE|ueu+HABoqjIF?%pI|51L#k`e!Dl3HIKX|_{`u`|clY(2n zM9={HSj&7u%?60E;U42KH}XS<&!cN&Kut-w8#yu;9xG9@pMAO2Iv3=OJW z(OJ3HLZclxdF+4r@?&_|;0eo9k5LDc8Rt%-=2-9szxAwSOeyWx*#fmElJd_+AcB0H zmo4qqW9R@@SmOjv35*b;g`Hv95HeW*cR-H|D{|FCiPODse;mj*5xg_O07L2D6pDbW z6G1I@N+&U52CRUGVW)09ZUK*<8`FAWwljESlf!>h#K}xIe7BxSD;l9bTz?M1;^;Rx zfbg6WV-NW_Jne(WB7}m&GyYL<;C;HY`z?|AyNkLW>2Pzc=etDL@U(~owZNHJvlKjJ z;w!jWJS=cO%^!@QYva`7!I@+M-92oHCvb}!us{o*W=03891j2s$s!+KHS1Mc(bvjl z>$KO^=Hr6GqwBu~rStlFZq&>C#%q9RTBTBi_@|TeP8c~rKz&!(HIsO_zbDn|(h)2yZg7bnTe_PNzHjEzbY2^Ne8CH!%Pfb>%NRTjp~<$_MiTW+kVJxv zGeVU3vcgP+v%~Wf6X2a0gHY1-9%#RHVrG|&1)=9W zPy;MDvA)z^DkW;REBv?@$h28-4JR%oq%d77(y!3$-1A{73US86oK8sC|AXxytw98e zcK3z}(>-kB@`>Gee)SJW=5K)T%km#m8J#XfiGoYtMHb#AqEYg)_^oa-9|uzU_#`1| zyc+Ff4i72r5qxPdu~F4$aGOY8PE;>IIRCLAP3fV@VN^B5xoUWnWiVZFqPPF`MR7;G z81vg!blO&XE2mXxJ;gv;_c< zEolZ3iOZdxK{w*^WC?DIl^T2??V+lacDwuznXsV{A^OIdP2%@6b=HwqGq219HdN7J zzzn0a*@+ocJ?)iSqD^Ta=~oWtZ{aCFs}x%J2U<-}kQzJ3dy7AKwC?>F#|yvcoXQ;o zPC@9;BowT9dVuiY%vj5(I`JAg4=7nwceXtzvAXO250@hHH zTT=bTDcA|Mu@IC{LZKG)(@E`nxLu2(6#6(1uvv1=SC@xiMg2f6!#~RU;R#x^6S=7; zax0Blu!;{_pf_3{HmWKkzoYzLp5HRRBv6HQ9&|By2aS+?r1xWjjD3*hz%c$jn_n8r z5E9Eo7=*=8GKk0nG*4U=K_FZ@Jouxh`@L0>F1Ao{mh(FF{sWj0MKHjNk%bW{L8{|i zK$g;GF+v?2`*3Fw5Z*SY;Dgjbs1Y?<3RsjXT~>!ym)CmBVXL;IY5E!ssWrj z&=j|?UuOJYITKL99)aT8F_|yb*?69F3FMe_@ozVl)5R=4Uz5UtI+iBXHDc9&@1CpI z0+m)Z)?L`UoLLeWMtim6UNfJXTbWxj1`mYdxj>K4ptdC*jG5S62CqA{1FA^;t#=M- zO!#QX#O*qkn+o(Ws=3`uWjuv6t->;W;+XTa4wIbSroJA&>c?>bGl3OC`7v%8oltEl z+;n!x9ygnx5+zH-%H~-`S&sJIc z2L}87tDbXd}r|oggy6(XI z%}I%qVDf1gk~?X?YUh1ff!CbV5YD~OagO&r$kZ~i;0QP>fRim3 zx&0$su;>*Jil8xs_Jc;26AdXr&EKL~SbH+3)!iy^H1SOt(D0@x*gg?8W@0XrlQ z-5FkCm)%R6txKD`I-Eqk0H(>@<>)zU6e_D@B$;dTP*P*AwBD=|_GUo-ej%*lwiLM0 z%p>gWqzW|o6#sJa%^LXqKYlGp1yX^BccwcN3)VJ5rmq#+alq9BG@jr%6Zdj)Qr!#D z+M!oEY>8c6jAC_~=VClNaO9roVIvQ}u5d|++rCkb3qU#U;r0kSYyoe^WSpq!iCk@b zO zQwoG6LT%cr&wuv<{HGD>+wZ=WrfIgc?Q!{8(r!o2{RuV*?inumZ>2UnyO9M(co&qq zrW;B?t*})YQi|ZHAW!~w&F88~&Bp%9^voDS>jh|gVP=D(R6r5khxS9k?u^P6h7=dz z`2W)eTM=mbC<#0b>U1hMWFKl{3Co#G;<;n(<-3>=l+CUo;BEGY0bFpe0SUpBTIWMG zeJ?i|K!DI(KLgNkAC?1`Al!O)8&sNEg8Q47xW8$FK%To71;R;CDL(EMnd*0eX|+FYY$XAn{OhD5L%K@0N`|o;wP1;FBYVX|=c=srU8T?UkM;Hn@_co>u z>of27_4)aD>0W6D<)C{kvGo!rsoQA*S3OCY!3|*3PNiTC;~%<2EZ+QZ)zeSevi5ex<9 z?IVLt#-BEUm#)sqa5A5ZJ3b(}D}mq^><4}fs&T)$3YJ9s2ZoHdpeb3KJ63}c@1E`4 zCV1*c)WZwknLk*mh{d>#oywEmF!B@!1Rcm`5IntJCB%e;&}vk8m97a~eb5L4I72Q} zTHNMnWINa#F^wjU;RX> z$_BjMvAbP)weSt8E3xYti=$=0cxgk-!y_fjWazsixaVs z0#O`1M=Z~%vBF)+^1{I5gQyd9HLf_D+b@#{9XF|dACKVWzSc~2p2tA&kvl;L0Wa-` z28Lfsx(-O80Y>h_lkt#|Ln*8`mW(2c+1`aQ@$Cr z@YvXyYq$coGCKEj_VqbZs*3R&XV(t{lXiQGE6JBpwuIa#XsSG5zT%84Zg(qkoSm4r zI@5uelSXO9@XwEP={l>zB7%Y}72g9R@t{;;{ zH_Cs|m$#oI0!p zVt`iS9s%T$tqO*V;;GpN3nv|^gEw#$U*O2R7f4Ax$bbaHzCHn|8_#Tz8Xk~)UMz<` zwZvChkeNSeFQpOF+z#^uGWi<>16`ui*-CEd{|yD`y`Us6VK7F|OK>qaGw}vkzJ!;&+MOWGfLAdZMX6dL5$Q z9E4;S;xqLI*^-{`V0i&X{&gG>paDl`esJ)RdM?lllw^)c#@84Q;l0&vp=K!=@)QAw zy-Zv9g46;EKAwsr;zmd2jM)xnS ze;3`KaUpE%?UpQD{y?t}`{YT7hv4w?(>Hi=Uocrk>~{-0ISj>*2-$)B)JAapu5i&# zM6F+&+pDbv=4|2xs2|RX;j2zE6rn)|_MM7(zbBnJ4Xs=3WlB7V?}g%Q*g4MXwG$e$ z)RpyZiJFqo;q?+%4pV}gZvsT`ztg)Mfvso&2hyf=*#cR0Ko!Btv%=!IkQ84J;jGbq z;52({+TqpomaH#gNW>_4zOw>P4Ds`T@6%Dgh6gK?nq*tz_{-rt{`nTaIeOSraT&7; zx{`p|O7&-Y;WzhZbe5N_t$Xn}Xxn-bHMY3g?x>lF%B0V9kD26?k1hq#Y}k5tN=meD z7NFYF4puY#%E^Gi?aemuJiLh&#;**c(4KENI|L;elVolqqh28DatdAxdlL;jKVYzM zI~cN~zdal6k{RuCZ3+&f(H0RH8q)djy_YBUzPtjJk5^sLh{^3gJERV`%Sc^yYOD~cZ%mOq0^jtXi4qWkay&iI*Y?_}D z-n9!c^btVj)lO6y)w0`Q+sU2%1;=wTj3a1oWt{}j@uK$ht*XYIhAW!aE^*5*oNjdu zo+F|zPkt|Mw=G-m)f?v1R~anba(2oI4F)8r_l#``-91|rxawtXl3q(S@bA)(P=`F*q2F`aOSxX?SC<+|cqb6u;zH0v% z4CeBoe5O#HC7rZR-7)gBe$RxS*CADn9_>6RKUfZwLnkxThcs>p?W9&f_jPqnOn68^ z%!FQlCVa#d*UM86{j@z+x$1{4wS z#M>;z(+3-p1sWSwpzmcn+5s2O^+nVBE5m$f&tH#p==M1b9}hslgunX*dPx(2#VI(Nhpg|i~JaC zsH0GNtR?=5xc$0!jkx{ES!=uzCCrQV{MRXWAS$+O37f+vvvfz*>}uKcozN4j|oRn=X$Ggmx$ukn1tHrX1vwa|kWO%pq8LM>d!_?2U!Vbt8lyC>KUmDQZK?Cv0=Mp1A&KPpJ5$~b4lf>ltj-|dFE zElkECJ@T{1h9s72pim}8x=6ZQWXzeOa;Cb`$>XTkGbibSyegl7aO7}$ki!_=;JL9( zc!pkBKzKxG2{YY*{CGEKs*VzRDj?>e_)Gx!mAJQCWGn{#rE*UX7GYbg{onM#Y^wp1 zq8!ZKNYf@0ayEJ$8hRnyGS~5@c3x?WbU|&JE}2j(zlIoIGV+8ZWfqkf9vdj!m|VJpj1o`uq)|C}^$40D=8t$Qp?=uw*$j`NS{GlN}%%ktX8^3>h z7 zjm%A=ijzmvrQpSD6a0_CJ%X=%aYNG%vpzo5H~393VrF>;MAVky?H`@9oKGp0)EWHM z*+*DDjPk|aLFtC%=f^lxf09ge$x^tGWEy2#Hak25Aw}at>f)r)34y;Luw$+}<(mzCq&kzt?e9P5pM3b^SWC>a9vHP7R9(ol zktcdy7*HU(T}d{RdSEnlCG6(E<5l0q^CEqv5ZV!Rky&qIrW9%XL{Rlz=8!JA{w+;N z;Y<~CrdlZC^(<|3FQ+TRT7`AbR6fAA(E+{*pC5c#x_Du^D2_8FCQT=DWwe5297`qm z$5Pc#nrO1#m`6Eij?tsM(o5aO=mc*w#5sjK(WF0*tk3ddiWD-=58UF1?nX`OPe?Cp zi_S;bB^jpQB=$bbc}rsZNB1cfNNi+)6vpAmtRWsP2vZ!AS^Y@1CBy$IZF&57G!-H4 z_OI)cH|SIFGxKyN;%YT|Hv`6C#RduG%%j4s_QES?+S|Fd=5w3FbwS`kpa;B!v7w7yz8<>{Q!8VQsjhcFnz={6Xub4+3aq@J3MX}0yAj0k~2C;|LF!g-E5E1f2E z%1Px+eIdD0{9p8`E&uYh2}tOj?Sq2Ew_8f_|5PO&?e1H;eB=r)r+$qA!IpASx61ep z5Vb>ZM0@s8q+zi^&)K654-{$_rutR72SBFfdXvQJ!^Ehg+Dm$4@$qS0pz!1$yniF} zG_x{JMSu-j=VU!QYQ>pD<;8rhAgaZS+j(zX4I+Qy<)3_Vo-w&AXgZ2tHPokJ!RIzf z%zHo&2v>R~Gp_RQDr2~k!?i_i4u4`3`%w#Xn1?G;89x&=Z53n^9FW*lE_%!tCvc{& zksw8%z(~>3YYv+<2&OU|9DdK-b&}F6hsfOp>c({M67_9{(A>#!n~@V=Sdf z`auDBJhG2zNG_?f+RN;G0P9M)zk=oRu9DJ+_@F_RW>IY$Ia9DgLznz)ZLqmic!yq3 z`MQP&T@8PveV5}1KeV-PY0X)D!|x#@^0VJ2U4l$b1k7(;OM9DPYtH!rn&4kL+Qv3q zFJI97cAcS5DXI5zLLc40E?nFm*_Y30_+zYP<$G|MXM?8C2BmK$*Q4b_04bJ5rP+%9 zt0va{FZF{#8HLmUf=YjChNRj>bCq%Lpy|QMUrU#pNwsg}gzOA5DQ1EOhAEHBP}21D znqx9CIW)zD{OrfS3Q5ziIEsUOQM9zSGAG18s5+BrlFn7sX6j9{3b#mlH@SqRW3N8LxpKD7hGF*P93!M#Yr)7!%oK>^7XKIgJ@5wTqKnIb;2Si0XPpGYwOGq6lqQIY8O!R2b(muIeEzy>cHDV6FhDRVE`W8HlOU)6>O zr=qpcFtyiMJG!&fe#WUN{>H)r@0`cg+PdY8zyzHn(^nkPl zh3Zm-2b+R#UEaq`v1J}gY*cPDB0qkdigM2nOWXjZuY0?Se23oH@1xaE&n>1YX1*K& z_0$LYlQykIt|2rI@V#QCH6>IpOB1LcWWdKI2CI(SaHgI&?QoNPyKkErk!DT&>D})+ zS#n3LQj70c|Is@L?!^3N^?m&bs(fAPjGb00G~Y1<>z1f8o)Kkd+$^F@eV`Xxi(#ge zu5F-c<@Ttng3hq|MLRfC*_G3f-IGTazZYzJ^fZs1Zz(+9gWdeo!^D8-1P!NTc1Tmp62b~dQ zRSblk8agKulJ5j&1(w0K9gX50H{?5N8I$gwLrmAte1^GH`yb$*g2J?l(^`UJ8?>E} zL1Jpe1&5?HSGDt=y_9WX`>_F|&)s7V>5w10^>4j8`KphQlaG~av3>&BuQy^$(t}Jw z1D5Kop}n=THAl?n>ZwtAcN}eVvur=m4H`QN9VV!K`F?8f1R4BnI#VQN4l_^b=|gcD zrx*K<_7Ti)D*8Lj0s*DPTC0i*Hyfiz!Qw0i_EEZ0xpJH-*K&~&XX*&Y==1xnoRIxN zCY8)?4ks+3?RKD|jR39R;{PGJOOIUhWBWCH4OKU%yN|yuP*`go<#d&AT*wT|WOf6} zUg647x{|nG3qQ^Ajyec>^Lvz6pr2@gl4*d@h$(uRlpAJ}{Lw`OFxzM>L%6>Wfwc?T z_*aHWe#v}sRnrdLY-SKm2xIhvz~h5EE!!N{e|#^(bq(JzDd;tZpo z0}nrk(MbvlOW3s zIdw9EDcV7?emQV+?3#nr;PCx=T=LI+Jnj$mBrC*o)tRC<6c<;-R#E;6KlBt@>S3q; zDQ`?gKNxp&S^JrtS|t`S7Kn2v$6l5GrBBV`6Q3d;orKZLVOv;=s%3v-V@s?84Tgnm z2E)*Vb(+yh^}b0d_Y5HD$$K4I1tebC7THD!6mX;yJq4oTCLLsm{u;caXrkqB4qeB7%EYuR2Q; zJ|qSA=7&(EyZ9xWSe#Qrvi_EI4ouIq4oZ*Xu7kgLWw|zUax{HQ_#pqF7Ly==VR7kU zmFrkmNzURkzS$;ylRKXWtCZPP(bsXOw3+h-?n%z`y=xZKjC8I}xZm9cF0F@OrN@$j z%`e3XBt;6SXYr-?>DRay9luuI3F*3D0GE^-Y=Z)1Y3^fc$?X-P=Q1@^c8n%rL73#MT;4Lb#(ER`wK=Bto)VF)MAZf|3ll*#PZPnt4cP$>e zOGhHdTc$Oqdk$(DsFq9zx(e;t;&D;mZ{z*9>c!KYW95Tt%_bIt@cPII;|;8h9b)Z6 zM%}B4;TOic&7>T*dL0S^uk+?K#j{thnVnrO;!{FHmx+e6`uPm4{_{DPvt*(@Pfpq` zo@;VlRb`yX4?T&b>gd(&3=qnw=x=6eXKX2c`*vUH1>jF>ite0RME%*|;c#FOmu_%> zXV~T3SFTD)gVkLqcL^s12FBa5TjqJS?}LDd5=sk**|9|yhO&&9#+>>%i!+j=J?bM^ zy26BMW_5gr^Me-}sz-G*8w;wA(~qDwG17$}_(^TI-E9o(yA9rQN>$4AyXB+lYm09r zmWEUg{`h>k7W1#K4d*q7lDG?DpI4?z_|ALx(j8V_Uo~$=O#^@cmC(`XLWu(Nlt$7y5xvv=N3dmMG^(6sD3Jy;0 z=rw(;aE%L-+c&cqM-+=>y@>t83kihjUk3d}S|$Wxkpp)E{hj& zDnpJxDBc9jKf~`SZGVa%$8j2{(4LgZMSu4KEI30!MKs|sPJT5y2Bu$V&dZYQ_%KP@ zMk*WXTf024k)+tqw^yOVl+u#{f4;n)o-~<7%HJ*c^3cygjrMl%Zp^|01qkM0ZqiM9 z7yk<|u+tM%29Pjg>pd{GIrKgg`uq$i4KAZz8_GrNC}NF%=Bg=PA3^SxqQAFA_rIUY z>nW&4OV_;C+Z_41#vNhnb3)E8e!SYl-ZSBO`R;Z@ol?as1BX0KVH-**8no*-@?X%gd%M@^3%f9t6bGj`2oV0l&TbNzP3os z&kChxpBVC-uH}RXNiur`@5Wo6k?8)Ol22MIU|*3gZXQK@nex_y{vp8pvx}<0)!RTv z>sAOh;Z<}_#wD%n+&s}R!NwX7z>BbnMcGupIP=y zQ3}Z?3)^HSMZV6579MCa*~%)`?%!N|`0c(Z2=g75HNSnIlO-?H*g;I~9dt7bTk@3d z>q+Y^4G>;{T|cb5*(Zdp4wu**81m7GcAgH1kJtj-LTSWQ*CT5d?LJt-H{I9zCszJ| z*$CCHjAGa=OlH}eMM1rGCz{>A4p~JHb{tfAJ ze|DsA(RFyzPej;Vd~r4@RuSS>J_F`qO}!_<Du1@P_=KWBZvT8_vtkM_d-Jmr~ zZsfjqOCLe)n!T##m&MW<*p@y14Sn*2g2+6`%&Yu1AS$$3q>J~dogKA z!e3uW>U#wFXvI-+Z)3{zR8-?MeWh0zstqD0IOv{8(5RQCsA$$N4t$vFVb#)rH$VbOQ(ZDIK@FDOcJ~ zZ&HNS>rBy5x#%Qk>M`Hg-S_^Ie!kBj-((Lw&bC%a^(s(@AhaPtUUSH%C_^$p^(f>K zd{u`icr>I;>xK{ukaV(|Gu6fyf8>kB{Hm7qq2c_h;2;x>>H3!A!{?ju_|s`zMSK&x ztCb++>tYTWj4J#|!JS8fFBQasbrV#L<6t?EU)qCC=QF2oGP@yH+R9OtX$V}!nSxAJ z6RCT*peJM4@^N~!w68pPjr4y9j0I@?i9V?wgx$uO(gu|yF9OZrv~u7*YkZR=IM-lq8f*_4rjGg&Txcl;P-Jh?RSK->LNE8>x(%cRdn{KgjFGS$=p+kSM zNU@zP#oz^{HBx44@ zt4@QZfLFgoKgxq<27xN<;&x+YIX{xl#x|9UDgcW>Y{fP}I-1tK)59gC4`>YO_W}`V zyo6NU%t;{W!z&%eB!UpzKWlJ8(n&H&)m58VM;Pb43|suXAp0+;+ZRnzf8njCbLn&} zDK@>@%^(X}pAS3Oy3@~eNw+SB2Ba-at%JRaDcrk0qDve=eD-k5C`D|J%4zpAJ5!DZ zp+?D{;~=w~WK=p5P7+!`JGp{>SZdK|`imD6BYlK}e<~Ik{To@rZy!yZmkeX>gM^)U2+Bh48*GQmlas!r{l*>(!w~FmJcYkmW%U8yCNS1s;4OtBNGb=4}V? z%&QNT;aqDQUZv`JU#4QPpM!Q96~F%))abo-1Va7v;d~**zk9s@G4U^Y-mm?@84N(9 zm?Be3s7Js`x8b+Y>8qKORd4_t{H4N`{i)(LInhjI`d^bY2quGlP$PtAQN?#%;knTU?Z+Pz6@#nBW^-g=T1Tz z?K~utHFiMTqd-0+T*9*HAxS+SGtD>;ttN8-Tj&VwWKen%x5dmW;-tSV3J50g40>Oh zVRuUzGv7)O-sBix&!Q-pgc0q6h7PUa56ERm)+~d^kLsi{QQz8{Pk*bxaa;vffC|Vl zwX*%PPy3{A%0AI1JUoj}B_%l@`r%ps1RbW=4=AMulFNBB5aL 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 _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ @@ -55,7 +57,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run y/nfcmggstructural --input samplesheet.csv --outdir --genome GRCh37 -profile docker +nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -74,14 +76,14 @@ work # Directory containing the nextflow working files When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: ```bash -nextflow pull y/nfcmggstructural +nextflow pull nf-core/centerformedicalgeneticsghent-nf-cmgg-structural ``` ### Reproducibility It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. -First, go to the [y/nfcmggstructural releases page](https://github.com/y/nfcmggstructural/releases) and find the latest version number - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. +First, go to the [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural releases page](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/releases) and find the latest version number - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. @@ -235,6 +237,14 @@ 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/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 8f857360..27feb009 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -145,6 +145,61 @@ class NfcoreTemplate { output_tf.withWriter { w -> w << email_txt } } + // + // Construct and send adaptive card + // https://adaptivecards.io + // + public static void adaptivecard(workflow, params, summary_params, projectDir, log) { + def hook_url = params.hook_url + + def summary = [:] + for (group in summary_params.keySet()) { + 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 + + def msg_fields = [:] + msg_fields['version'] = workflow.manifest.version + msg_fields['runName'] = workflow.runName + msg_fields['success'] = workflow.success + msg_fields['dateComplete'] = workflow.complete + msg_fields['duration'] = workflow.duration + msg_fields['exitStatus'] = workflow.exitStatus + msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + msg_fields['errorReport'] = (workflow.errorReport ?: 'None') + msg_fields['commandLine'] = workflow.commandLine + msg_fields['projectDir'] = workflow.projectDir + msg_fields['summary'] = summary << misc_fields + + // Render the JSON template + def engine = new groovy.text.GStringTemplateEngine() + def hf = new File("$projectDir/assets/adaptivecard.json") + def json_template = engine.createTemplate(hf).make(msg_fields) + def json_message = json_template.toString() + + // POST + 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()); + } + } + // // Print pipeline summary on completion // @@ -245,6 +300,11 @@ class NfcoreTemplate { String.format( """\n ${dashedLine(monochrome_logs)} + ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} + ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} + ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} + ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} + ${colors.green}`._,._,\'${colors.reset} ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} ${dashedLine(monochrome_logs)} """.stripIndent() diff --git a/lib/Utils.groovy b/lib/Utils.groovy old mode 100755 new mode 100644 index 28567bd7..8d030f4e --- a/lib/Utils.groovy +++ b/lib/Utils.groovy @@ -21,19 +21,26 @@ class Utils { } // Check that all channels are present - def required_channels = ['conda-forge', 'bioconda', 'defaults'] - def conda_check_failed = !required_channels.every { ch -> ch in channels } + // This channel list is ordered by required channel priority. + def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) - conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) + 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])) + } - if (conda_check_failed) { + 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/user/install.html#set-up-channels\n" + - " NB: The order of the channels matters!\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/lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy b/lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy new file mode 100755 index 00000000..fb59d54e --- /dev/null +++ b/lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy @@ -0,0 +1,77 @@ +// +// This file holds several functions specific to the workflow/centerformedicalgeneticsghent-nf-cmgg-structural.nf in the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline +// + +import groovy.text.SimpleTemplateEngine + +class WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural { + + // + // Check and validate parameters + // + public static void initialise(params, log) { + genomeExistsError(params, log) + + + if (!params.fasta) { + log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." + System.exit(1) + } + } + + // + // Get workflow summary for MultiQC + // + public static String paramsSummaryMultiqc(workflow, summary) { + String summary_section = '' + for (group in summary.keySet()) { + def group_params = summary.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()) { + summary_section += "
$param
${group_params.get(param) ?: 'N/A'}
\n" + } + summary_section += "
\n" + } + } + + String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + 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 + } + + public static String methodsDescriptionText(run_workflow, mqc_methods_yaml) { + // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + def meta = [:] + meta.workflow = run_workflow.toMap() + meta["manifest_map"] = run_workflow.manifest.toMap() + + meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" + 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.
  • " + + def methods_text = mqc_methods_yaml.text + + def engine = new SimpleTemplateEngine() + def description_html = engine.createTemplate(methods_text).make(meta) + + return description_html + }// + // Exit pipeline if incorrect --genome key provided + // + private static void genomeExistsError(params, log) { + if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + log.error "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + + " Currently, the available genome keys are:\n" + + " ${params.genomes.keySet().join(", ")}\n" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + System.exit(1) + } + } +} diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 8bf8fc68..4759bc89 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -1,5 +1,5 @@ // -// This file holds several functions specific to the main.nf workflow in the y/nfcmggstructural pipeline +// This file holds several functions specific to the main.nf workflow in the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline // class WorkflowMain { @@ -22,7 +22,7 @@ class WorkflowMain { // Print help to screen if required // public static String help(workflow, params, log) { - def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --fasta reference.fa -profile docker" + def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" def help_string = '' help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) help_string += NfcoreSchema.paramsHelp(workflow, params, command) @@ -79,4 +79,15 @@ class WorkflowMain { System.exit(1) } } + // + // Get attribute from genome config file e.g. fasta + // + public static Object getGenomeAttribute(params, attribute) { + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + return params.genomes[ params.genome ][ attribute ] + } + } + return null } +} diff --git a/lib/WorkflowNfcmggstructural.groovy b/lib/WorkflowNfcmggstructural.groovy deleted file mode 100755 index f08824f9..00000000 --- a/lib/WorkflowNfcmggstructural.groovy +++ /dev/null @@ -1,44 +0,0 @@ -// -// This file holds several functions specific to the workflow/nfcmggstructural.nf in the y/nfcmggstructural pipeline -// - -class WorkflowNfcmggstructural { - - // - // Check and validate parameters - // - public static void initialise(params, log) { - - - if (!params.fasta) { - log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." - System.exit(1) - } - } - - // - // Get workflow summary for MultiQC - // - public static String paramsSummaryMultiqc(workflow, summary) { - String summary_section = '' - for (group in summary.keySet()) { - def group_params = summary.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()) { - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" - } - summary_section += "
    \n" - } - } - - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" - 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 - }} diff --git a/main.nf b/main.nf index 2fdeead3..eea9b9c5 100644 --- a/main.nf +++ b/main.nf @@ -1,14 +1,25 @@ #!/usr/bin/env nextflow /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - y/nfcmggstructural + nf-core/centerformedicalgeneticsghent-nf-cmgg-structural ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Github : https://github.com/y/nfcmggstructural + Github : https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural + + Website: https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural + Slack : https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural ---------------------------------------------------------------------------------------- */ nextflow.enable.dsl = 2 +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + GENOME PARAMETER VALUES +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VALIDATE & PRINT PARAMETER SUMMARY @@ -23,13 +34,13 @@ WorkflowMain.initialise(workflow, params, log) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { NFCMGGSTRUCTURAL } from './workflows/nfcmggstructural' +include { CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL } from './workflows/centerformedicalgeneticsghent-nf-cmgg-structural' // -// WORKFLOW: Run main y/nfcmggstructural analysis pipeline +// WORKFLOW: Run main nf-core/centerformedicalgeneticsghent-nf-cmgg-structural analysis pipeline // -workflow Y_NFCMGGSTRUCTURAL { - NFCMGGSTRUCTURAL () +workflow NFCORE_CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { + CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL () } /* @@ -43,7 +54,7 @@ workflow Y_NFCMGGSTRUCTURAL { // See: https://github.com/nf-core/rnaseq/issues/619 // workflow { - Y_NFCMGGSTRUCTURAL () + NFCORE_CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL () } /* diff --git a/modules.json b/modules.json index 8d4907c7..8302c62f 100644 --- a/modules.json +++ b/modules.json @@ -1,21 +1,22 @@ { - "name": "y/nfcmggstructural", - "homePage": "https://github.com/y/nfcmggstructural", + "name": "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural", + "homePage": "https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural", "repos": { - "nf-core/modules": { - "git_url": "https://github.com/nf-core/modules.git", + "https://github.com/nf-core/modules.git": { "modules": { - "custom/dumpsoftwareversions": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", - "branch": "master" - }, - "fastqc": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", - "branch": "master" - }, - "multiqc": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", - "branch": "master" + "nf-core": { + "custom/dumpsoftwareversions": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "fastqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "multiqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + } } } } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index d66d9a2f..a8aa9bdb 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -13,7 +13,7 @@ process SAMPLESHEET_CHECK { path '*.csv' , emit: csv path "versions.yml", emit: versions - script: // This script is bundled with the pipeline, in y/nfcmggstructural/bin/ + script: // This script is bundled with the pipeline, in nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/bin/ """ check_samplesheet.py \\ $samplesheet \\ diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf similarity index 79% rename from modules/nf-core/modules/custom/dumpsoftwareversions/main.nf rename to modules/nf-core/custom/dumpsoftwareversions/main.nf index 327d5100..cebb6e05 100644 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -1,11 +1,11 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { - label 'process_low' + label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda (params.enable_conda ? "bioconda::multiqc=1.11" : null) + conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml similarity index 100% rename from modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml rename to modules/nf-core/custom/dumpsoftwareversions/meta.yml diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py similarity index 100% rename from modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py rename to modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/fastqc/main.nf similarity index 85% rename from modules/nf-core/modules/fastqc/main.nf rename to modules/nf-core/fastqc/main.nf index ed6b8c50..05730368 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -44,4 +44,16 @@ process FASTQC { END_VERSIONS """ } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.html + touch ${prefix}.zip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml similarity index 100% rename from modules/nf-core/modules/fastqc/meta.yml rename to modules/nf-core/fastqc/meta.yml diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf deleted file mode 100644 index 1264aac1..00000000 --- a/modules/nf-core/modules/multiqc/main.nf +++ /dev/null @@ -1,31 +0,0 @@ -process MULTIQC { - label 'process_medium' - - conda (params.enable_conda ? 'bioconda::multiqc=1.12' : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.12--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.12--pyhdfd78af_0' }" - - input: - path multiqc_files - - output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - """ - multiqc -f $args . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf new file mode 100644 index 00000000..a8159a57 --- /dev/null +++ b/modules/nf-core/multiqc/main.nf @@ -0,0 +1,53 @@ +process MULTIQC { + label 'process_single' + + conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + + input: + path multiqc_files, stageAs: "?/*" + path(multiqc_config) + path(extra_multiqc_config) + path(multiqc_logo) + + output: + path "*multiqc_report.html", emit: report + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def config = multiqc_config ? "--config $multiqc_config" : '' + def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' + """ + multiqc \\ + --force \\ + $args \\ + $config \\ + $extra_config \\ + . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ + + stub: + """ + touch multiqc_data + touch multiqc_plots + touch multiqc_report.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml similarity index 73% rename from modules/nf-core/modules/multiqc/meta.yml rename to modules/nf-core/multiqc/meta.yml index 6fa891ef..ebc29b27 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -12,11 +12,25 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + 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}" + output: - report: type: file @@ -38,3 +52,4 @@ authors: - "@abhi18av" - "@bunop" - "@drpatelh" + - "@jfy133" diff --git a/nextflow.config b/nextflow.config index 6904e72a..53dcc1b6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - y/nfcmggstructural Nextflow config file + nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Nextflow config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Default config options for all compute environments ---------------------------------------------------------------------------------------- @@ -13,10 +13,17 @@ params { // Input options input = null -// MultiQC options + + // References + genome = null + igenomes_base = 's3://ngi-igenomes/igenomes' + igenomes_ignore = false + // MultiQC options multiqc_config = null multiqc_title = null + multiqc_logo = null max_multiqc_email_size = '25.MB' + multiqc_methods_description = null // Boilerplate options outdir = null @@ -26,6 +33,7 @@ params { email_on_fail = null plaintext_email = false monochrome_logs = false + hook_url = null help = false validate_params = true show_hidden_params = false @@ -60,16 +68,15 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load y/nfcmggstructural custom profiles from different institutions. +// Load nf-core/centerformedicalgeneticsghent-nf-cmgg-structural custom profiles from different institutions. // Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! // try { -// includeConfig "${params.custom_config_base}/pipeline/nfcmggstructural.config" +// includeConfig "${params.custom_config_base}/pipeline/centerformedicalgeneticsghent-nf-cmgg-structural.config" // } catch (Exception e) { -// System.err.println("WARNING: Could not load nf-core/config/nfcmggstructural profiles: ${params.custom_config_base}/pipeline/nfcmggstructural.config") +// System.err.println("WARNING: Could not load nf-core/config/centerformedicalgeneticsghent-nf-cmgg-structural profiles: ${params.custom_config_base}/pipeline/centerformedicalgeneticsghent-nf-cmgg-structural.config") // } - profiles { debug { process.beforeScript = 'echo $HOSTNAME' } conda { @@ -136,6 +143,13 @@ profiles { } +// Load igenomes.config if required +if (!params.igenomes_ignore) { + includeConfig 'conf/igenomes.config' +} else { + params.genomes = [:] +} + // 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. @@ -170,13 +184,14 @@ dag { } manifest { - name = 'y/nfcmggstructural' + name = 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' author = 'nvnieuwk' - homePage = 'https://github.com/y/nfcmggstructural' + homePage = 'https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' description = 'A pipeline to call structural variants' mainScript = 'main.nf' nextflowVersion = '!>=21.10.3' version = '1.0dev' + doi = '' } // Load modules.config for DSL2 module specific options diff --git a/nextflow_schema.json b/nextflow_schema.json index 0b5b176a..99b1f54b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/y/nfcmggstructural/master/nextflow_schema.json", - "title": "y/nfcmggstructural pipeline parameters", + "$id": "https://raw.githubusercontent.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/master/nextflow_schema.json", + "title": "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline parameters", "description": "A pipeline to call structural variants", "type": "object", "definitions": { @@ -19,7 +19,7 @@ "pattern": "^\\S+\\.csv$", "schema": "assets/schema_input.json", "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage#samplesheet-input).", "fa_icon": "fas fa-file-csv" }, "outdir": { @@ -47,7 +47,38 @@ "type": "object", "fa_icon": "fas fa-dna", "description": "Reference genome related files and options required for the workflow.", - "properties": {} + "properties": { + "genome": { + "type": "string", + "description": "Name of iGenomes reference.", + "fa_icon": "fas fa-book", + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + }, + "fasta": { + "type": "string", + "format": "file-path", + "mimetype": "text/plain", + "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", + "description": "Path to FASTA genome file.", + "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "fa_icon": "far fa-file-code" + }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "Directory / URL base for iGenomes references.", + "default": "s3://ngi-igenomes/igenomes", + "fa_icon": "fas fa-cloud-download-alt", + "hidden": true + }, + "igenomes_ignore": { + "type": "boolean", + "description": "Do not load the iGenomes reference config.", + "fa_icon": "fas fa-ban", + "hidden": true, + "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + } + } }, "institutional_config_options": { "title": "Institutional config options", @@ -182,12 +213,30 @@ "fa_icon": "fas fa-palette", "hidden": true }, + "hook_url": { + "type": "string", + "description": "Incoming hook URL for messaging service", + "fa_icon": "fas fa-people-group", + "help_text": "Incoming hook URL for messaging service. Currently, only MS Teams is supported.", + "hidden": true + }, "multiqc_config": { "type": "string", "description": "Custom config file to supply to MultiQC.", "fa_icon": "fas fa-cog", "hidden": true }, + "multiqc_logo": { + "type": "string", + "description": "Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file", + "fa_icon": "fas fa-image", + "hidden": true + }, + "multiqc_methods_description": { + "type": "string", + "description": "Custom MultiQC yaml file containing HTML including a methods description.", + "fa_icon": "fas fa-cog" + }, "tracedir": { "type": "string", "description": "Directory to keep pipeline Nextflow logs and reports.", diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..0d62beb6 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,10 @@ +# Config file for Python. Mostly used to configure linting of bin/check_samplesheet.py with Black. +# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. +[tool.black] +line-length = 120 +target_version = ["py37", "py38", "py39", "py310"] + +[tool.isort] +profile = "black" +known_first_party = ["nf_core"] +multi_line_output = 3 diff --git a/workflows/nfcmggstructural.nf b/workflows/centerformedicalgeneticsghent-nf-cmgg-structural.nf similarity index 70% rename from workflows/nfcmggstructural.nf rename to workflows/centerformedicalgeneticsghent-nf-cmgg-structural.nf index 2d7ae055..c7ac2966 100644 --- a/workflows/nfcmggstructural.nf +++ b/workflows/centerformedicalgeneticsghent-nf-cmgg-structural.nf @@ -7,7 +7,7 @@ def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) // Validate input parameters -WorkflowNfcmggstructural.initialise(params, log) +WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.initialise(params, log) // TODO nf-core: Add all file path parameters for the pipeline to the list below // Check input path parameters to see if they exist @@ -23,8 +23,10 @@ if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input sample ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -ch_multiqc_config = file("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() +ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() +ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() +ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -46,9 +48,9 @@ include { INPUT_CHECK } from '../subworkflows/local/input_check' // // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/modules/fastqc/main' -include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -59,7 +61,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // Info required for completion email and summary def multiqc_report = [] -workflow NFCMGGSTRUCTURAL { +workflow CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { ch_versions = Channel.empty() @@ -86,18 +88,23 @@ workflow NFCMGGSTRUCTURAL { // // MODULE: MultiQC // - workflow_summary = WorkflowNfcmggstructural.paramsSummaryMultiqc(workflow, summary_params) + workflow_summary = WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.paramsSummaryMultiqc(workflow, summary_params) ch_workflow_summary = Channel.value(workflow_summary) + methods_description = WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description) + ch_methods_description = Channel.value(methods_description) + ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) - ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) MULTIQC ( - ch_multiqc_files.collect() + ch_multiqc_files.collect(), + ch_multiqc_config.collect().ifEmpty([]), + ch_multiqc_custom_config.collect().ifEmpty([]), + ch_multiqc_logo.collect().ifEmpty([]) ) multiqc_report = MULTIQC.out.report.toList() ch_versions = ch_versions.mix(MULTIQC.out.versions) @@ -114,6 +121,9 @@ workflow.onComplete { NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) } NfcoreTemplate.summary(workflow, params, log) + if (params.hook_url) { + NfcoreTemplate.adaptivecard(workflow, params, summary_params, projectDir, log) + } } /* From 3d7d169013f1edd5d8f2e0bf613c8dae2ab13251 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 26 Jan 2023 12:56:56 +0100 Subject: [PATCH 2/9] Template update for nf-core/tools version 2.7.2 --- .devcontainer/devcontainer.json | 27 +++++ .gitattributes | 1 + .github/CONTRIBUTING.md | 36 ++++-- .github/ISSUE_TEMPLATE/bug_report.yml | 40 ++++--- .github/ISSUE_TEMPLATE/config.yml | 7 -- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 8 +- .github/workflows/awsfulltest.yml | 34 ------ .github/workflows/awstest.yml | 29 ----- .github/workflows/branch.yml | 4 +- .github/workflows/ci.yml | 10 +- .github/workflows/fix-linting.yml | 8 +- .github/workflows/linting.yml | 18 +-- .github/workflows/linting_comment.yml | 2 +- .nf-core.yml | 14 +++ .prettierignore | 2 + CHANGELOG.md | 4 +- CITATION.cff | 56 --------- CITATIONS.md | 2 +- CODE_OF_CONDUCT.md | 111 ------------------ README.md | 32 ++--- assets/adaptivecard.json | 2 +- assets/email_template.html | 14 +-- assets/email_template.txt | 16 +-- assets/methods_description_template.yml | 8 +- assets/multiqc_config.yml | 9 +- ...icsghent-nf-cmgg-structural_logo_light.png | Bin 4582 -> 0 bytes assets/schema_input.json | 4 +- assets/sendmail_template.txt | 6 +- assets/slackreport.json | 34 ++++++ conf/base.config | 2 +- conf/test.config | 2 +- conf/test_full.config | 2 +- docs/README.md | 6 +- ...ticsghent-nf-cmgg-structural_logo_dark.png | Bin 134945 -> 0 bytes ...icsghent-nf-cmgg-structural_logo_light.png | Bin 134747 -> 0 bytes docs/output.md | 2 +- docs/usage.md | 32 ++--- lib/NfcoreSchema.groovy | 1 - lib/NfcoreTemplate.groovy | 46 +++++--- lib/WorkflowMain.groovy | 22 ++-- ...oovy => WorkflowNf-cmgg-structural.groovy} | 4 +- main.nf | 17 ++- modules.json | 13 +- modules/local/samplesheet_check.nf | 8 +- .../custom/dumpsoftwareversions/main.nf | 2 +- .../templates/dumpsoftwareversions.py | 99 +++++++++------- modules/nf-core/fastqc/main.nf | 40 +++---- modules/nf-core/multiqc/main.nf | 2 +- nextflow.config | 27 +++-- nextflow_schema.json | 22 ++-- template.yml | 4 + ...gg-structural.nf => nf-cmgg-structural.nf} | 17 ++- 53 files changed, 395 insertions(+), 515 deletions(-) create mode 100644 .devcontainer/devcontainer.json delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/workflows/awsfulltest.yml delete mode 100644 .github/workflows/awstest.yml delete mode 100644 CITATION.cff delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png create mode 100644 assets/slackreport.json delete mode 100644 docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png delete mode 100644 docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png rename lib/{WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy => WorkflowNf-cmgg-structural.groovy} (93%) mode change 100644 => 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py create mode 100644 template.yml rename workflows/{centerformedicalgeneticsghent-nf-cmgg-structural.nf => nf-cmgg-structural.nf} (86%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..ea27a584 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,27 @@ +{ + "name": "nfcore", + "image": "nfcore/gitpod:latest", + "remoteUser": "gitpod", + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "settings": { + "python.defaultInterpreterPath": "/opt/conda/bin/python", + "python.linting.enabled": true, + "python.linting.pylintEnabled": true, + "python.formatting.autopep8Path": "/opt/conda/bin/autopep8", + "python.formatting.yapfPath": "/opt/conda/bin/yapf", + "python.linting.flake8Path": "/opt/conda/bin/flake8", + "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", + "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", + "python.linting.pylintPath": "/opt/conda/bin/pylint" + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] + } + } +} diff --git a/.gitattributes b/.gitattributes index 050bb120..7a2dabc2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ *.config linguist-language=nextflow +*.nf.test linguist-language=nextflow modules/nf-core/** linguist-generated subworkflows/nf-core/** linguist-generated diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 0cf971b0..584f923d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,22 +1,20 @@ -# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Contributing Guidelines +# CenterForMedicalGeneticsGhent/nf-cmgg-structural: Contributing Guidelines Hi there! -Many thanks for taking an interest in improving nf-core/centerformedicalgeneticsghent-nf-cmgg-structural. +Many thanks for taking an interest in improving CenterForMedicalGeneticsGhent/nf-cmgg-structural. -We try to manage the required tasks for nf-core/centerformedicalgeneticsghent-nf-cmgg-structural using GitHub issues, you probably came to this page when creating one. +We try to manage the required tasks for CenterForMedicalGeneticsGhent/nf-cmgg-structural using GitHub issues, you probably came to this page when creating one. Please use the pre-filled template to save time. However, don't be put off by this template - other more general issues and suggestions are welcome! Contributions to the code are even more welcome ;) -> If you need help using or modifying nf-core/centerformedicalgeneticsghent-nf-cmgg-structural then the best place to ask is on the nf-core Slack [#centerformedicalgeneticsghent-nf-cmgg-structural](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural) channel ([join our Slack here](https://nf-co.re/join/slack)). - ## Contribution workflow -If you'd like to write some code for nf-core/centerformedicalgeneticsghent-nf-cmgg-structural, the standard workflow is as follows: +If you'd like to write some code for CenterForMedicalGeneticsGhent/nf-cmgg-structural, the standard workflow is as follows: -1. Check that there isn't already an issue about your idea in the [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural issues](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/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/centerformedicalgeneticsghent-nf-cmgg-structural repository](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural) to your GitHub account +1. Check that there isn't already an issue about your idea in the [CenterForMedicalGeneticsGhent/nf-cmgg-structural issues](https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural/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 [CenterForMedicalGeneticsGhent/nf-cmgg-structural repository](https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural) 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). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged @@ -52,13 +50,9 @@ These tests are run both with the latest available version of `Nextflow` and als - Fix the bug, and bump version (X.Y.Z+1). - A PR should be made on `master` from patch to directly this particular bug. -## Getting help - -For further information/help, please consult the [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural documentation](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage) and don't hesitate to get in touch on the nf-core Slack [#centerformedicalgeneticsghent-nf-cmgg-structural](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural) channel ([join our Slack here](https://nf-co.re/join/slack)). - ## Pipeline contribution conventions -To make the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. +To make the CenterForMedicalGeneticsGhent/nf-cmgg-structural code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. ### Adding a new step @@ -101,3 +95,19 @@ If you are using a new feature from core Nextflow, you may bump the minimum requ ### Images and figures For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). + +## GitHub Codespaces + +This repo includes a devcontainer configuration which will create a GitHub Codespaces for Nextflow development! This is an online developer environment that runs in your browser, complete with VSCode and a terminal. + +To get started: + +- Open the repo in [Codespaces](https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural/codespaces) +- Tools installed + - nf-core + - Nextflow + +Devcontainer specs: + +- [DevContainer config](.devcontainer/devcontainer.json) +- [Dockerfile](.devcontainer/Dockerfile) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9d2fd851..f197f3c7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,14 +2,6 @@ name: Bug report description: Report something that is broken or incorrect labels: bug body: - - type: markdown - attributes: - value: | - Before you post this issue, please check the documentation: - - - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - - [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline documentation](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage) - - type: textarea id: description attributes: @@ -17,34 +9,46 @@ body: description: A clear and concise description of what the bug is. validations: required: true - - type: textarea id: command_used attributes: label: Command used and terminal output - description: Steps to reproduce the behaviour. Please paste the command you used to launch the pipeline and the output from your terminal. + description: Steps to reproduce the behaviour. Please paste the command you used + to launch the pipeline and the output from your terminal. render: console - placeholder: | - $ nextflow run ... + placeholder: "$ nextflow run ... + Some output where something broke + " - type: textarea id: files attributes: label: Relevant files - description: | - Please drag and drop the relevant files here. Create a `.zip` archive if the extension is not allowed. - Your verbose log file `.nextflow.log` is often useful _(this is a hidden file in the directory where you launched the pipeline)_ as well as custom Nextflow configuration files. + description: "Please drag and drop the relevant files here. Create a `.zip` archive + if the extension is not allowed. + + Your verbose log file `.nextflow.log` is often useful _(this is a hidden file + in the directory where you launched the pipeline)_ as well as custom Nextflow + configuration files. + " - type: textarea id: system attributes: label: System information - description: | - * Nextflow version _(eg. 21.10.3)_ + description: "* Nextflow version _(eg. 22.10.1)_ + * Hardware _(eg. HPC, Desktop, Cloud)_ + * Executor _(eg. slurm, local, awsbatch)_ + * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter or Charliecloud)_ + * OS _(eg. CentOS Linux, macOS, Linux Mint)_ - * Version of nf-core/centerformedicalgeneticsghent-nf-cmgg-structural _(eg. 1.1, 1.5, 1.8.2)_ + + * Version of CenterForMedicalGeneticsGhent/nf-cmgg-structural _(eg. 1.1, 1.5, + 1.8.2)_ + + " diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 112b984c..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,7 +0,0 @@ -contact_links: - - name: Join nf-core - url: https://nf-co.re/join - about: Please join the nf-core community here - - name: "Slack #centerformedicalgeneticsghent-nf-cmgg-structural channel" - url: https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural - about: Discussion about the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index ca1eed17..9f3402dc 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: Feature request -description: Suggest an idea for the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline +description: Suggest an idea for the CenterForMedicalGeneticsGhent/nf-cmgg-structural pipeline labels: enhancement body: - type: textarea diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9781e254..dba331ad 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,21 +1,21 @@ ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural/tree/master/.github/CONTRIBUTING.md) - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml deleted file mode 100644 index 11dbcf25..00000000 --- a/.github/workflows/awsfulltest.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: nf-core AWS full size tests -# This workflow is triggered on published releases. -# 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: -jobs: - run-tower: - name: Run AWS full tests - if: github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' - runs-on: ubuntu-latest - steps: - - name: Launch workflow via tower - uses: nf-core/tower-action@v3 - # TODO nf-core: You can customise AWS full pipeline tests as required - # Add full size test data (but still relatively small datasets for few samples) - # on the `test_full.config` test runs with only one set of parameters - with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/centerformedicalgeneticsghent-nf-cmgg-structural/work-${{ github.sha }} - parameters: | - { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/centerformedicalgeneticsghent-nf-cmgg-structural/results-${{ github.sha }}" - } - profiles: test_full,aws_tower - - uses: actions/upload-artifact@v3 - with: - name: Tower debug log file - path: tower_action_*.log diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml deleted file mode 100644 index 3001e8f9..00000000 --- a/.github/workflows/awstest.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: nf-core AWS test -# This workflow can be triggered manually with the GitHub actions workflow dispatch button. -# It runs the -profile 'test' on AWS batch - -on: - workflow_dispatch: -jobs: - run-tower: - name: Run AWS tests - if: github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' - runs-on: ubuntu-latest - steps: - # Launch workflow using Tower CLI tool action - - name: Launch workflow via tower - uses: nf-core/tower-action@v3 - with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/centerformedicalgeneticsghent-nf-cmgg-structural/work-${{ github.sha }} - parameters: | - { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/centerformedicalgeneticsghent-nf-cmgg-structural/results-test-${{ github.sha }}" - } - profiles: test,aws_tower - - uses: actions/upload-artifact@v3 - with: - name: Tower debug log file - path: tower_action_*.log diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index dbce813a..6d315a42 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -11,9 +11,9 @@ jobs: steps: # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs - if: github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' + if: github.repository == 'CenterForMedicalGeneticsGhent/nf-cmgg-structural' run: | - { [[ ${{github.event.pull_request.head.repo.full_name }} == nf-core/centerformedicalgeneticsghent-nf-cmgg-structural ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == CenterForMedicalGeneticsGhent/nf-cmgg-structural ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c41d0b7..f8daa8c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,20 +11,24 @@ on: env: NXF_ANSI_LOG: false +concurrency: + group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" + cancel-in-progress: true + jobs: test: name: Run pipeline with test data # 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/centerformedicalgeneticsghent-nf-cmgg-structural') }}" + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'CenterForMedicalGeneticsGhent/nf-cmgg-structural') }}" runs-on: ubuntu-latest strategy: matrix: NXF_VER: - - "21.10.3" + - "22.10.1" - "latest-everything" steps: - name: Check out pipeline code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Nextflow uses: nf-core/setup-nextflow@v1 diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index 62b771c6..38ec6134 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -9,7 +9,7 @@ jobs: if: > contains(github.event.comment.html_url, '/pull/') && contains(github.event.comment.body, '@nf-core-bot fix linting') && - github.repository == 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' + github.repository == 'CenterForMedicalGeneticsGhent/nf-cmgg-structural' runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later @@ -24,7 +24,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v3 - name: Install Prettier run: npm install -g prettier @prettier/plugin-php @@ -34,9 +34,9 @@ jobs: id: prettier_status run: | if prettier --check ${GITHUB_WORKSPACE}; then - echo "::set-output name=result::pass" + echo "result=pass" >> $GITHUB_OUTPUT else - echo "::set-output name=result::fail" + echo "result=fail" >> $GITHUB_OUTPUT fi - name: Run 'prettier --write' diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 8a5ce69b..858d622e 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -4,6 +4,8 @@ name: nf-core linting # that the code meets the nf-core guidelines. on: push: + branches: + - dev pull_request: release: types: [published] @@ -12,9 +14,9 @@ jobs: EditorConfig: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v3 - name: Install editorconfig-checker run: npm install -g editorconfig-checker @@ -25,9 +27,9 @@ jobs: Prettier: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v3 - name: Install Prettier run: npm install -g prettier @@ -38,7 +40,7 @@ jobs: PythonBlack: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Check code lints with Black uses: psf/black@stable @@ -69,12 +71,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Nextflow uses: nf-core/setup-nextflow@v1 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 with: python-version: "3.7" architecture: "x64" @@ -97,7 +99,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 04758f61..0bbcd30f 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -18,7 +18,7 @@ jobs: - name: Get PR number id: pr_number - run: echo "::set-output name=pr_number::$(cat linting-logs/PR_number.txt)" + run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT - name: Post PR comment uses: marocchino/sticky-pull-request-comment@v2 diff --git a/.nf-core.yml b/.nf-core.yml index 3805dc81..7aa3fe28 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1 +1,15 @@ repository_type: pipeline +lint: + files_exist: + - CODE_OF_CONDUCT.md + - assets/nf-core-nf-cmgg-structural_logo_light.png + - docs/images/nf-core-nf-cmgg-structural_logo_light.png + - docs/images/nf-core-nf-cmgg-structural_logo_dark.png + - .github/ISSUE_TEMPLATE/config.yml + - .github/workflows/awstest.yml + - .github/workflows/awsfulltest.yml + nextflow_config: + - manifest.name + - manifest.homePage + multiqc_config: + - report_comment diff --git a/.prettierignore b/.prettierignore index eb74a574..437d763d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ email_template.html adaptivecard.json +slackreport.json .nextflow* work/ data/ @@ -8,3 +9,4 @@ results/ testing/ testing* *.pyc +bin/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 033b6d49..d53a384f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ -# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Changelog +# CenterForMedicalGeneticsGhent/nf-cmgg-structural: Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## v1.0dev - [date] -Initial release of nf-core/centerformedicalgeneticsghent-nf-cmgg-structural, created with the [nf-core](https://nf-co.re/) template. +Initial release of CenterForMedicalGeneticsGhent/nf-cmgg-structural, created with the [nf-core](https://nf-co.re/) template. ### `Added` diff --git a/CITATION.cff b/CITATION.cff deleted file mode 100644 index 017666c0..00000000 --- a/CITATION.cff +++ /dev/null @@ -1,56 +0,0 @@ -cff-version: 1.2.0 -message: "If you use `nf-core tools` in your work, please cite the `nf-core` publication" -authors: - - family-names: Ewels - given-names: Philip - - family-names: Peltzer - given-names: Alexander - - family-names: Fillinger - given-names: Sven - - family-names: Patel - given-names: Harshil - - family-names: Alneberg - given-names: Johannes - - family-names: Wilm - given-names: Andreas - - family-names: Garcia - given-names: Maxime Ulysse - - family-names: Di Tommaso - given-names: Paolo - - family-names: Nahnsen - given-names: Sven -title: "The nf-core framework for community-curated bioinformatics pipelines." -version: 2.4.1 -doi: 10.1038/s41587-020-0439-x -date-released: 2022-05-16 -url: https://github.com/nf-core/tools -prefered-citation: - type: article - authors: - - family-names: Ewels - given-names: Philip - - family-names: Peltzer - given-names: Alexander - - family-names: Fillinger - given-names: Sven - - family-names: Patel - given-names: Harshil - - family-names: Alneberg - given-names: Johannes - - family-names: Wilm - given-names: Andreas - - family-names: Garcia - given-names: Maxime Ulysse - - family-names: Di Tommaso - given-names: Paolo - - family-names: Nahnsen - given-names: Sven - doi: 10.1038/s41587-020-0439-x - journal: nature biotechnology - start: 276 - end: 278 - title: "The nf-core framework for community-curated bioinformatics pipelines." - issue: 3 - volume: 38 - year: 2020 - url: https://dx.doi.org/10.1038/s41587-020-0439-x diff --git a/CITATIONS.md b/CITATIONS.md index 42129bc3..0c9ebdf2 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,4 +1,4 @@ -# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Citations +# CenterForMedicalGeneticsGhent/nf-cmgg-structural: Citations ## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index f4fd052f..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,111 +0,0 @@ -# Code of Conduct at nf-core (v1.0) - -## Our Pledge - -In the interest of fostering an open, collaborative, and welcoming environment, we as contributors and maintainers of nf-core, pledge to making participation in our projects and community a harassment-free experience for everyone, regardless of: - -- Age -- Body size -- Familial status -- Gender identity and expression -- Geographical location -- Level of experience -- Nationality and national origins -- Native language -- Physical and neurological ability -- Race or ethnicity -- Religion -- Sexual identity and orientation -- Socioeconomic status - -Please note that the list above is alphabetised and is therefore not ranked in any order of preference or importance. - -## Preamble - -> Note: This Code of Conduct (CoC) has been drafted by the nf-core Safety Officer and been edited after input from members of the nf-core team and others. "We", in this document, refers to the Safety Officer and members of the nf-core core team, both of whom are deemed to be members of the nf-core community and are therefore required to abide by this Code of Conduct. This document will amended periodically to keep it up-to-date, and in case of any dispute, the most current version will apply. - -An up-to-date list of members of the nf-core core team can be found [here](https://nf-co.re/about). Our current safety officer is Renuka Kudva. - -nf-core is a young and growing community that welcomes contributions from anyone with a shared vision for [Open Science Policies](https://www.fosteropenscience.eu/taxonomy/term/8). Open science policies encompass inclusive behaviours and we strive to build and maintain a safe and inclusive environment for all individuals. - -We have therefore adopted this code of conduct (CoC), which we require all members of our community and attendees in nf-core events to adhere to in all our workspaces at all times. Workspaces include but are not limited to Slack, meetings on Zoom, Jitsi, YouTube live etc. - -Our CoC will be strictly enforced and the nf-core team reserve the right to exclude participants who do not comply with our guidelines from our workspaces and future nf-core activities. - -We ask all members of our community to help maintain a supportive and productive workspace and to avoid behaviours that can make individuals feel unsafe or unwelcome. Please help us maintain and uphold this CoC. - -Questions, concerns or ideas on what we can include? Contact safety [at] nf-co [dot] re - -## Our Responsibilities - -The safety officer is responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behaviour. - -The safety officer in consultation with the nf-core core team have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -Members of the core team or the safety officer who violate the CoC will be required to recuse themselves pending investigation. They will not have access to any reports of the violations and be subject to the same actions as others in violation of the CoC. - -## When are where does this Code of Conduct apply? - -Participation in the nf-core community is contingent on following these guidelines in all our workspaces and events. This includes but is not limited to the following listed alphabetically and therefore in no order of preference: - -- Communicating with an official project email address. -- Communicating with community members within the nf-core Slack channel. -- Participating in hackathons organised by nf-core (both online and in-person events). -- Participating in collaborative work on GitHub, Google Suite, community calls, mentorship meetings, email correspondence. -- Participating in workshops, training, and seminar series organised by nf-core (both online and in-person events). This applies to events hosted on web-based platforms such as Zoom, Jitsi, YouTube live etc. -- Representing nf-core on social media. This includes both official and personal accounts. - -## nf-core cares šŸ˜Š - -nf-core's CoC and expectations of respectful behaviours for all participants (including organisers and the nf-core team) include but are not limited to the following (listed in alphabetical order): - -- Ask for consent before sharing another community memberā€™s personal information (including photographs) on social media. -- Be respectful of differing viewpoints and experiences. We are all here to learn from one another and a difference in opinion can present a good learning opportunity. -- Celebrate your accomplishments at events! (Get creative with your use of emojis šŸŽ‰ šŸ„³ šŸ’Æ šŸ™Œ !) -- Demonstrate empathy towards other community members. (We donā€™t all have the same amount of time to dedicate to nf-core. If tasks are pending, donā€™t hesitate to gently remind members of your team. If you are leading a task, ask for help if you feel overwhelmed.) -- Engage with and enquire after others. (This is especially important given the geographically remote nature of the nf-core community, so letā€™s do this the best we can) -- Focus on what is best for the team and the community. (When in doubt, ask) -- Graciously accept constructive criticism, yet be unafraid to question, deliberate, and learn. -- Introduce yourself to members of the community. (Weā€™ve all been outsiders and we know that talking to strangers can be hard for some, but remember weā€™re interested in getting to know you and your visions for open science!) -- Show appreciation and **provide clear feedback**. (This is especially important because we donā€™t see each other in person and it can be harder to interpret subtleties. Also remember that not everyone understands a certain language to the same extent as you do, so **be clear in your communications to be kind.**) -- Take breaks when you feel like you need them. -- Using welcoming and inclusive language. (Participants are encouraged to display their chosen pronouns on Zoom or in communication on Slack.) - -## nf-core frowns on šŸ˜• - -The following behaviours from any participants within the nf-core community (including the organisers) will be considered unacceptable under this code of conduct. Engaging or advocating for any of the following could result in expulsion from nf-core workspaces. - -- Deliberate intimidation, stalking or following and sustained disruption of communication among participants of the community. This includes hijacking shared screens through actions such as using the annotate tool in conferencing software such as Zoom. -- ā€œDoxingā€ i.e. posting (or threatening to post) another personā€™s personal identifying information online. -- Spamming or trolling of individuals on social media. -- Use of sexual or discriminatory imagery, comments, or jokes and unwelcome sexual attention. -- Verbal and text comments that reinforce social structures of domination related to gender, gender identity and expression, sexual orientation, ability, physical appearance, body size, race, age, religion or work experience. - -### Online Trolling - -The majority of nf-core interactions and events are held online. Unfortunately, holding events online comes with the added issue of online trolling. This is unacceptable, reports of such behaviour will be taken very seriously, and perpetrators will be excluded from activities immediately. - -All community members are required to ask members of the group they are working within for explicit consent prior to taking screenshots of individuals during video calls. - -## Procedures for Reporting CoC violations - -If someone makes you feel uncomfortable through their behaviours or actions, report it as soon as possible. - -You can reach out to members of the [nf-core core team](https://nf-co.re/about) and they will forward your concerns to the safety officer(s). - -Issues directly concerning members of the core team will be dealt with by other members of the core team and the safety manager, and possible conflicts of interest will be taken into account. nf-core is also in discussions about having an ombudsperson, and details will be shared in due course. - -All reports will be handled with utmost discretion and confidentially. - -## Attribution and Acknowledgements - -- The [Contributor Covenant, version 1.4](http://contributor-covenant.org/version/1/4) -- The [OpenCon 2017 Code of Conduct](http://www.opencon2017.org/code_of_conduct) (CC BY 4.0 OpenCon organisers, SPARC and Right to Research Coalition) -- The [eLife innovation sprint 2020 Code of Conduct](https://sprint.elifesciences.org/code-of-conduct/) -- The [Mozilla Community Participation Guidelines v3.1](https://www.mozilla.org/en-US/about/governance/policies/participation/) (version 3.1, CC BY-SA 3.0 Mozilla) - -## Changelog - -### v1.0 - March 12th, 2021 - -- Complete rewrite from original [Contributor Covenant](http://contributor-covenant.org/) CoC. diff --git a/README.md b/README.md index 659623ad..acb56934 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,22 @@ -# ![nf-core/centerformedicalgeneticsghent-nf-cmgg-structural](docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png#gh-light-mode-only) ![nf-core/centerformedicalgeneticsghent-nf-cmgg-structural](docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png#gh-dark-mode-only) +[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) -[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) - -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.10.3-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A522.10.1-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/) -[![Launch on Nextflow Tower](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Nextflow%20Tower-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural) - -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23centerformedicalgeneticsghent-nf-cmgg-structural-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +[![Launch on Nextflow Tower](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Nextflow%20Tower-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural) ## Introduction -**nf-core/centerformedicalgeneticsghent-nf-cmgg-structural** is a bioinformatics best-practice analysis pipeline for A pipeline to call structural variants. +**CenterForMedicalGeneticsGhent/nf-cmgg-structural** is a bioinformatics best-practice analysis pipeline for A nextflow pipeline for calling structural variants. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/results). +On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. ## Pipeline summary @@ -31,14 +27,14 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Quick Start -1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.10.3`) +1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=22.10.1`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) (you can follow [this tutorial](https://singularity-tutorial.github.io/01-installation/)), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(you can use [`Conda`](https://conda.io/miniconda.html) both to install Nextflow itself and also to manage software within pipelines. Please only use it within pipelines as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_. 3. Download the pipeline and test it on a minimal dataset with a single command: ```bash - nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -profile test,YOURPROFILE --outdir + nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural -profile test,YOURPROFILE --outdir ``` Note that some form of configuration will be needed so that Nextflow knows how to fetch the required software. This is usually done in the form of a config profile (`YOURPROFILE` in the example command above). You can chain multiple config profiles in a comma-separated string. @@ -53,16 +49,12 @@ On release, automated continuous integration tests run the pipeline on a full-si ```bash - nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile + nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile ``` -## Documentation - -The nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline comes with documentation about the pipeline [usage](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage), [parameters](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/parameters) and [output](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/output). - ## Credits -nf-core/centerformedicalgeneticsghent-nf-cmgg-structural was originally written by nvnieuwk. +CenterForMedicalGeneticsGhent/nf-cmgg-structural was originally written by nvnieuwk. We thank the following people for their extensive assistance in the development of this pipeline: @@ -72,18 +64,16 @@ We thank the following people for their extensive assistance in the development If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). -For further information or help, don't hesitate to get in touch on the [Slack `#centerformedicalgeneticsghent-nf-cmgg-structural` channel](https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural) (you can join with [this invite](https://nf-co.re/join/slack)). - ## Citations - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. -You can cite the `nf-core` publication as follows: +This pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/master/LICENSE). > **The nf-core framework for community-curated bioinformatics pipelines.** > diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json index 24f89ac9..5c253106 100644 --- a/assets/adaptivecard.json +++ b/assets/adaptivecard.json @@ -17,7 +17,7 @@ "size": "Large", "weight": "Bolder", "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", - "text": "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${version} - ${runName}", + "text": "CenterForMedicalGeneticsGhent/nf-cmgg-structural v${version} - ${runName}", "wrap": true }, { diff --git a/assets/email_template.html b/assets/email_template.html index a035790a..49712551 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -4,21 +4,21 @@ - - nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Pipeline Report + + CenterForMedicalGeneticsGhent/nf-cmgg-structural Pipeline Report
    -

    nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${version}

    +

    CenterForMedicalGeneticsGhent/nf-cmgg-structural v${version}

    Run Name: $runName

    <% if (!success){ out << """
    -

    nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed unsuccessfully!

    +

    CenterForMedicalGeneticsGhent/nf-cmgg-structural execution completed unsuccessfully!

    The exit status of the task that caused the workflow execution to fail was: $exitStatus.

    The full error message was:

    ${errorReport}
    @@ -27,7 +27,7 @@

    nf-core/centerformedicalgeneticsghent- } else { out << """
    - nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed successfully! + CenterForMedicalGeneticsGhent/nf-cmgg-structural execution completed successfully!
    """ } @@ -44,8 +44,8 @@

    Pipeline Configuration:

    -

    nf-core/centerformedicalgeneticsghent-nf-cmgg-structural

    -

    https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural

    +

    CenterForMedicalGeneticsGhent/nf-cmgg-structural

    +

    https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural

    diff --git a/assets/email_template.txt b/assets/email_template.txt index e26c2a98..cb2fc2ed 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -1,18 +1,10 @@ ----------------------------------------------------- - ,--./,-. - ___ __ __ __ ___ /,-._.--~\\ - |\\ | |__ __ / ` / \\ |__) |__ } { - | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-, - `._,._,' - nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${version} ----------------------------------------------------- Run Name: $runName <% if (success){ - out << "## nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed successfully! ##" + out << "## CenterForMedicalGeneticsGhent/nf-cmgg-structural execution completed successfully! ##" } else { out << """#################################################### -## nf-core/centerformedicalgeneticsghent-nf-cmgg-structural execution completed unsuccessfully! ## +## CenterForMedicalGeneticsGhent/nf-cmgg-structural execution completed unsuccessfully! ## #################################################### The exit status of the task that caused the workflow execution to fail was: $exitStatus. The full error message was: @@ -35,5 +27,5 @@ Pipeline Configuration: <% out << summary.collect{ k,v -> " - $k: $v" }.join("\n") %> -- -nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural +CenterForMedicalGeneticsGhent/nf-cmgg-structural +https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index 2455bf46..13f336ac 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -1,13 +1,13 @@ -id: "nf-core-centerformedicalgeneticsghent-nf-cmgg-structural-methods-description" +id: "CenterForMedicalGeneticsGhent-nf-cmgg-structural-methods-description" description: "Suggested text and references to use when describing pipeline usage within the methods section of a publication." -section_name: "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Methods Description" -section_href: "https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural" +section_name: "CenterForMedicalGeneticsGhent/nf-cmgg-structural Methods Description" +section_href: "https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural" plot_type: "html" ## TODO nf-core: Update the HTML below to your prefered methods description, e.g. add publication citation for this pipeline ## You inject any metadata in the Nextflow '${workflow}' object data: |

    Methods

    -

    Data was processed using nf-core/centerformedicalgeneticsghent-nf-cmgg-structural v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020).

    +

    Data was processed using CenterForMedicalGeneticsGhent/nf-cmgg-structural v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020).

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

    ${workflow.commandLine}

    References

    diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index b5e492b6..a576aae7 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,13 +1,12 @@ report_comment: > - This report has been generated by the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the CenterForMedicalGeneticsGhent/nf-cmgg-structural + analysis pipeline. report_section_order: - "nf-core-centerformedicalgeneticsghent-nf-cmgg-structural-methods-description": + "CenterForMedicalGeneticsGhent-nf-cmgg-structural-methods-description": order: -1000 software_versions: order: -1001 - "nf-core-centerformedicalgeneticsghent-nf-cmgg-structural-summary": + "CenterForMedicalGeneticsGhent-nf-cmgg-structural-summary": order: -1002 export_plots: true diff --git a/assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png b/assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png deleted file mode 100644 index acbf5370e434c98d3204abd17e4be972baa9fc98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4582 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 -Content-Disposition: inline; filename="nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png" +Content-Disposition: inline; filename="CenterForMedicalGeneticsGhent-nf-cmgg-structural_logo_light.png" -<% out << new File("$projectDir/assets/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_light.png"). +<% out << new File("$projectDir/assets/CenterForMedicalGeneticsGhent-nf-cmgg-structural_logo_light.png"). bytes. encodeBase64(). toString(). diff --git a/assets/slackreport.json b/assets/slackreport.json new file mode 100644 index 00000000..043d02f2 --- /dev/null +++ b/assets/slackreport.json @@ -0,0 +1,34 @@ +{ + "attachments": [ + { + "fallback": "Plain-text summary of the attachment.", + "color": "<% if (success) { %>good<% } else { %>danger<%} %>", + "author_name": "sanger-tol/readmapping v${version} - ${runName}", + "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", + "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", + "fields": [ + { + "title": "Command used to launch the workflow", + "value": "```${commandLine}```", + "short": false + } + <% + if (!success) { %> + , + { + "title": "Full error message", + "value": "```${errorReport}```", + "short": false + }, + { + "title": "Pipeline configuration", + "value": "<% out << summary.collect{ k,v -> k == "hook_url" ? "_${k}_: (_hidden_)" : ( ( v.class.toString().contains('Path') || ( v.class.toString().contains('String') && v.contains('/') ) ) ? "_${k}_: `${v}`" : (v.class.toString().contains('DateTime') ? ("_${k}_: " + v.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM))) : "_${k}_: ${v}") ) }.join(",\n") %>", + "short": false + } + <% } + %> + ], + "footer": "Completed at <% out << dateComplete.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM)) %> (duration: ${duration})" + } + ] +} diff --git a/conf/base.config b/conf/base.config index 97791759..9416c1b2 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Nextflow base config file + CenterForMedicalGeneticsGhent/nf-cmgg-structural Nextflow base config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 'blank slate' config file, appropriate for general use on most high performance compute environments. Assumes that all software is installed and available on diff --git a/conf/test.config b/conf/test.config index 9119d300..4b96ec4c 100644 --- a/conf/test.config +++ b/conf/test.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a fast and simple pipeline test. Use as follows: - nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -profile test, --outdir + nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural -profile test, --outdir ---------------------------------------------------------------------------------------- */ diff --git a/conf/test_full.config b/conf/test_full.config index 9e8fd627..cfb7c7f4 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a full size pipeline test. Use as follows: - nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural -profile test_full, --outdir + nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural -profile test_full, --outdir ---------------------------------------------------------------------------------------- */ diff --git a/docs/README.md b/docs/README.md index 3373d420..3f68be59 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,8 @@ -# nf-core/centerformedicalgeneticsghent-nf-cmgg-structural: Documentation +# CenterForMedicalGeneticsGhent/nf-cmgg-structural: Documentation -The nf-core/centerformedicalgeneticsghent-nf-cmgg-structural documentation is split into the following pages: +The CenterForMedicalGeneticsGhent/nf-cmgg-structural documentation is split into the following pages: - [Usage](usage.md) - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. - [Output](output.md) - An overview of the different results produced by the pipeline and how to interpret them. - -You can find a lot more documentation about installing, configuring and running nf-core pipelines on the website: [https://nf-co.re](https://nf-co.re) diff --git a/docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png b/docs/images/nf-core-centerformedicalgeneticsghent-nf-cmgg-structural_logo_dark.png deleted file mode 100644 index baa0e5b1861dcd4cdcb0f2ba1d34c5e3185c28c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134945 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 z 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%0AI1JUoj}B_%l@`r%ps1RbW=4=AMulFNBB5aL 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 _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ @@ -57,7 +55,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/centerformedicalgeneticsghent-nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile docker +nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -76,16 +74,16 @@ work # Directory containing the nextflow working files When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: ```bash -nextflow pull nf-core/centerformedicalgeneticsghent-nf-cmgg-structural +nextflow pull CenterForMedicalGeneticsGhent/nf-cmgg-structural ``` ### Reproducibility It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. -First, go to the [nf-core/centerformedicalgeneticsghent-nf-cmgg-structural releases page](https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/releases) and find the latest version number - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. +First, go to the [CenterForMedicalGeneticsGhent/nf-cmgg-structural releases page](https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. -This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. +This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. ## Core Nextflow arguments @@ -95,7 +93,7 @@ This version number will be logged in reports when you run the pipeline, so that Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. When using Biocontainers, most of these software packaging methods pull Docker containers from quay.io e.g [FastQC](https://quay.io/repository/biocontainers/fastqc) except for Singularity which directly downloads Singularity images via https hosted by the [Galaxy project](https://depot.galaxyproject.org/singularity/) and Conda which downloads and installs software locally from [Bioconda](https://bioconda.github.io/). +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. @@ -104,8 +102,11 @@ The pipeline also dynamically loads configurations from [https://github.com/nf-c Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +- `test` + - A profile with a complete configuration for automated testing + - Includes links to test data so needs no other parameters - `docker` - A generic configuration profile to be used with [Docker](https://docker.com/) - `singularity` @@ -118,9 +119,6 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - `conda` - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. -- `test` - - A profile with a complete configuration for automated testing - - Includes links to test data so needs no other parameters ### `-resume` @@ -169,8 +167,14 @@ Work dir: Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` ``` +#### For beginners + +A first step to bypass this error, you could try to increase the amount of CPUs, memory, and time for the whole pipeline. Therefor you can try to increase the resource for the parameters `--max_cpus`, `--max_memory`, and `--max_time`. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of rnaseq](https://nf-co.re/rnaseq/3.9/parameters) and scroll down to the `show hidden parameter` button to get the default value for `--max_memory`. In this case 128GB, you than can try to run your pipeline again with `--max_memory 200GB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. + +#### Advanced option on process level + To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). -We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/software/star/align/main.nf`. +We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/star/align/main.nf`. If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. @@ -189,7 +193,7 @@ process { > > If you get a warning suggesting that the process selector isn't recognised check that the process name has been specified correctly. -### Updating containers +### Updating containers (advanced users) The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index b3d092f8..33cd4f6e 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -46,7 +46,6 @@ class NfcoreSchema { 'quiet', 'syslog', 'v', - 'version', // Options for `nextflow run` command 'ansi', diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 27feb009..2023f451 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -32,6 +32,25 @@ class NfcoreTemplate { } } + // + // Generate version string + // + public static String version(workflow) { + String version_string = "" + + if (workflow.manifest.version) { + def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' + version_string += "${prefix_v}${workflow.manifest.version}" + } + + if (workflow.commitId) { + def git_shortsha = workflow.commitId.substring(0, 7) + version_string += "-g${git_shortsha}" + } + + return version_string + } + // // Construct and send completion email // @@ -61,7 +80,7 @@ class NfcoreTemplate { misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] - email_fields['version'] = workflow.manifest.version + email_fields['version'] = NfcoreTemplate.version(workflow) email_fields['runName'] = workflow.runName email_fields['success'] = workflow.success email_fields['dateComplete'] = workflow.complete @@ -146,10 +165,10 @@ class NfcoreTemplate { } // - // Construct and send adaptive card - // https://adaptivecards.io + // Construct and send a notification to a web server as JSON + // e.g. Microsoft Teams and Slack // - public static void adaptivecard(workflow, params, summary_params, projectDir, log) { + public static void IM_notification(workflow, params, summary_params, projectDir, log) { def hook_url = params.hook_url def summary = [:] @@ -170,7 +189,7 @@ class NfcoreTemplate { misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] - msg_fields['version'] = workflow.manifest.version + msg_fields['version'] = NfcoreTemplate.version(workflow) msg_fields['runName'] = workflow.runName msg_fields['success'] = workflow.success msg_fields['dateComplete'] = workflow.complete @@ -178,13 +197,16 @@ class NfcoreTemplate { msg_fields['exitStatus'] = workflow.exitStatus msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine + msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") msg_fields['projectDir'] = workflow.projectDir msg_fields['summary'] = summary << misc_fields // Render the JSON template def engine = new groovy.text.GStringTemplateEngine() - def hf = new File("$projectDir/assets/adaptivecard.json") + // Different JSON depending on the service provider + // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format + def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" + def hf = new File("$projectDir/assets/${json_path}") def json_template = engine.createTemplate(hf).make(msg_fields) def json_message = json_template.toString() @@ -209,7 +231,7 @@ class NfcoreTemplate { 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.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + 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}-" @@ -297,15 +319,11 @@ class NfcoreTemplate { // public static String logo(workflow, monochrome_logs) { Map colors = logColours(monochrome_logs) + String workflow_version = NfcoreTemplate.version(workflow) String.format( """\n ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} + ${colors.purple} ${workflow.manifest.name} ${workflow_version}${colors.reset} ${dashedLine(monochrome_logs)} """.stripIndent() ) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 4759bc89..2b52a762 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -1,5 +1,5 @@ // -// This file holds several functions specific to the main.nf workflow in the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline +// This file holds several functions specific to the main.nf workflow in the CenterForMedicalGeneticsGhent/nf-cmgg-structural pipeline // class WorkflowMain { @@ -19,7 +19,7 @@ class WorkflowMain { } // - // Print help to screen if required + // Generate help string // public static String help(workflow, params, log) { def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" @@ -32,7 +32,7 @@ class WorkflowMain { } // - // Print parameter summary log to screen + // Generate parameter summary log string // public static String paramsSummaryLog(workflow, params, log) { def summary_log = '' @@ -53,20 +53,26 @@ class WorkflowMain { System.exit(0) } - // Validate workflow parameters via the JSON schema - if (params.validate_params) { - NfcoreSchema.validateParameters(workflow, params, log) + // Print workflow version and exit on --version + if (params.version) { + String workflow_version = NfcoreTemplate.version(workflow) + log.info "${workflow.manifest.name} ${workflow_version}" + System.exit(0) } // Print parameter summary log to screen - log.info paramsSummaryLog(workflow, params, log) + // Validate workflow parameters via the JSON schema + if (params.validate_params) { + NfcoreSchema.validateParameters(workflow, params, log) + } + // Check that a -profile or Nextflow config has been provided to run the pipeline NfcoreTemplate.checkConfigProvided(workflow, log) // Check that conda channels are set-up correctly - if (params.enable_conda) { + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { Utils.checkCondaChannels(log) } diff --git a/lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy b/lib/WorkflowNf-cmgg-structural.groovy similarity index 93% rename from lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy rename to lib/WorkflowNf-cmgg-structural.groovy index fb59d54e..3ebd131e 100755 --- a/lib/WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.groovy +++ b/lib/WorkflowNf-cmgg-structural.groovy @@ -1,10 +1,10 @@ // -// This file holds several functions specific to the workflow/centerformedicalgeneticsghent-nf-cmgg-structural.nf in the nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline +// This file holds several functions specific to the workflow/nf-cmgg-structural.nf in the CenterForMedicalGeneticsGhent/nf-cmgg-structural pipeline // import groovy.text.SimpleTemplateEngine -class WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural { +class WorkflowNf-cmgg-structural { // // Check and validate parameters diff --git a/main.nf b/main.nf index eea9b9c5..25785bf4 100644 --- a/main.nf +++ b/main.nf @@ -1,12 +1,9 @@ #!/usr/bin/env nextflow /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - nf-core/centerformedicalgeneticsghent-nf-cmgg-structural + CenterForMedicalGeneticsGhent/nf-cmgg-structural ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Github : https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural - - Website: https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural - Slack : https://nfcore.slack.com/channels/centerformedicalgeneticsghent-nf-cmgg-structural + Github : https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural ---------------------------------------------------------------------------------------- */ @@ -34,13 +31,13 @@ WorkflowMain.initialise(workflow, params, log) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL } from './workflows/centerformedicalgeneticsghent-nf-cmgg-structural' +include { NF-CMGG-STRUCTURAL } from './workflows/nf-cmgg-structural' // -// WORKFLOW: Run main nf-core/centerformedicalgeneticsghent-nf-cmgg-structural analysis pipeline +// WORKFLOW: Run main CenterForMedicalGeneticsGhent/nf-cmgg-structural analysis pipeline // -workflow NFCORE_CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { - CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL () +workflow CENTERFORMEDICALGENETICSGHENT_NF-CMGG-STRUCTURAL { + NF-CMGG-STRUCTURAL () } /* @@ -54,7 +51,7 @@ workflow NFCORE_CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { // See: https://github.com/nf-core/rnaseq/issues/619 // workflow { - NFCORE_CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL () + CENTERFORMEDICALGENETICSGHENT_NF-CMGG-STRUCTURAL () } /* diff --git a/modules.json b/modules.json index 8302c62f..7671e0d1 100644 --- a/modules.json +++ b/modules.json @@ -1,21 +1,24 @@ { - "name": "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural", - "homePage": "https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural", + "name": "CenterForMedicalGeneticsGhent/nf-cmgg-structural", + "homePage": "https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural", "repos": { "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] } } } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index a8aa9bdb..b481270e 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -1,7 +1,8 @@ process SAMPLESHEET_CHECK { tag "$samplesheet" + label 'process_single' - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + conda "conda-forge::python=3.8.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.8.3' : 'quay.io/biocontainers/python:3.8.3' }" @@ -13,7 +14,10 @@ process SAMPLESHEET_CHECK { path '*.csv' , emit: csv path "versions.yml", emit: versions - script: // This script is bundled with the pipeline, in nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/bin/ + when: + task.ext.when == null || task.ext.when + + script: // This script is bundled with the pipeline, in CenterForMedicalGeneticsGhent/nf-cmgg-structural/bin/ """ check_samplesheet.py \\ $samplesheet \\ diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index cebb6e05..3df21765 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,7 +2,7 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) + conda "bioconda::multiqc=1.13" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py old mode 100644 new mode 100755 index 787bdb7b..e55b8d43 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -1,5 +1,9 @@ #!/usr/bin/env python + +"""Provide functions to merge multiple versions.yml files.""" + + import platform from textwrap import dedent @@ -7,6 +11,7 @@ def _make_versions_html(versions): + """Generate a tabular HTML output of all versions for MultiQC.""" html = [ dedent( """\\ @@ -45,47 +50,53 @@ def _make_versions_html(versions): return "\\n".join(html) -versions_this_module = {} -versions_this_module["${task.process}"] = { - "python": platform.python_version(), - "yaml": yaml.__version__, -} - -with open("$versions") as f: - versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module - -# aggregate versions by the module name (derived from fully-qualified process name) -versions_by_module = {} -for process, process_versions in versions_by_process.items(): - module = process.split(":")[-1] - try: - if versions_by_module[module] != process_versions: - raise AssertionError( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) - except KeyError: - versions_by_module[module] = process_versions - -versions_by_module["Workflow"] = { - "Nextflow": "$workflow.nextflow.version", - "$workflow.manifest.name": "$workflow.manifest.version", -} - -versions_mqc = { - "id": "software_versions", - "section_name": "${workflow.manifest.name} Software Versions", - "section_href": "https://github.com/${workflow.manifest.name}", - "plot_type": "html", - "description": "are collected at run time from the software output.", - "data": _make_versions_html(versions_by_module), -} - -with open("software_versions.yml", "w") as f: - yaml.dump(versions_by_module, f, default_flow_style=False) -with open("software_versions_mqc.yml", "w") as f: - yaml.dump(versions_mqc, f, default_flow_style=False) - -with open("versions.yml", "w") as f: - yaml.dump(versions_this_module, f, default_flow_style=False) +def main(): + """Load all version files and generate merged output.""" + versions_this_module = {} + versions_this_module["${task.process}"] = { + "python": platform.python_version(), + "yaml": yaml.__version__, + } + + with open("$versions") as f: + versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module + + # aggregate versions by the module name (derived from fully-qualified process name) + versions_by_module = {} + for process, process_versions in versions_by_process.items(): + module = process.split(":")[-1] + try: + if versions_by_module[module] != process_versions: + raise AssertionError( + "We assume that software versions are the same between all modules. " + "If you see this error-message it means you discovered an edge-case " + "and should open an issue in nf-core/tools. " + ) + except KeyError: + versions_by_module[module] = process_versions + + versions_by_module["Workflow"] = { + "Nextflow": "$workflow.nextflow.version", + "$workflow.manifest.name": "$workflow.manifest.version", + } + + versions_mqc = { + "id": "software_versions", + "section_name": "${workflow.manifest.name} Software Versions", + "section_href": "https://github.com/${workflow.manifest.name}", + "plot_type": "html", + "description": "are collected at run time from the software output.", + "data": _make_versions_html(versions_by_module), + } + + with open("software_versions.yml", "w") as f: + yaml.dump(versions_by_module, f, default_flow_style=False) + with open("software_versions_mqc.yml", "w") as f: + yaml.dump(versions_mqc, f, default_flow_style=False) + + with open("versions.yml", "w") as f: + yaml.dump(versions_this_module, f, default_flow_style=False) + + +if __name__ == "__main__": + main() diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 05730368..9ae58381 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -2,7 +2,7 @@ process FASTQC { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) + conda "bioconda::fastqc=0.11.9" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' : 'quay.io/biocontainers/fastqc:0.11.9--0' }" @@ -20,30 +20,22 @@ process FASTQC { script: def args = task.ext.args ?: '' - // Add soft-links to original FastQs for consistent naming in pipeline def prefix = task.ext.prefix ?: "${meta.id}" - if (meta.single_end) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz - fastqc $args --threads $task.cpus ${prefix}.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) - END_VERSIONS - """ - } else { - """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz - fastqc $args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) - END_VERSIONS - """ - } + // Make list of old name and new name pairs to use for renaming in the bash while loop + def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } + def rename_to = old_new_pairs*.join(' ').join(' ') + def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + """ + printf "%s %s\\n" $rename_to | while read old_name new_name; do + [ -f "\${new_name}" ] || ln -s \$old_name \$new_name + done + fastqc $args --threads $task.cpus $renamed_files + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS + """ stub: def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index a8159a57..68f66bea 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,7 +1,7 @@ process MULTIQC { label 'process_single' - conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) + conda "bioconda::multiqc=1.13" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" diff --git a/nextflow.config b/nextflow.config index 53dcc1b6..269c9e5b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - nf-core/centerformedicalgeneticsghent-nf-cmgg-structural Nextflow config file + CenterForMedicalGeneticsGhent/nf-cmgg-structural Nextflow config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Default config options for all compute environments ---------------------------------------------------------------------------------------- @@ -35,10 +35,10 @@ params { monochrome_logs = false hook_url = null help = false + version = false validate_params = true show_hidden_params = false schema_ignore_params = 'genomes' - enable_conda = false // Config options @@ -68,19 +68,19 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load nf-core/centerformedicalgeneticsghent-nf-cmgg-structural custom profiles from different institutions. +// Load CenterForMedicalGeneticsGhent/nf-cmgg-structural custom profiles from different institutions. // Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! // try { -// includeConfig "${params.custom_config_base}/pipeline/centerformedicalgeneticsghent-nf-cmgg-structural.config" +// includeConfig "${params.custom_config_base}/pipeline/nf-cmgg-structural.config" // } catch (Exception e) { -// System.err.println("WARNING: Could not load nf-core/config/centerformedicalgeneticsghent-nf-cmgg-structural profiles: ${params.custom_config_base}/pipeline/centerformedicalgeneticsghent-nf-cmgg-structural.config") +// System.err.println("WARNING: Could not load nf-core/config/nf-cmgg-structural profiles: ${params.custom_config_base}/pipeline/nf-cmgg-structural.config") // } profiles { debug { process.beforeScript = 'echo $HOSTNAME' } conda { - params.enable_conda = true + conda.enabled = true docker.enabled = false singularity.enabled = false podman.enabled = false @@ -88,7 +88,7 @@ profiles { charliecloud.enabled = false } mamba { - params.enable_conda = true + conda.enabled = true conda.useMamba = true docker.enabled = false singularity.enabled = false @@ -104,6 +104,9 @@ profiles { shifter.enabled = false charliecloud.enabled = false } + arm { + docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' + } singularity { singularity.enabled = true singularity.autoMounts = true @@ -184,12 +187,12 @@ dag { } manifest { - name = 'nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' - author = 'nvnieuwk' - homePage = 'https://github.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural' - description = 'A pipeline to call structural variants' + name = 'CenterForMedicalGeneticsGhent/nf-cmgg-structural' + author = """nvnieuwk""" + homePage = 'https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural' + description = """A nextflow pipeline for calling structural variants""" mainScript = 'main.nf' - nextflowVersion = '!>=21.10.3' + nextflowVersion = '!>=22.10.1' version = '1.0dev' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index 99b1f54b..b6780d9b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,8 +1,8 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/nf-core/centerformedicalgeneticsghent-nf-cmgg-structural/master/nextflow_schema.json", - "title": "nf-core/centerformedicalgeneticsghent-nf-cmgg-structural pipeline parameters", - "description": "A pipeline to call structural variants", + "$id": "https://raw.githubusercontent.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural/master/nextflow_schema.json", + "title": "CenterForMedicalGeneticsGhent/nf-cmgg-structural pipeline parameters", + "description": "A nextflow pipeline for calling structural variants", "type": "object", "definitions": { "input_output_options": { @@ -19,7 +19,7 @@ "pattern": "^\\S+\\.csv$", "schema": "assets/schema_input.json", "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/centerformedicalgeneticsghent-nf-cmgg-structural/usage#samplesheet-input).", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row.", "fa_icon": "fas fa-file-csv" }, "outdir": { @@ -176,6 +176,12 @@ "fa_icon": "fas fa-question-circle", "hidden": true }, + "version": { + "type": "boolean", + "description": "Display version and exit.", + "fa_icon": "fas fa-question-circle", + "hidden": true + }, "publish_dir_mode": { "type": "string", "default": "copy", @@ -217,7 +223,7 @@ "type": "string", "description": "Incoming hook URL for messaging service", "fa_icon": "fas fa-people-group", - "help_text": "Incoming hook URL for messaging service. Currently, only MS Teams is supported.", + "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", "hidden": true }, "multiqc_config": { @@ -257,12 +263,6 @@ "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." - }, - "enable_conda": { - "type": "boolean", - "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter.", - "hidden": true, - "fa_icon": "fas fa-bacon" } } } diff --git a/template.yml b/template.yml new file mode 100644 index 00000000..d95fb529 --- /dev/null +++ b/template.yml @@ -0,0 +1,4 @@ +name: nf-cmgg-structural +description: A nextflow pipeline for calling structural variants +author: nvnieuwk +prefix: CenterForMedicalGeneticsGhent diff --git a/workflows/centerformedicalgeneticsghent-nf-cmgg-structural.nf b/workflows/nf-cmgg-structural.nf similarity index 86% rename from workflows/centerformedicalgeneticsghent-nf-cmgg-structural.nf rename to workflows/nf-cmgg-structural.nf index c7ac2966..5aea6f02 100644 --- a/workflows/centerformedicalgeneticsghent-nf-cmgg-structural.nf +++ b/workflows/nf-cmgg-structural.nf @@ -7,7 +7,7 @@ def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) // Validate input parameters -WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.initialise(params, log) +WorkflowNf-cmgg-structural.initialise(params, log) // TODO nf-core: Add all file path parameters for the pipeline to the list below // Check input path parameters to see if they exist @@ -61,7 +61,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoft // Info required for completion email and summary def multiqc_report = [] -workflow CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { +workflow NF-CMGG-STRUCTURAL { ch_versions = Channel.empty() @@ -88,10 +88,10 @@ workflow CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { // // MODULE: MultiQC // - workflow_summary = WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.paramsSummaryMultiqc(workflow, summary_params) + workflow_summary = WorkflowNf-cmgg-structural.paramsSummaryMultiqc(workflow, summary_params) ch_workflow_summary = Channel.value(workflow_summary) - methods_description = WorkflowCenterformedicalgeneticsghent-nf-cmgg-structural.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description) + methods_description = WorkflowNf-cmgg-structural.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description) ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() @@ -102,12 +102,11 @@ workflow CENTERFORMEDICALGENETICSGHENT-NF-CMGG-STRUCTURAL { MULTIQC ( ch_multiqc_files.collect(), - ch_multiqc_config.collect().ifEmpty([]), - ch_multiqc_custom_config.collect().ifEmpty([]), - ch_multiqc_logo.collect().ifEmpty([]) + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList() ) multiqc_report = MULTIQC.out.report.toList() - ch_versions = ch_versions.mix(MULTIQC.out.versions) } /* @@ -122,7 +121,7 @@ workflow.onComplete { } NfcoreTemplate.summary(workflow, params, log) if (params.hook_url) { - NfcoreTemplate.adaptivecard(workflow, params, summary_params, projectDir, log) + NfcoreTemplate.IM_notification(workflow, params, summary_params, projectDir, log) } } From db84300800ecd414c56bc8beacd5eecad1559ad7 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 14:55:26 +0200 Subject: [PATCH 3/9] Template update for nf-core/tools version 2.8 --- .editorconfig | 2 +- .github/ISSUE_TEMPLATE/bug_report.yml | 3 +- .github/workflows/branch.yml | 2 +- .github/workflows/clean-up.yml | 24 ++++ .github/workflows/linting.yml | 2 +- .pre-commit-config.yaml | 5 + README.md | 64 +++++---- bin/check_samplesheet.py | 3 - conf/base.config | 2 +- conf/igenomes.config | 8 ++ conf/test_full.config | 2 + docs/usage.md | 130 +++++------------- lib/NfcoreSchema.groovy | 4 +- lib/WorkflowMain.groovy | 13 +- lib/WorkflowNf-cmgg-structural.groovy | 12 +- main.nf | 3 +- modules.json | 4 +- modules/local/samplesheet_check.nf | 2 +- .../custom/dumpsoftwareversions/main.nf | 6 +- .../custom/dumpsoftwareversions/meta.yml | 2 + modules/nf-core/multiqc/main.nf | 6 +- modules/nf-core/multiqc/meta.yml | 3 +- nextflow.config | 29 +++- pipeline_template.yml | 4 + tower.yml | 5 + 25 files changed, 188 insertions(+), 152 deletions(-) create mode 100644 .github/workflows/clean-up.yml create mode 100644 .pre-commit-config.yaml create mode 100644 pipeline_template.yml create mode 100644 tower.yml diff --git a/.editorconfig b/.editorconfig index b78de6e6..b6b31907 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ trim_trailing_whitespace = true indent_size = 4 indent_style = space -[*.{md,yml,yaml,html,css,scss,js,cff}] +[*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 # These files are edited and tested upstream in nf-core/modules diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index f197f3c7..2cf67006 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -44,7 +44,8 @@ body: * Executor _(eg. slurm, local, awsbatch)_ - * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter or Charliecloud)_ + * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, + or Apptainer)_ * OS _(eg. CentOS Linux, macOS, Linux Mint)_ diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 6d315a42..4b866cae 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,7 +13,7 @@ jobs: - name: Check PRs if: github.repository == 'CenterForMedicalGeneticsGhent/nf-cmgg-structural' run: | - { [[ ${{github.event.pull_request.head.repo.full_name }} == CenterForMedicalGeneticsGhent/nf-cmgg-structural ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == CenterForMedicalGeneticsGhent/nf-cmgg-structural ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml new file mode 100644 index 00000000..694e90ec --- /dev/null +++ b/.github/workflows/clean-up.yml @@ -0,0 +1,24 @@ +name: "Close user-tagged issues and PRs" +on: + schedule: + - cron: "0 0 * * 0" # Once a week + +jobs: + clean-up: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v7 + with: + stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." + stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." + close-issue-message: "This issue was closed because it has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor and then staled for 20 days with no activity." + days-before-stale: 30 + days-before-close: 20 + days-before-pr-close: -1 + any-of-labels: "awaiting-changes,awaiting-feedback" + exempt-issue-labels: "WIP" + exempt-pr-labels: "WIP" + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 858d622e..888cb4bc 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -78,7 +78,7 @@ jobs: - uses: actions/setup-python@v4 with: - python-version: "3.7" + python-version: "3.8" architecture: "x64" - name: Install dependencies diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..0c31cdb9 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,5 @@ +repos: + - repo: https://github.com/pre-commit/mirrors-prettier + rev: "v2.7.1" + hooks: + - id: prettier diff --git a/README.md b/README.md index acb56934..b524a553 100644 --- a/README.md +++ b/README.md @@ -8,49 +8,59 @@ ## Introduction - +**CenterForMedicalGeneticsGhent/nf-cmgg-structural** is a bioinformatics pipeline that ... -**CenterForMedicalGeneticsGhent/nf-cmgg-structural** is a bioinformatics best-practice analysis pipeline for A nextflow pipeline for calling structural variants. - -The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! - - - -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. - -## Pipeline summary + + 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) 2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) -## Quick Start +## Usage + +> **Note** +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how +> to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) +> with `-profile test` before running the workflow on actual data. + + - > - The pipeline comes with config profiles called `docker`, `singularity`, `podman`, `shifter`, `charliecloud` and `conda` which instruct the pipeline to use the named tool for software management. For example, `-profile test,docker`. - > - Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. - > - If you are using `singularity`, please use the [`nf-core download`](https://nf-co.re/tools/#downloading-pipelines-for-offline-use) command to download images first, before running the pipeline. Setting the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) Nextflow options enables you to store and re-use the images from a central location for future pipeline runs. - > - If you are using `conda`, it is highly recommended to use the [`NXF_CONDA_CACHEDIR` or `conda.cacheDir`](https://www.nextflow.io/docs/latest/conda.html) settings to store the environments in a central location for future pipeline runs. +Now, you can run the pipeline using: -4. Start running your own analysis! + - +```bash +nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural \ + -profile \ + --input samplesheet.csv \ + --outdir +``` - ```bash - nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural --input samplesheet.csv --outdir --genome GRCh37 -profile - ``` +> **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). ## Credits diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 11b15572..4a758fe0 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -158,9 +158,6 @@ def sniff_format(handle): peek = read_head(handle) handle.seek(0) sniffer = csv.Sniffer() - if not sniffer.has_header(peek): - logger.critical("The given sample sheet does not appear to contain a header.") - sys.exit(1) dialect = sniffer.sniff(peek) return dialect diff --git a/conf/base.config b/conf/base.config index 9416c1b2..8b1c7ddd 100644 --- a/conf/base.config +++ b/conf/base.config @@ -15,7 +15,7 @@ process { memory = { check_max( 6.GB * task.attempt, 'memory' ) } time = { check_max( 4.h * task.attempt, 'time' ) } - errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' diff --git a/conf/igenomes.config b/conf/igenomes.config index 7a1b3ac6..3f114377 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -36,6 +36,14 @@ params { macs_gsize = "2.7e9" blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } + 'CHM13' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" + bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" + gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" + mito_name = "chrM" + } 'GRCm38' { fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" diff --git a/conf/test_full.config b/conf/test_full.config index cfb7c7f4..e3d99de5 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,6 +10,8 @@ ---------------------------------------------------------------------------------------- */ +cleanup = true + params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' diff --git a/docs/usage.md b/docs/usage.md index 681c111f..9b8b77f3 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -69,6 +69,29 @@ work # Directory containing the nextflow working files # Other nextflow hidden files, eg. history of pipeline runs and old logs. ``` +If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. + +Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. + +> āš ļø Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). +> The above pipeline run specified with a params file in yaml format: + +```bash +nextflow run CenterForMedicalGeneticsGhent/nf-cmgg-structural -profile docker -params-file params.yaml +``` + +with `params.yaml` containing: + +```yaml +input: './samplesheet.csv' +outdir: './results/' +genome: 'GRCh37' +input: 'data' +<...> +``` + +You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). + ### Updating the pipeline When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: @@ -85,6 +108,10 @@ First, go to the [CenterForMedicalGeneticsGhent/nf-cmgg-structural releases page This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. +To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. + +> šŸ’” If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. + ## Core Nextflow arguments > **NB:** These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). @@ -93,7 +120,7 @@ This version number will be logged in reports when you run the pipeline, so that Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. @@ -117,8 +144,10 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) +- `apptainer` + - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `conda` - - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. + - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. ### `-resume` @@ -136,102 +165,19 @@ Specify the path to a specific config file (this is a core Nextflow command). Se Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. -For example, if the nf-core/rnaseq pipeline is failing after multiple re-submissions of the `STAR_ALIGN` process due to an exit code of `137` this would indicate that there is an out of memory issue: - -```console -[62/149eb0] NOTE: Process `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) -- Execution is retried (1) -Error executing process > 'NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)' - -Caused by: - Process `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) - -Command executed: - STAR \ - --genomeDir star \ - --readFilesIn WT_REP1_trimmed.fq.gz \ - --runThreadN 2 \ - --outFileNamePrefix WT_REP1. \ - - -Command exit status: - 137 - -Command output: - (empty) - -Command error: - .command.sh: line 9: 30 Killed STAR --genomeDir star --readFilesIn WT_REP1_trimmed.fq.gz --runThreadN 2 --outFileNamePrefix WT_REP1. -Work dir: - /home/pipelinetest/work/9d/172ca5881234073e8d76f2a19c88fb - -Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` -``` - -#### For beginners - -A first step to bypass this error, you could try to increase the amount of CPUs, memory, and time for the whole pipeline. Therefor you can try to increase the resource for the parameters `--max_cpus`, `--max_memory`, and `--max_time`. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of rnaseq](https://nf-co.re/rnaseq/3.9/parameters) and scroll down to the `show hidden parameter` button to get the default value for `--max_memory`. In this case 128GB, you than can try to run your pipeline again with `--max_memory 200GB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. - -#### Advanced option on process level - -To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). -We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/star/align/main.nf`. -If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). -The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. -The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. -Providing you haven't set any other standard nf-core parameters to **cap** the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `STAR_ALIGN` process failure by creating a custom config file that sets at least 72GB of memory, in this case increased to 100GB. -The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. - -```nextflow -process { - withName: 'NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN' { - memory = 100.GB - } -} -``` - -> **NB:** We specify the full process name i.e. `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN` in the config file because this takes priority over the short name (`STAR_ALIGN`) and allows existing configuration using the full process name to be correctly overridden. -> -> If you get a warning suggesting that the process selector isn't recognised check that the process name has been specified correctly. - -### Updating containers (advanced users) - -The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. - -1. Check the default version used by the pipeline in the module file for [Pangolin](https://github.com/nf-core/viralrecon/blob/a85d5969f9025409e3618d6c280ef15ce417df65/modules/nf-core/software/pangolin/main.nf#L14-L19) -2. Find the latest version of the Biocontainer available on [Quay.io](https://quay.io/repository/biocontainers/pangolin?tag=latest&tab=tags) -3. Create the custom config accordingly: - - - For Docker: +To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. - ```nextflow - process { - withName: PANGOLIN { - container = 'quay.io/biocontainers/pangolin:3.0.5--pyhdfd78af_0' - } - } - ``` +### Custom Containers - - For Singularity: +In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. - ```nextflow - process { - withName: PANGOLIN { - container = 'https://depot.galaxyproject.org/singularity/pangolin:3.0.5--pyhdfd78af_0' - } - } - ``` +To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. - - For Conda: +### Custom Tool Arguments - ```nextflow - process { - withName: PANGOLIN { - conda = 'bioconda::pangolin=3.0.5' - } - } - ``` +A pipeline might not always support every possible argument or option of a particular tool used in pipeline. Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. -> **NB:** If you wish to periodically update individual tool-specific results (e.g. Pangolin) generated by the pipeline then you must ensure to keep the `work/` directory otherwise the `-resume` ability of the pipeline will be compromised and it will restart from scratch. +To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. ### nf-core/configs diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 33cd4f6e..9b34804d 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -2,6 +2,7 @@ // This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. // +import nextflow.Nextflow import org.everit.json.schema.Schema import org.everit.json.schema.loader.SchemaLoader import org.everit.json.schema.ValidationException @@ -83,6 +84,7 @@ class NfcoreSchema { 'stub-run', 'test', 'w', + 'with-apptainer', 'with-charliecloud', 'with-conda', 'with-dag', @@ -177,7 +179,7 @@ class NfcoreSchema { } if (has_error) { - System.exit(1) + Nextflow.error('Exiting!') } } diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 2b52a762..296adb84 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -2,6 +2,8 @@ // This file holds several functions specific to the main.nf workflow in the CenterForMedicalGeneticsGhent/nf-cmgg-structural pipeline // +import nextflow.Nextflow + class WorkflowMain { // @@ -21,7 +23,7 @@ class WorkflowMain { // // Generate help string // - public static String help(workflow, params, log) { + public static String help(workflow, params) { def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" def help_string = '' help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) @@ -34,7 +36,7 @@ class WorkflowMain { // // Generate parameter summary log string // - public static String paramsSummaryLog(workflow, params, log) { + public static String paramsSummaryLog(workflow, params) { def summary_log = '' summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) @@ -49,7 +51,7 @@ class WorkflowMain { public static void initialise(workflow, params, log) { // Print help to screen if required if (params.help) { - log.info help(workflow, params, log) + log.info help(workflow, params) System.exit(0) } @@ -61,7 +63,7 @@ class WorkflowMain { } // Print parameter summary log to screen - log.info paramsSummaryLog(workflow, params, log) + log.info paramsSummaryLog(workflow, params) // Validate workflow parameters via the JSON schema if (params.validate_params) { @@ -81,8 +83,7 @@ class WorkflowMain { // Check input has been provided if (!params.input) { - log.error "Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'" - System.exit(1) + Nextflow.error("Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'") } } // diff --git a/lib/WorkflowNf-cmgg-structural.groovy b/lib/WorkflowNf-cmgg-structural.groovy index 3ebd131e..2f1891bd 100755 --- a/lib/WorkflowNf-cmgg-structural.groovy +++ b/lib/WorkflowNf-cmgg-structural.groovy @@ -2,6 +2,7 @@ // This file holds several functions specific to the workflow/nf-cmgg-structural.nf in the CenterForMedicalGeneticsGhent/nf-cmgg-structural pipeline // +import nextflow.Nextflow import groovy.text.SimpleTemplateEngine class WorkflowNf-cmgg-structural { @@ -14,8 +15,7 @@ class WorkflowNf-cmgg-structural { if (!params.fasta) { - log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." - System.exit(1) + Nextflow.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." } } @@ -61,17 +61,19 @@ class WorkflowNf-cmgg-structural { def description_html = engine.createTemplate(methods_text).make(meta) return description_html - }// + } + + // // Exit pipeline if incorrect --genome key provided // private static void genomeExistsError(params, log) { if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - log.error "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + " Currently, the available genome keys are:\n" + " ${params.genomes.keySet().join(", ")}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - System.exit(1) + Nextflow.error(error_string) } } } diff --git a/main.nf b/main.nf index 25785bf4..0d3fe613 100644 --- a/main.nf +++ b/main.nf @@ -3,8 +3,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CenterForMedicalGeneticsGhent/nf-cmgg-structural ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Github : https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural ----------------------------------------------------------------------------------------- + Github : https://github.com/CenterForMedicalGeneticsGhent/nf-cmgg-structural---------------------------------------------------------------------------------------- */ nextflow.enable.dsl = 2 diff --git a/modules.json b/modules.json index 7671e0d1..618562d9 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "76cc4938c1f6ea5c7d83fed1eeffc146787f9543", "installed_by": ["modules"] }, "fastqc": { @@ -17,7 +17,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "f2d63bd5b68925f98f572eed70993d205cc694b7", "installed_by": ["modules"] } } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index b481270e..e4a604b5 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -5,7 +5,7 @@ process SAMPLESHEET_CHECK { conda "conda-forge::python=3.8.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'quay.io/biocontainers/python:3.8.3' }" + 'biocontainers/python:3.8.3' }" input: path samplesheet diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 3df21765..800a6099 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "bioconda::multiqc=1.13" + conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml index 60b546a0..c32657de 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ b/modules/nf-core/custom/dumpsoftwareversions/meta.yml @@ -1,7 +1,9 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: custom_dumpsoftwareversions description: Custom module used to dump software versions within the nf-core pipeline template keywords: - custom + - dump - version tools: - custom: diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 68f66bea..4b604749 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_single' - conda "bioconda::multiqc=1.13" + conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index ebc29b27..f93b5ee5 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,3 +1,4 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: MultiQC description: Aggregate results from bioinformatics analyses across many samples into a single report keywords: @@ -37,7 +38,7 @@ output: description: MultiQC report file pattern: "multiqc_report.html" - data: - type: dir + type: directory description: MultiQC data dir pattern: "multiqc_data" - plots: diff --git a/nextflow.config b/nextflow.config index 269c9e5b..db6858b0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -78,7 +78,11 @@ try { profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } + debug { + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false + } conda { conda.enabled = true docker.enabled = false @@ -86,6 +90,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } mamba { conda.enabled = true @@ -95,14 +100,18 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } docker { docker.enabled = true + docker.registry = 'quay.io' docker.userEmulation = true + conda.enabled = false singularity.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } arm { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' @@ -110,31 +119,49 @@ profiles { singularity { singularity.enabled = true singularity.autoMounts = true + conda.enabled = false docker.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } podman { podman.enabled = true + podman.registry = 'quay.io' + conda.enabled = false docker.enabled = false singularity.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } shifter { shifter.enabled = true + conda.enabled = false docker.enabled = false singularity.enabled = false podman.enabled = false charliecloud.enabled = false + apptainer.enabled = false } charliecloud { charliecloud.enabled = true + conda.enabled = false docker.enabled = false singularity.enabled = false podman.enabled = false shifter.enabled = false + apptainer.enabled = false + } + apptainer { + apptainer.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false } gitpod { executor.name = 'local' diff --git a/pipeline_template.yml b/pipeline_template.yml new file mode 100644 index 00000000..6050d72b --- /dev/null +++ b/pipeline_template.yml @@ -0,0 +1,4 @@ +author: nvnieuwk +description: A nextflow pipeline for calling structural variants +name: nf-cmgg-structural +prefix: CenterForMedicalGeneticsGhent diff --git a/tower.yml b/tower.yml new file mode 100644 index 00000000..787aedfe --- /dev/null +++ b/tower.yml @@ -0,0 +1,5 @@ +reports: + multiqc_report.html: + display: "MultiQC HTML report" + samplesheet.csv: + display: "Auto-created samplesheet with collated metadata and FASTQ paths" From 6638f54d15486cb21284b8dcffc01e50647afdef Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 15:17:20 +0200 Subject: [PATCH 4/9] black linting --- bin/viola_standardize.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/bin/viola_standardize.py b/bin/viola_standardize.py index 1fe651d4..76fdde03 100755 --- a/bin/viola_standardize.py +++ b/bin/viola_standardize.py @@ -8,10 +8,10 @@ if __name__ == "__main__": # Setting up argparser parser = argparse.ArgumentParser(description="A script to standardize VCFs using Viola-SV") - parser.add_argument('vcf', metavar='FILE', type=str, help="The called VCF") - parser.add_argument('caller', metavar='STRING', type=str, help="The caller used to call the VCF") - parser.add_argument('out_file', metavar='FILE', type=str, help="The standardized VCF") - parser.add_argument('patient_name', metavar='STRING', type=str, help="The name of the patient in the VCF file") + parser.add_argument("vcf", metavar="FILE", type=str, help="The called VCF") + parser.add_argument("caller", metavar="STRING", type=str, help="The caller used to call the VCF") + parser.add_argument("out_file", metavar="FILE", type=str, help="The standardized VCF") + parser.add_argument("patient_name", metavar="STRING", type=str, help="The name of the patient in the VCF file") args = parser.parse_args() @@ -20,18 +20,21 @@ out_file = args.out_file patient_name = args.patient_name - if caller == "smoove": caller = "lumpy" + if caller == "smoove": + caller = "lumpy" if caller == "gridss": svlen_not_added = True - old_vcf = f'old_{vcf}' + old_vcf = f"old_{vcf}" os.rename(vcf, old_vcf) - with open(old_vcf, 'r') as old: - with open(vcf, 'w') as new: + with open(old_vcf, "r") as old: + with open(vcf, "w") as new: for line in old.readlines(): if line.startswith("##INFO") and svlen_not_added: svlen_not_added = False - new.write("##INFO=\n") + new.write( + '##INFO=\n' + ) new.write(line.replace("CIRPOS", "CIEND")) viola.read_vcf(vcf, variant_caller=caller, patient_name=patient_name).breakend2breakpoint().to_vcf(out_file) From 7f8d56559a7d6222c738b079fe84df79ea1d5b4d Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 15:21:21 +0200 Subject: [PATCH 5/9] update modules --- modules.json | 60 +++++++++---------- modules/nf-core/annotsv/annotsv/main.nf | 2 +- .../annotsv/installannotations/main.nf | 2 +- modules/nf-core/bcftools/concat/main.nf | 6 +- modules/nf-core/bcftools/merge/main.nf | 6 +- modules/nf-core/bcftools/reheader/main.nf | 6 +- modules/nf-core/bcftools/sort/main.nf | 6 +- modules/nf-core/bedtools/merge/main.nf | 2 +- modules/nf-core/bedtools/sort/main.nf | 2 +- modules/nf-core/bwa/index/main.nf | 2 +- .../custom/dumpsoftwareversions/main.nf | 2 +- .../templates/dumpsoftwareversions.py | 3 +- modules/nf-core/delly/call/main.nf | 2 +- modules/nf-core/ensemblvep/vep/main.nf | 2 +- modules/nf-core/gridss/gridss/main.nf | 2 +- modules/nf-core/jasminesv/main.nf | 2 +- .../nf-core/manta/convertinversion/main.nf | 2 +- .../nf-core/manta/convertinversion/meta.yml | 1 + modules/nf-core/manta/germline/main.nf | 2 +- modules/nf-core/multiqc/main.nf | 2 +- modules/nf-core/paragraph/idxdepth/main.nf | 2 +- modules/nf-core/paragraph/multigrmpy/main.nf | 2 +- modules/nf-core/samtools/convert/main.nf | 6 +- modules/nf-core/samtools/faidx/main.nf | 6 +- .../nf-core/scramble/clusteranalysis/main.nf | 2 +- .../scramble/clusteridentifier/main.nf | 2 +- modules/nf-core/smoove/call/main.nf | 2 +- modules/nf-core/tabix/bgzip/main.nf | 2 +- modules/nf-core/tabix/bgziptabix/main.nf | 2 +- modules/nf-core/tabix/tabix/main.nf | 2 +- modules/nf-core/untar/main.nf | 2 +- modules/nf-core/untar/meta.yml | 1 + modules/nf-core/vcfanno/main.nf | 2 +- 33 files changed, 74 insertions(+), 73 deletions(-) mode change 100644 => 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py diff --git a/modules.json b/modules.json index 9c294e4c..bc174dbf 100644 --- a/modules.json +++ b/modules.json @@ -7,154 +7,154 @@ "nf-core": { "annotsv/annotsv": { "branch": "master", - "git_sha": "7cf4500154a721906c271afaaeda8792bb1e2073", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"], "patch": "modules/nf-core/annotsv/annotsv/annotsv-annotsv.diff" }, "annotsv/installannotations": { "branch": "master", - "git_sha": "b68aee26a00c3578710004072a10927660d16015", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", - "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", - "git_sha": "bd4b60c7f9358c7146ac198fd0c4ae6355ddd086", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/sort": { "branch": "master", - "git_sha": "4a21e4cca35e72ec059abd67f790e0b192ce5d81", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bedtools/merge": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bedtools/sort": { "branch": "master", - "git_sha": "f1f473b21811b958d1317c4a97c56e16d3ee40f9", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "7101db4432d3268b7fcb5b8f75fa0a022dc5561b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "delly/call": { "branch": "master", - "git_sha": "0263ccf45ba68887acf848bae39e13c3f866e57e", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"], "patch": "modules/nf-core/delly/call/delly-call.diff" }, "ensemblvep/vep": { "branch": "master", - "git_sha": "ac924c4ba0be25f79248b51be0c9fbfa404b6030", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gridss/gridss": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "jasminesv": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "manta/convertinversion": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "paragraph/idxdepth": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "paragraph/multigrmpy": { "branch": "master", - "git_sha": "c6cee1435661b67d195aeec35472c8d8d6e48ef4", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/convert": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "scramble/clusteranalysis": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "scramble/clusteridentifier": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "smoove/call": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "tabix/bgzip": { "branch": "master", - "git_sha": "90294980a903ecebd99ac31d8b6c66af48fa8259", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "da53f7da4ff34b920bb3f186d151184bd440e3b5", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", + "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", "installed_by": ["modules"] }, "vcfanno": { "branch": "master", - "git_sha": "8b97329e850add26d11d822209cc6712f829e12a", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "whamg": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", "installed_by": ["modules"] } } diff --git a/modules/nf-core/annotsv/annotsv/main.nf b/modules/nf-core/annotsv/annotsv/main.nf index be45f40c..4a0d590b 100644 --- a/modules/nf-core/annotsv/annotsv/main.nf +++ b/modules/nf-core/annotsv/annotsv/main.nf @@ -5,7 +5,7 @@ process ANNOTSV_ANNOTSV { conda "bioconda::annotsv=3.3.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/annotsv:3.3.4--py311hdfd78af_1' : - 'quay.io/biocontainers/annotsv:3.3.4--py311hdfd78af_1' }" + 'biocontainers/annotsv:3.3.4--py311hdfd78af_1' }" input: tuple val(meta), path(sv_vcf), path(sv_vcf_index), path(candidate_small_variants) diff --git a/modules/nf-core/annotsv/installannotations/main.nf b/modules/nf-core/annotsv/installannotations/main.nf index 1ef0fc7d..d465f0af 100644 --- a/modules/nf-core/annotsv/installannotations/main.nf +++ b/modules/nf-core/annotsv/installannotations/main.nf @@ -5,7 +5,7 @@ process ANNOTSV_INSTALLANNOTATIONS { conda "bioconda::annotsv=3.3.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/annotsv:3.3.4--py311hdfd78af_1': - 'quay.io/biocontainers/annotsv:3.3.4--py311hdfd78af_1' }" + 'biocontainers/annotsv:3.3.4--py311hdfd78af_1' }" output: path "AnnotSV_annotations", emit: annotations diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index c7c39d9f..244a42cc 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_CONCAT { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcfs), path(tbi) diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index e664f0eb..ff6557a2 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_MERGE { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcfs), path(tbis) diff --git a/modules/nf-core/bcftools/reheader/main.nf b/modules/nf-core/bcftools/reheader/main.nf index 57634c07..36d24907 100644 --- a/modules/nf-core/bcftools/reheader/main.nf +++ b/modules/nf-core/bcftools/reheader/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_REHEADER { tag "$meta.id" label 'process_low' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(header) diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index 9ae3253b..ef41fd25 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_SORT { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/bedtools/merge/main.nf b/modules/nf-core/bedtools/merge/main.nf index 21b2e645..3f973239 100644 --- a/modules/nf-core/bedtools/merge/main.nf +++ b/modules/nf-core/bedtools/merge/main.nf @@ -5,7 +5,7 @@ process BEDTOOLS_MERGE { conda "bioconda::bedtools=2.30.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0' : - 'quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0' }" + 'biocontainers/bedtools:2.30.0--hc088bd4_0' }" input: tuple val(meta), path(bed) diff --git a/modules/nf-core/bedtools/sort/main.nf b/modules/nf-core/bedtools/sort/main.nf index a0ddddd1..bf5485d3 100644 --- a/modules/nf-core/bedtools/sort/main.nf +++ b/modules/nf-core/bedtools/sort/main.nf @@ -5,7 +5,7 @@ process BEDTOOLS_SORT { conda "bioconda::bedtools=2.30.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0' : - 'quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0' }" + 'biocontainers/bedtools:2.30.0--hc088bd4_0' }" input: tuple val(meta), path(intervals) diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index 7ccf3110..8d2e56d9 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -5,7 +5,7 @@ process BWA_INDEX { conda "bioconda::bwa=0.7.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bwa:0.7.17--hed695b0_7' : - 'quay.io/biocontainers/bwa:0.7.17--hed695b0_7' }" + 'biocontainers/bwa:0.7.17--hed695b0_7' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 800a6099..ebc87273 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -5,7 +5,7 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py old mode 100644 new mode 100755 index e55b8d43..da033408 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -4,11 +4,10 @@ """Provide functions to merge multiple versions.yml files.""" +import yaml import platform from textwrap import dedent -import yaml - def _make_versions_html(versions): """Generate a tabular HTML output of all versions for MultiQC.""" diff --git a/modules/nf-core/delly/call/main.nf b/modules/nf-core/delly/call/main.nf index f78fb1b4..43731b1b 100644 --- a/modules/nf-core/delly/call/main.nf +++ b/modules/nf-core/delly/call/main.nf @@ -5,7 +5,7 @@ process DELLY_CALL { conda "bioconda::delly=1.1.6" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/delly:1.1.6--ha41ced6_0' : - 'quay.io/biocontainers/delly:1.1.6--ha41ced6_0' }" + 'biocontainers/delly:1.1.6--ha41ced6_0' }" input: tuple val(meta), path(input), path(input_index), path(vcf), path(vcf_index), path(exclude_bed) diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index df2f845e..2db61dc9 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -5,7 +5,7 @@ process ENSEMBLVEP_VEP { conda "bioconda::ensembl-vep=108.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ensembl-vep:108.2--pl5321h4a94de4_0' : - 'quay.io/biocontainers/ensembl-vep:108.2--pl5321h4a94de4_0' }" + 'biocontainers/ensembl-vep:108.2--pl5321h4a94de4_0' }" input: tuple val(meta), path(vcf), path(custom_extra_files) diff --git a/modules/nf-core/gridss/gridss/main.nf b/modules/nf-core/gridss/gridss/main.nf index f56c38c5..f642b838 100644 --- a/modules/nf-core/gridss/gridss/main.nf +++ b/modules/nf-core/gridss/gridss/main.nf @@ -5,7 +5,7 @@ process GRIDSS_GRIDSS { conda "bioconda::gridss=2.13.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gridss:2.13.2--h270b39a_0': - 'quay.io/biocontainers/gridss:2.13.2--h270b39a_0' }" + 'biocontainers/gridss:2.13.2--h270b39a_0' }" input: tuple val(meta), path(inputs), path(assembly) diff --git a/modules/nf-core/jasminesv/main.nf b/modules/nf-core/jasminesv/main.nf index ee2a580c..8877e42a 100644 --- a/modules/nf-core/jasminesv/main.nf +++ b/modules/nf-core/jasminesv/main.nf @@ -5,7 +5,7 @@ process JASMINESV { conda "bioconda::jasminesv=1.1.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/jasminesv:1.1.5--hdfd78af_0': - 'quay.io/biocontainers/jasminesv:1.1.5--hdfd78af_0' }" + 'biocontainers/jasminesv:1.1.5--hdfd78af_0' }" input: tuple val(meta), path(vcfs), path(bams), path(sample_dists) diff --git a/modules/nf-core/manta/convertinversion/main.nf b/modules/nf-core/manta/convertinversion/main.nf index e4bf8c34..b6459489 100644 --- a/modules/nf-core/manta/convertinversion/main.nf +++ b/modules/nf-core/manta/convertinversion/main.nf @@ -5,7 +5,7 @@ process MANTA_CONVERTINVERSION { conda "bioconda::manta=1.6.0 bioconda::samtools=1.16.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-40295ae41112676b05b649e513fe7000675e9b84:a0332aa38645fbb8969567731ce68cfb7f830ec4-0': - 'quay.io/biocontainers/mulled-v2-40295ae41112676b05b649e513fe7000675e9b84:a0332aa38645fbb8969567731ce68cfb7f830ec4-0' }" + 'biocontainers/mulled-v2-40295ae41112676b05b649e513fe7000675e9b84:a0332aa38645fbb8969567731ce68cfb7f830ec4-0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/manta/convertinversion/meta.yml b/modules/nf-core/manta/convertinversion/meta.yml index 122d0fa0..cf9e169e 100644 --- a/modules/nf-core/manta/convertinversion/meta.yml +++ b/modules/nf-core/manta/convertinversion/meta.yml @@ -3,6 +3,7 @@ description: Manta calls structural variants (SVs) and indels from mapped paired keywords: - structural variants - conversion + - indels tools: - manta: description: Structural variant and indel caller for mapped sequencing data diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index 2feb6ed2..eb8d9d7f 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -5,7 +5,7 @@ process MANTA_GERMLINE { conda "bioconda::manta=1.6.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/manta:1.6.0--h9ee0642_1' : - 'quay.io/biocontainers/manta:1.6.0--h9ee0642_1' }" + 'biocontainers/manta:1.6.0--h9ee0642_1' }" input: //Matching the target bed with the input sample allows to parallelize the same sample run across different intervals or a single bed file diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 4b604749..1fc387be 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -4,7 +4,7 @@ process MULTIQC { conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/paragraph/idxdepth/main.nf b/modules/nf-core/paragraph/idxdepth/main.nf index 7703f943..8f9f18f3 100644 --- a/modules/nf-core/paragraph/idxdepth/main.nf +++ b/modules/nf-core/paragraph/idxdepth/main.nf @@ -5,7 +5,7 @@ process PARAGRAPH_IDXDEPTH { conda "bioconda::paragraph=2.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/paragraph:2.3--h8908b6f_0': - 'quay.io/biocontainers/paragraph:2.3--h8908b6f_0' }" + 'biocontainers/paragraph:2.3--h8908b6f_0' }" input: tuple val(meta) , path(input), path(input_index) diff --git a/modules/nf-core/paragraph/multigrmpy/main.nf b/modules/nf-core/paragraph/multigrmpy/main.nf index 350f4a88..7fe41e66 100644 --- a/modules/nf-core/paragraph/multigrmpy/main.nf +++ b/modules/nf-core/paragraph/multigrmpy/main.nf @@ -6,7 +6,7 @@ process PARAGRAPH_MULTIGRMPY { conda "bioconda::paragraph=2.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/paragraph:2.3--h21f15d8_1': - 'quay.io/biocontainers/paragraph:2.3--h21f15d8_1' }" + 'biocontainers/paragraph:2.3--h21f15d8_1' }" input: tuple val(meta), path(variants), path(variants_index), path(reads), path(reads_index), path(manifest) diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf index 7efebb8e..29722ba7 100644 --- a/modules/nf-core/samtools/convert/main.nf +++ b/modules/nf-core/samtools/convert/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_CONVERT { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index ce6580d2..4dd0e5b0 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_FAIDX { tag "$fasta" label 'process_single' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/scramble/clusteranalysis/main.nf b/modules/nf-core/scramble/clusteranalysis/main.nf index 00b71cf4..4f530123 100644 --- a/modules/nf-core/scramble/clusteranalysis/main.nf +++ b/modules/nf-core/scramble/clusteranalysis/main.nf @@ -5,7 +5,7 @@ process SCRAMBLE_CLUSTERANALYSIS { conda "bioconda::scramble=1.0.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/scramble:1.0.1--h779adbc_1': - 'quay.io/biocontainers/scramble:1.0.1--h779adbc_1' }" + 'biocontainers/scramble:1.0.1--h779adbc_1' }" input: tuple val(meta), path(clusters) diff --git a/modules/nf-core/scramble/clusteridentifier/main.nf b/modules/nf-core/scramble/clusteridentifier/main.nf index 4b20b9c5..54d6dd27 100644 --- a/modules/nf-core/scramble/clusteridentifier/main.nf +++ b/modules/nf-core/scramble/clusteridentifier/main.nf @@ -5,7 +5,7 @@ process SCRAMBLE_CLUSTERIDENTIFIER { conda "bioconda::scramble=1.0.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/scramble:1.0.1--h779adbc_1': - 'quay.io/biocontainers/scramble:1.0.1--h779adbc_1' }" + 'biocontainers/scramble:1.0.1--h779adbc_1' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/smoove/call/main.nf b/modules/nf-core/smoove/call/main.nf index 2b23013a..476d999c 100644 --- a/modules/nf-core/smoove/call/main.nf +++ b/modules/nf-core/smoove/call/main.nf @@ -5,7 +5,7 @@ process SMOOVE_CALL { conda "bioconda::smoove=0.2.8" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/smoove:0.2.8--h9ee0642_1' : - 'quay.io/biocontainers/smoove:0.2.8--h9ee0642_1' }" + 'biocontainers/smoove:0.2.8--h9ee0642_1' }" input: tuple val(meta), path(input), path(index), path(exclude_beds) diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf index 6dd4e202..8c47d9e2 100644 --- a/modules/nf-core/tabix/bgzip/main.nf +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -5,7 +5,7 @@ process TABIX_BGZIP { conda "bioconda::tabix=1.11" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'quay.io/biocontainers/tabix:1.11--hdfd78af_0' }" + 'biocontainers/tabix:1.11--hdfd78af_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index 120aa114..fe8160ba 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -5,7 +5,7 @@ process TABIX_BGZIPTABIX { conda "bioconda::tabix=1.11" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'quay.io/biocontainers/tabix:1.11--hdfd78af_0' }" + 'biocontainers/tabix:1.11--hdfd78af_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index 9a404db9..5bf332ef 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -5,7 +5,7 @@ process TABIX_TABIX { conda "bioconda::tabix=1.11" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'quay.io/biocontainers/tabix:1.11--hdfd78af_0' }" + 'biocontainers/tabix:1.11--hdfd78af_0' }" input: tuple val(meta), path(tab) diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 3384847a..8cd1856c 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -5,7 +5,7 @@ process UNTAR { conda "conda-forge::sed=4.7 bioconda::grep=3.4 conda-forge::tar=1.34" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'ubuntu:20.04' }" + 'nf-core/ubuntu:20.04' }" input: tuple val(meta), path(archive) diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index ea7a3f38..db241a6e 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -3,6 +3,7 @@ description: Extract files. keywords: - untar - uncompress + - extract tools: - untar: description: | diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index 86a11992..a2a078da 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -5,7 +5,7 @@ process VCFANNO { conda "bioconda::vcfanno=0.3.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/vcfanno:0.3.3--h9ee0642_0': - 'quay.io/biocontainers/vcfanno:0.3.3--h9ee0642_0' }" + 'biocontainers/vcfanno:0.3.3--h9ee0642_0' }" input: tuple val(meta), path(vcf), path(tbi), path(specific_resources) From a0bde4d50094ac0b39a85cc9204ab5df41ce3b39 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 15:21:30 +0200 Subject: [PATCH 6/9] update modules --- modules/nf-core/whamg/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/whamg/main.nf b/modules/nf-core/whamg/main.nf index 2845f743..3e919936 100644 --- a/modules/nf-core/whamg/main.nf +++ b/modules/nf-core/whamg/main.nf @@ -5,7 +5,7 @@ process WHAMG { conda "bioconda::wham=1.8.0 bioconda::tabix=1.11" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-fb3127231a8f88daa68d5eb0eec49593cd98b440:e6a1c182ebdfe372b5e3cdc05a6cece64cef7274-0': - 'quay.io/biocontainers/mulled-v2-fb3127231a8f88daa68d5eb0eec49593cd98b440:e6a1c182ebdfe372b5e3cdc05a6cece64cef7274-0' }" + 'biocontainers/mulled-v2-fb3127231a8f88daa68d5eb0eec49593cd98b440:e6a1c182ebdfe372b5e3cdc05a6cece64cef7274-0' }" input: tuple val(meta), path(bam), path(bai) From e9bb263458683c7016078ae56d97a3d18fb6e2e3 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 15:31:20 +0200 Subject: [PATCH 7/9] fix local modules --- modules/local/bcftools/reheader_called_vcfs/main.nf | 2 +- modules/local/gridss/simple_event_annotation/main.nf | 2 +- modules/local/reversebed/main.nf | 2 +- modules/local/scatter_beds/main.nf | 2 +- modules/local/viola/main.nf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/bcftools/reheader_called_vcfs/main.nf b/modules/local/bcftools/reheader_called_vcfs/main.nf index 728d5c2f..d0624a62 100644 --- a/modules/local/bcftools/reheader_called_vcfs/main.nf +++ b/modules/local/bcftools/reheader_called_vcfs/main.nf @@ -5,7 +5,7 @@ process REHEADER_CALLED_VCFS { conda "bioconda::bcftools=1.16" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'biocontainers/bcftools:1.16--hfe4b78e_1' }" input: tuple val(meta), path(vcf) diff --git a/modules/local/gridss/simple_event_annotation/main.nf b/modules/local/gridss/simple_event_annotation/main.nf index d17df08a..4f7a5655 100644 --- a/modules/local/gridss/simple_event_annotation/main.nf +++ b/modules/local/gridss/simple_event_annotation/main.nf @@ -5,7 +5,7 @@ process SIMPLE_EVENT_ANNOTATION { conda "bioconda::bioconductor-structuralvariantannotation=1.13.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bioconductor-structuralvariantannotation:1.13.0--r42hdfd78af_0' : - 'quay.io/biocontainers/bioconductor-structuralvariantannotation:1.13.0--r42hdfd78af_0' }" + 'biocontainers/bioconductor-structuralvariantannotation:1.13.0--r42hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/local/reversebed/main.nf b/modules/local/reversebed/main.nf index b9ad330a..4732dd88 100644 --- a/modules/local/reversebed/main.nf +++ b/modules/local/reversebed/main.nf @@ -5,7 +5,7 @@ process REVERSE_BED { conda "bioconda::bedtools=2.30.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0' : - 'quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0' }" + 'biocontainers/bedtools:2.30.0--hc088bd4_0' }" input: tuple val(meta), path(bed) diff --git a/modules/local/scatter_beds/main.nf b/modules/local/scatter_beds/main.nf index cb586e50..79949e2c 100644 --- a/modules/local/scatter_beds/main.nf +++ b/modules/local/scatter_beds/main.nf @@ -5,7 +5,7 @@ process SCATTER_BEDS { conda "anaconda::gawk=5.1.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gawk:5.1.0' : - 'quay.io/biocontainers/gawk:5.1.0' }" + 'biocontainers/gawk:5.1.0' }" input: tuple val(meta), path(bed) diff --git a/modules/local/viola/main.nf b/modules/local/viola/main.nf index df0a924e..d9a9ac7c 100644 --- a/modules/local/viola/main.nf +++ b/modules/local/viola/main.nf @@ -2,7 +2,7 @@ process VIOLA { tag "$meta.id" label 'process_low' - container "nicolasvnk/viola:1.0.2" + container "docker.io/nicolasvnk/viola:1.0.2" input: tuple val(meta), path(vcf) From 0e40f59b43d07ae8c881203761be64f01ee907d6 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 16:07:51 +0200 Subject: [PATCH 8/9] bump --- modules/local/viola/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/viola/main.nf b/modules/local/viola/main.nf index d9a9ac7c..5c0853e7 100644 --- a/modules/local/viola/main.nf +++ b/modules/local/viola/main.nf @@ -25,7 +25,7 @@ process VIOLA { def unzipped_vcf = vcf.name.replace(".gz","") """ - cp ${vcf} new_${vcf} + cp ${vcf} new_${vcf} bgzip -d new_${vcf} variant=\$(cat new_${unzipped_vcf} | awk '/^#/ {next} {print 1;exit}' || echo 0) From 48bed310887a3a7422d43a77c7a17a0b9c50f388 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Thu, 11 May 2023 16:11:19 +0200 Subject: [PATCH 9/9] eclint --- modules/local/viola/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/viola/main.nf b/modules/local/viola/main.nf index 5c0853e7..d9a9ac7c 100644 --- a/modules/local/viola/main.nf +++ b/modules/local/viola/main.nf @@ -25,7 +25,7 @@ process VIOLA { def unzipped_vcf = vcf.name.replace(".gz","") """ - cp ${vcf} new_${vcf} + cp ${vcf} new_${vcf} bgzip -d new_${vcf} variant=\$(cat new_${unzipped_vcf} | awk '/^#/ {next} {print 1;exit}' || echo 0)