From 9545b5802aa4a0a54018348073bfd7220a03f9bc Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Fri, 15 Nov 2019 10:48:03 +0100 Subject: [PATCH 1/2] add CODEOWNERS file --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..04c39ab2b5 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @MaxUlysse \ No newline at end of file From 4ed01b90d309d92b944e3edcae5602da5c55e74c Mon Sep 17 00:00:00 2001 From: runner Date: Thu, 20 Feb 2020 15:33:33 +0000 Subject: [PATCH 2/2] Template update for nf-core/tools version 1.9 --- .github/CODEOWNERS | 1 - .github/CONTRIBUTING.md | 52 ++- .github/ISSUE_TEMPLATE/bug_report.md | 43 ++- .github/ISSUE_TEMPLATE/feature_request.md | 18 +- .github/PULL_REQUEST_TEMPLATE.md | 28 +- .github/markdownlint.yml | 4 - .github/workflows/branch.yml | 16 + .github/workflows/ci.yml | 30 ++ .github/workflows/linting.yml | 50 +++ .gitignore | 3 +- .travis.yml | 42 -- CHANGELOG.md | 14 +- CODE_OF_CONDUCT.md | 2 +- Dockerfile | 12 +- README.md | 55 ++- assets/email_template.html | 4 +- assets/email_template.txt | 12 +- assets/multiqc_config.yaml | 4 +- assets/nf-core-sarek_logo.png | Bin 0 -> 11791 bytes assets/sendmail_template.txt | 17 + bin/markdown_to_html.py | 100 +++++ bin/markdown_to_html.r | 51 --- bin/scrape_software_versions.py | 15 +- conf/awsbatch.config | 18 - conf/base.config | 37 +- conf/igenomes.config | 451 +++++++++++++++++----- conf/test.config | 7 +- docs/images/nf-core-sarek_logo.png | Bin 0 -> 20140 bytes docs/output.md | 4 +- docs/usage.md | 95 +++-- environment.yml | 10 +- main.nf | 278 +++++++------ nextflow.config | 58 ++- 33 files changed, 1052 insertions(+), 479 deletions(-) delete mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/branch.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/linting.yml delete mode 100644 .travis.yml create mode 100644 assets/nf-core-sarek_logo.png create mode 100755 bin/markdown_to_html.py delete mode 100755 bin/markdown_to_html.r delete mode 100644 conf/awsbatch.config create mode 100644 docs/images/nf-core-sarek_logo.png diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 04c39ab2b5..0000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @MaxUlysse \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index aa11820ab2..a9ca4281ec 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,47 +1,57 @@ # nf-core/sarek: Contributing Guidelines -Hi there! Many thanks for taking an interest in improving nf-core/sarek. +Hi there! +Many thanks for taking an interest in improving nf-core/sarek. -We try to manage the required tasks for nf-core/sarek 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/sarek then the best place to ask is on the pipeline channel on [Slack](https://nf-core-invite.herokuapp.com/). +We try to manage the required tasks for nf-core/sarek 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/sarek then the best place to ask is on the nf-core Slack [#sarek](https://nfcore.slack.com/channels/sarek) channel ([join our Slack here](https://nf-co.re/join/slack)). ## Contribution workflow -If you'd like to write some code for nf-core/sarek, the standard workflow -is as follows: -1. Check that there isn't already an issue about your idea in the - [nf-core/sarek issues](https://github.com/nf-core/sarek/issues) to avoid - duplicating work. +If you'd like to write some code for nf-core/sarek, the standard workflow is as follows: + +1. Check that there isn't already an issue about your idea in the [nf-core/sarek issues](https://github.com/nf-core/sarek/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 the [nf-core/sarek repository](https://github.com/nf-core/sarek) to your GitHub account +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/sarek repository](https://github.com/nf-core/sarek) to your GitHub account 3. Make the necessary changes / additions within your forked repository -4. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged. - -If you're not used to this workflow with git, you can start with some [basic docs from GitHub](https://help.github.com/articles/fork-a-repo/) or even their [excellent interactive tutorial](https://try.github.io/). +4. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged +If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). ## Tests -When you create a pull request with changes, [Travis CI](https://travis-ci.org/) will run automatic tests. + +When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. There are typically two types of tests that run: ### Lint Tests -The nf-core has a [set of guidelines](http://nf-co.re/guidelines) which all pipelines must adhere to. + +`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. ### Pipeline Tests -Each nf-core pipeline should be set up with a minimal set of test-data. -Travis CI then runs the pipeline on this data to ensure that it exists successfully. + +Each `nf-core` pipeline should be set up with a minimal set of test-data. +`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. If there are any failures then the automated tests fail. -These tests are run both with the latest available version of Nextflow and also the minimum required version that is stated in the pipeline code. +These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. + +## Patch + +: warning: Only in the unlikely and regretful event of a release happening with a bug. + +* On your own fork, make a new branch `patch` based on `upstream/master`. +* 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/sarek documentation](https://github.com/nf-core/sarek#documentation) and don't hesitate to get in touch on the pipeline channel on [Slack](https://nf-core-invite.herokuapp.com/). + +For further information/help, please consult the [nf-core/sarek documentation](https://nf-co.re/nf-core/sarek/docs) and don't hesitate to get in touch on the nf-core Slack [#sarek](https://nfcore.slack.com/channels/sarek) channel ([join our Slack here](https://nf-co.re/join/slack)). diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 6df6c5052c..e5b9ff24c7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,31 +1,42 @@ +# nf-core/sarek bug report + Hi there! -Thanks for telling us about a problem with the pipeline. Please delete this text and anything that's not relevant from the template below: +Thanks for telling us about a problem with the pipeline. +Please delete this text and anything that's not relevant from the template below: + +## Describe the bug -#### Describe the bug A clear and concise description of what the bug is. -#### Steps to reproduce +## Steps to reproduce + Steps to reproduce the behaviour: + 1. Command line: `nextflow run ...` 2. See error: _Please provide your error message_ -#### Expected behaviour +## Expected behaviour + A clear and concise description of what you expected to happen. -#### System: - - Hardware: [e.g. HPC, Desktop, Cloud...] - - Executor: [e.g. slurm, local, awsbatch...] - - OS: [e.g. CentOS Linux, macOS, Linux Mint...] - - Version [e.g. 7, 10.13.6, 18.3...] +## System + +- Hardware: +- Executor: +- OS: +- Version + +## Nextflow Installation + +- Version: + +## Container engine -#### Nextflow Installation: - - Version: [e.g. 0.31.0] +- Engine: +- version: +- Image tag: -#### Container engine: - - Engine: [e.g. Conda, Docker or Singularity] - - version: [e.g. 1.0.0] - - Image tag: [e.g. nfcore/sarek:1.0.0] +## Additional context -#### Additional context Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 1f025b779c..e3f009a723 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,16 +1,24 @@ +# nf-core/sarek feature request + Hi there! -Thanks for suggesting a new feature for the pipeline! Please delete this text and anything that's not relevant from the template below: +Thanks for suggesting a new feature for the pipeline! +Please delete this text and anything that's not relevant from the template below: + +## Is your feature request related to a problem? Please describe -#### Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. + Ex. I'm always frustrated when [...] -#### Describe the solution you'd like +## Describe the solution you'd like + A clear and concise description of what you want to happen. -#### Describe alternatives you've considered +## Describe alternatives you've considered + A clear and concise description of any alternative solutions or features you've considered. -#### Additional context +## Additional context + Add any other context about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f9fe1f9ffa..913a3fa83c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,15 +1,19 @@ -Many thanks to contributing to nf-core/sarek! +# nf-core/sarek pull request -Please fill in the appropriate checklist below (delete whatever is not relevant). These are the most common things requested on pull requests (PRs). +Many thanks for contributing to nf-core/sarek! + +Please fill in the appropriate checklist below (delete whatever is not relevant). +These are the most common things requested on pull requests (PRs). ## 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 necessary, also make a PR on the [nf-core/sarek branch on the nf-core/test-datasets repo]( https://github.com/nf-core/test-datasets/pull/new/nf-core/sarek) - - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - - [ ] Make sure your code lints (`nf-core lint .`). - - [ ] Documentation in `docs` is updated - - [ ] `CHANGELOG.md` is updated - - [ ] `README.md` is updated - -**Learn more about contributing:** https://github.com/nf-core/sarek/tree/master/.github/CONTRIBUTING.md + +- [ ] 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 necessary, also make a PR on the [nf-core/sarek branch on the nf-core/test-datasets repo](https://github.com/nf-core/test-datasets/pull/new/nf-core/sarek) +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). +- [ ] Make sure your code lints (`nf-core lint .`). +- [ ] Documentation in `docs` is updated +- [ ] `CHANGELOG.md` is updated +- [ ] `README.md` is updated + +**Learn more about contributing:** [CONTRIBUTING.md](https://github.com/nf-core/sarek/tree/master/.github/CONTRIBUTING.md) \ No newline at end of file diff --git a/.github/markdownlint.yml b/.github/markdownlint.yml index e052a635aa..96b12a7039 100644 --- a/.github/markdownlint.yml +++ b/.github/markdownlint.yml @@ -1,9 +1,5 @@ # Markdownlint configuration file default: true, line-length: false -no-multiple-blanks: 0 -blanks-around-headers: false -blanks-around-lists: false -header-increment: false no-duplicate-header: siblings_only: true diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml new file mode 100644 index 0000000000..7d0c81d92a --- /dev/null +++ b/.github/workflows/branch.yml @@ -0,0 +1,16 @@ +name: nf-core branch protection +# This workflow is triggered on PRs to master branch on the repository +# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +on: + pull_request: + branches: + - master + +jobs: + test: + runs-on: ubuntu-18.04 + steps: + # PRs are only ok if coming from an nf-core `dev` branch or a fork `patch` branch + - name: Check PRs + run: | + { [[ $(git remote get-url origin) == *nf-core/sarek ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..095b34cdf4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,30 @@ +name: nf-core CI +# This workflow is triggered on pushes and PRs to the repository. +# It runs the pipeline with the minimal test dataset to check that it completes without any syntax errors +on: [push, pull_request] + +jobs: + test: + env: + NXF_VER: ${{ matrix.nxf_ver }} + NXF_ANSI_LOG: false + runs-on: ubuntu-latest + strategy: + matrix: + # Nextflow versions: check pipeline minimum and current latest + nxf_ver: ['19.10.0', ''] + steps: + - uses: actions/checkout@v2 + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - name: Pull docker image + run: | + docker pull nfcore/sarek:dev + docker tag nfcore/sarek:dev nfcore/sarek:dev + - name: Run pipeline with test data + run: | + # TODO nf-core: You can customise CI pipeline run tests as required + # (eg. adding multiple test runs with different parameters) + nextflow run ${GITHUB_WORKSPACE} -profile test,docker diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100644 index 0000000000..1e0827a800 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,50 @@ +name: nf-core linting +# This workflow is triggered on pushes and PRs to the repository. +# It runs the `nf-core lint` and markdown lint tests to ensure that the code meets the nf-core guidelines +on: + push: + pull_request: + release: + types: [published] + +jobs: + Markdown: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '10' + - name: Install markdownlint + run: npm install -g markdownlint-cli + - name: Run Markdownlint + run: markdownlint ${GITHUB_WORKSPACE} -c ${GITHUB_WORKSPACE}/.github/markdownlint.yml + YAML: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: '10' + - name: Install yaml-lint + run: npm install -g yaml-lint + - name: Run yaml-lint + run: yamllint $(find ${GITHUB_WORKSPACE} -type f -name "*.yml") + nf-core: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - uses: actions/setup-python@v1 + with: + python-version: '3.6' + architecture: 'x64' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install nf-core + - name: Run nf-core lint + run: nf-core lint ${GITHUB_WORKSPACE} diff --git a/.gitignore b/.gitignore index 5b54e3e6c2..6354f3708f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ work/ data/ results/ .DS_Store -tests/test_data +tests/ +testing/ *.pyc diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5477cf5611..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -sudo: required -language: python -jdk: openjdk8 -services: docker -python: '3.6' -cache: pip -matrix: - fast_finish: true - -before_install: - # PRs to master are only ok if coming from dev branch - - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && [ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ])' - # Pull the docker image first so the test doesn't wait for this - - docker pull nfcore/sarek:dev - # Fake the tag locally so that the pipeline runs properly - # Looks weird when this is :dev to :dev, but makes sense when testing code for a release (:dev to :1.0.1) - - docker tag nfcore/sarek:dev nfcore/sarek:dev - -install: - # Install Nextflow - - mkdir /tmp/nextflow && cd /tmp/nextflow - - wget -qO- get.nextflow.io | bash - - sudo ln -s /tmp/nextflow/nextflow /usr/local/bin/nextflow - # Install nf-core/tools - - pip install --upgrade pip - - pip install nf-core - # Reset - - mkdir ${TRAVIS_BUILD_DIR}/tests && cd ${TRAVIS_BUILD_DIR}/tests - # Install markdownlint-cli - - sudo apt-get install npm && npm install -g markdownlint-cli - -env: - - NXF_VER='0.32.0' # Specify a minimum NF version that should be tested and work - - NXF_VER='' # Plus: get the latest NF version and check that it works - -script: - # Lint the pipeline code - - nf-core lint ${TRAVIS_BUILD_DIR} - # Lint the documentation - - markdownlint ${TRAVIS_BUILD_DIR} -c ${TRAVIS_BUILD_DIR}/.github/markdownlint.yml - # Run the pipeline with the test profile - - nextflow run ${TRAVIS_BUILD_DIR} -profile test,docker diff --git a/CHANGELOG.md b/CHANGELOG.md index 553967ad93..10efab2aa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,16 @@ # nf-core/sarek: Changelog -## v1.0dev - [date] +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## vdev - [date] + Initial release of nf-core/sarek, created with the [nf-core](http://nf-co.re/) template. + +### `Added` + +### `Fixed` + +### `Dependencies` + +### `Deprecated` diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 09226d0d8d..cf930c8acf 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-core-invite.herokuapp.com/). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-co.re/join/slack). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. diff --git a/Dockerfile b/Dockerfile index de0a87aded..8ab1767242 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,13 @@ -FROM nfcore/base +FROM nfcore/base:1.9 LABEL authors="Maxime Garcia, Szilveszter Juhos" \ - description="Docker image containing all requirements for nf-core/sarek pipeline" + description="Docker image containing all software requirements for the nf-core/sarek pipeline" +# Install the conda environment COPY environment.yml / RUN conda env create -f /environment.yml && conda clean -a -ENV PATH /opt/conda/envs/nf-core-sarek-1.0dev/bin:$PATH + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-sarek-dev/bin:$PATH + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-sarek-dev > nf-core-sarek-dev.yml diff --git a/README.md b/README.md index ed50ad900f..1b5253743f 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,44 @@ -# nf-core/sarek +# ![nf-core/sarek](docs/images/nf-core-sarek_logo.png) -**An open-source analysis pipeline to detect germline or somatic variants from whole genome or targeted sequencing.**. +**An open-source analysis pipeline to detect germline or somatic variants from whole genome or targeted sequencing**. -[![Build Status](https://travis-ci.com/nf-core/sarek.svg?branch=master)](https://travis-ci.com/nf-core/sarek) -[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A50.32.0-brightgreen.svg)](https://www.nextflow.io/) +[![GitHub Actions CI Status](https://github.com/nf-core/sarek/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/sarek/actions) +[![GitHub Actions Linting Status](https://github.com/nf-core/sarek/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/sarek/actions) +[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-brightgreen.svg)](https://www.nextflow.io/) [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](http://bioconda.github.io/) [![Docker](https://img.shields.io/docker/automated/nfcore/sarek.svg)](https://hub.docker.com/r/nfcore/sarek) ## Introduction + 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 comes with docker containers making installation trivial and results highly reproducible. +## Quick Start + +i. Install [`nextflow`](https://nf-co.re/usage/installation) + +ii. Install either [`Docker`](https://docs.docker.com/engine/installation/) or [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) for full pipeline reproducibility (please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles)) + +iii. Download the pipeline and test it on a minimal dataset with a single command + +```bash +nextflow run nf-core/sarek -profile test, +``` + +> 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. + +iv. Start running your own analysis! + + + +```bash +nextflow run nf-core/sarek -profile --reads '*_R{1,2}.fastq.gz' --genome GRCh37 +``` + +See [usage docs](docs/usage.md) for all of the available options when running the pipeline. ## Documentation + The nf-core/sarek pipeline comes with documentation about the pipeline, found in the `docs/` directory: 1. [Installation](https://nf-co.re/usage/installation) @@ -27,4 +53,25 @@ The nf-core/sarek pipeline comes with documentation about the pipeline, found in ## Credits + nf-core/sarek was originally written by Maxime Garcia, Szilveszter Juhos. + +## Contributions and Support + +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 [Slack](https://nfcore.slack.com/channels/sarek) (you can join with [this invite](https://nf-co.re/join/slack)). + +## Citation + + + + +You can cite the `nf-core` publication as follows: + +> **The nf-core framework for community-curated bioinformatics pipelines.** +> +> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. +> +> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). +> ReadCube: [Full Access Link](https://rdcu.be/b1GjZ) diff --git a/assets/email_template.html b/assets/email_template.html index 291779ba3c..1d069c4254 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -5,12 +5,14 @@ - + nf-core/sarek Pipeline Report
+ +

nf-core/sarek v${version}

Run Name: $runName

diff --git a/assets/email_template.txt b/assets/email_template.txt index 76e9ae7e57..2be647eac1 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -1,6 +1,12 @@ -======================================== - nf-core/sarek v${version} -======================================== +---------------------------------------------------- + ,--./,-. + ___ __ __ __ ___ /,-._.--~\\ + |\\ | |__ __ / ` / \\ |__) |__ } { + | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-, + `._,._,' + nf-core/sarek v${version} +---------------------------------------------------- + Run Name: $runName <% if (success){ diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index fe8d008cb4..cd2444f81d 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -3,7 +3,9 @@ report_comment: > analysis pipeline. For information about how to interpret these results, please see the documentation. report_section_order: - nf-core/sarek-software-versions: + software_versions: order: -1000 + nf-core-sarek-summary: + order: -1001 export_plots: true diff --git a/assets/nf-core-sarek_logo.png b/assets/nf-core-sarek_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8fcad5be69fdcf69a6e9768a2d723351d223f0 GIT binary patch literal 11791 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 literal 0 HcmV?d00001 diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index 2d67122006..40adeeb492 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -8,6 +8,23 @@ Content-Type: text/html; charset=utf-8 $email_html +--nfcoremimeboundary +Content-Type: image/png;name="nf-core-sarek_logo.png" +Content-Transfer-Encoding: base64 +Content-ID: +Content-Disposition: inline; filename="nf-core-sarek_logo.png" + +<% out << new File("$baseDir/assets/nf-core-sarek_logo.png"). + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' ) %> + <% if (mqcFile){ def mqcFileObj = new File("$mqcFile") diff --git a/bin/markdown_to_html.py b/bin/markdown_to_html.py new file mode 100755 index 0000000000..57cc4263fe --- /dev/null +++ b/bin/markdown_to_html.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +from __future__ import print_function +import argparse +import markdown +import os +import sys + +def convert_markdown(in_fn): + input_md = open(in_fn, mode="r", encoding="utf-8").read() + html = markdown.markdown( + "[TOC]\n" + input_md, + extensions = [ + 'pymdownx.extra', + 'pymdownx.b64', + 'pymdownx.highlight', + 'pymdownx.emoji', + 'pymdownx.tilde', + 'toc' + ], + extension_configs = { + 'pymdownx.b64': { + 'base_path': os.path.dirname(in_fn) + }, + 'pymdownx.highlight': { + 'noclasses': True + }, + 'toc': { + 'title': 'Table of Contents' + } + } + ) + return html + +def wrap_html(contents): + header = """ + + + + + +
+ """ + footer = """ +
+ + + """ + return header + contents + footer + + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument('mdfile', type=argparse.FileType('r'), nargs='?', + help='File to convert. Defaults to stdin.') + parser.add_argument('-o', '--out', type=argparse.FileType('w'), + default=sys.stdout, + help='Output file name. Defaults to stdout.') + return parser.parse_args(args) + +def main(args=None): + args = parse_args(args) + converted_md = convert_markdown(args.mdfile.name) + html = wrap_html(converted_md) + args.out.write(html) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/bin/markdown_to_html.r b/bin/markdown_to_html.r deleted file mode 100755 index abe1335070..0000000000 --- a/bin/markdown_to_html.r +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env Rscript - -# Command line argument processing -args = commandArgs(trailingOnly=TRUE) -if (length(args) < 2) { - stop("Usage: markdown_to_html.r ", call.=FALSE) -} -markdown_fn <- args[1] -output_fn <- args[2] - -# Load / install packages -if (!require("markdown")) { - install.packages("markdown", dependencies=TRUE, repos='http://cloud.r-project.org/') - library("markdown") -} - -base_css_fn <- getOption("markdown.HTML.stylesheet") -base_css <- readChar(base_css_fn, file.info(base_css_fn)$size) -custom_css <- paste(base_css, " -body { - padding: 3em; - margin-right: 350px; - max-width: 100%; -} -#toc { - position: fixed; - right: 20px; - width: 300px; - padding-top: 20px; - overflow: scroll; - height: calc(100% - 3em - 20px); -} -#toc_header { - font-size: 1.8em; - font-weight: bold; -} -#toc > ul { - padding-left: 0; - list-style-type: none; -} -#toc > ul ul { padding-left: 20px; } -#toc > ul > li > a { display: none; } -img { max-width: 800px; } -") - -markdownToHTML( - file = markdown_fn, - output = output_fn, - stylesheet = custom_css, - options = c('toc', 'base64_images', 'highlight_code') -) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 0cb269ad8c..b76f9acf14 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -18,14 +18,17 @@ # Search each file using its regex for k, v in regexes.items(): - with open(v[0]) as x: - versions = x.read() - match = re.search(v[1], versions) - if match: - results[k] = "v{}".format(match.group(1)) + try: + with open(v[0]) as x: + versions = x.read() + match = re.search(v[1], versions) + if match: + results[k] = "v{}".format(match.group(1)) + except IOError: + results[k] = False # Remove software set to false in results -for k in results: +for k in list(results): if not results[k]: del(results[k]) diff --git a/conf/awsbatch.config b/conf/awsbatch.config deleted file mode 100644 index 14af5866f5..0000000000 --- a/conf/awsbatch.config +++ /dev/null @@ -1,18 +0,0 @@ -/* - * ------------------------------------------------- - * Nextflow config file for running on AWS batch - * ------------------------------------------------- - * Base config needed for running with -profile awsbatch - */ -params { - config_profile_name = 'AWSBATCH' - config_profile_description = 'AWSBATCH Cloud Profile' - config_profile_contact = 'Alexander Peltzer (@apeltzer)' - config_profile_url = 'https://aws.amazon.com/de/batch/' -} - -aws.region = params.awsregion -process.executor = 'awsbatch' -process.queue = params.awsqueue -executor.awscli = '/home/ec2-user/miniconda/bin/aws' -params.tracedir = './' diff --git a/conf/base.config b/conf/base.config index bb54f1e010..bea0d66b67 100644 --- a/conf/base.config +++ b/conf/base.config @@ -13,22 +13,39 @@ process { // TODO nf-core: Check the defaults for all processes cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 8.GB * task.attempt, 'memory' ) } - time = { check_max( 2.h * task.attempt, 'time' ) } + memory = { check_max( 7.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' // Process-specific resource requirements + // NOTE - Only one of the labels below are used in the fastqc process in the main script. + // If possible, it would be nice to keep the same label naming convention when + // adding in your processes. // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors -} - -params { - // Defaults only, expecting to be overwritten - max_memory = 128.GB - max_cpus = 16 - max_time = 240.h - igenomes_base = 's3://ngi-igenomes/igenomes/' + withLabel:process_low { + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 14.GB * task.attempt, 'memory' ) } + time = { check_max( 6.h * task.attempt, 'time' ) } + } + withLabel:process_medium { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 42.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } + withLabel:process_high { + cpus = { check_max( 12 * task.attempt, 'cpus' ) } + memory = { check_max( 84.GB * task.attempt, 'memory' ) } + time = { check_max( 10.h * task.attempt, 'time' ) } + } + withLabel:process_long { + time = { check_max( 20.h * task.attempt, 'time' ) } + } + withName:get_software_versions { + cache = false + } + } diff --git a/conf/igenomes.config b/conf/igenomes.config index d19e61f4b1..2de924228f 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -9,139 +9,412 @@ params { // illumina iGenomes reference file paths - // TODO nf-core: Add new reference types and strip out those that are not needed genomes { 'GRCh37' { - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" + 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 = "${baseDir}/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/genome.fa" + 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 = "${baseDir}/assets/blacklists/hg38-blacklist.bed" } 'GRCm38' { - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" + 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 = "${baseDir}/assets/blacklists/GRCm38-blacklist.bed" } 'TAIR10' { - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + 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/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + 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/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + 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/genome.fa" + 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_6.0' { - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + 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/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + 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/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" + 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' { - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" + 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/genome.fa" + 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 = "${baseDir}/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/genome.fa" + 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 = "${baseDir}/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/genome.fa" + 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 = "${baseDir}/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/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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/genome.fa" + 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 84e483eb2a..36fb34a726 100644 --- a/conf/test.config +++ b/conf/test.config @@ -4,20 +4,21 @@ * ------------------------------------------------- * Defines bundled input files and everything required * to run a fast and simple test. Use as follows: - * nextflow run nf-core/sarek -profile test + * nextflow run nf-core/sarek -profile test, */ params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on Travis + // Limit resources so that this can run on GitHub Actions max_cpus = 2 max_memory = 6.GB max_time = 48.h + // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - singleEnd = false + single_end = false readPaths = [ ['Testdata', ['https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R1.tiny.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R2.tiny.fastq.gz']], ['SRR389222', ['https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz']] diff --git a/docs/images/nf-core-sarek_logo.png b/docs/images/nf-core-sarek_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8a124aa13f34fb5ea0b647a6aff0d7b6a0b52b GIT binary patch literal 20140 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 literal 0 HcmV?d00001 diff --git a/docs/output.md b/docs/output.md index 65b4509093..14ccaa911e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -5,6 +5,7 @@ This document describes the output produced by the pipeline. Most of the plots a ## Pipeline overview + The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: @@ -12,6 +13,7 @@ and processes data using the following steps: * [MultiQC](#multiqc) - aggregate report, describing results of the whole pipeline ## FastQC + [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%T/A/G/C). You get information about adapter contamination and other overrepresented sequences. For further reading and documentation see the [FastQC help](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). @@ -25,8 +27,8 @@ For further reading and documentation see the [FastQC help](http://www.bioinform * `zips/sample_fastqc.zip` * zip file containing the FastQC report, tab-delimited data file and plot images - ## MultiQC + [MultiQC](http://multiqc.info) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in within the report data directory. The pipeline has special steps which allow the software versions used to be reported in the MultiQC output for future traceability. diff --git a/docs/usage.md b/docs/usage.md index ee1162992a..f4fe2486c8 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -2,8 +2,6 @@ ## Table of contents - - * [Table of contents](#table-of-contents) * [Introduction](#introduction) * [Running the pipeline](#running-the-pipeline) @@ -12,20 +10,23 @@ * [Main arguments](#main-arguments) * [`-profile`](#-profile) * [`--reads`](#--reads) - * [`--singleEnd`](#--singleend) + * [`--single_end`](#--single_end) * [Reference genomes](#reference-genomes) * [`--genome` (using iGenomes)](#--genome-using-igenomes) * [`--fasta`](#--fasta) - * [`--igenomesIgnore`](#--igenomesignore) + * [`--igenomes_ignore`](#--igenomes_ignore) * [Job resources](#job-resources) * [Automatic resubmission](#automatic-resubmission) * [Custom resource requests](#custom-resource-requests) * [AWS Batch specific parameters](#aws-batch-specific-parameters) * [`--awsqueue`](#--awsqueue) * [`--awsregion`](#--awsregion) + * [`--awscli`](#--awscli) * [Other command line parameters](#other-command-line-parameters) * [`--outdir`](#--outdir) * [`--email`](#--email) + * [`--email_on_fail`](#--email_on_fail) + * [`--max_multiqc_email_size`](#--max_multiqc_email_size) * [`-name`](#-name) * [`-resume`](#-resume) * [`-c`](#-c) @@ -37,10 +38,9 @@ * [`--plaintext_email`](#--plaintext_email) * [`--monochrome_logs`](#--monochrome_logs) * [`--multiqc_config`](#--multiqc_config) - - ## Introduction + Nextflow handles job submissions on SLURM or other environments, and supervises running the jobs. Thus the Nextflow process must run until the pipeline is finished. We recommend that you put the process running in the background through `screen` / `tmux` or similar tool. Alternatively you can run nextflow within a cluster job submitted your job scheduler. It is recommended to limit the Nextflow Java virtual machines memory. We recommend adding the following line to your environment (typically in `~/.bashrc` or `~./bash_profile`): @@ -52,6 +52,7 @@ NXF_OPTS='-Xms1g -Xmx4g' ## Running the pipeline + The typical command for running the pipeline is as follows: ```bash @@ -70,6 +71,7 @@ results # Finished results (configurable, see below) ``` ### 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: ```bash @@ -77,31 +79,40 @@ nextflow pull nf-core/sarek ``` ### Reproducibility + It's 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/sarek releases page](https://github.com/nf-core/sarek/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. - ## Main arguments ### `-profile` -Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. Note that multiple profiles can be loaded, for example: `-profile docker` - the order of arguments is important! -If `-profile` is not specified at all the pipeline will be run locally and expects all software to be installed and available on the `PATH`. +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, 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. + +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). + +Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! +They are loaded in sequence, so later profiles can overwrite earlier profiles. + +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. -* `awsbatch` - * A generic configuration profile to be used with AWS Batch. -* `conda` - * A generic configuration profile to be used with [conda](https://conda.io/docs/) - * Pulls most software from [Bioconda](https://bioconda.github.io/) * `docker` * A generic configuration profile to be used with [Docker](http://docker.com/) * Pulls software from dockerhub: [`nfcore/sarek`](http://hub.docker.com/r/nfcore/sarek/) * `singularity` * A generic configuration profile to be used with [Singularity](http://singularity.lbl.gov/) * Pulls software from DockerHub: [`nfcore/sarek`](http://hub.docker.com/r/nfcore/sarek/) +* `conda` + * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker or Singularity. + * A generic configuration profile to be used with [Conda](https://conda.io/docs/) + * Pulls most software from [Bioconda](https://bioconda.github.io/) * `test` * A profile with a complete configuration for automated testing * Includes links to test data so needs no other parameters @@ -109,6 +120,7 @@ If `-profile` is not specified at all the pipeline will be run locally and expec ### `--reads` + Use this to specify the location of your input FastQ files. For example: ```bash @@ -123,21 +135,22 @@ Please note the following requirements: If left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz` -### `--singleEnd` -By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--singleEnd` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--reads`. For example: +### `--single_end` + +By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--single_end` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--reads`. For example: ```bash ---singleEnd --reads '*.fastq' +--single_end --reads '*.fastq' ``` It is not possible to run a mixture of single-end and paired-end files in one run. - ## Reference genomes The pipeline config files come bundled with paths to the illumina iGenomes reference index files. If running with docker or AWS, the configuration is set up to use the [AWS-iGenomes](https://ewels.github.io/AWS-iGenomes/) resource. ### `--genome` (using iGenomes) + There are 31 different species supported in the iGenomes references. To run the pipeline, you must specify which to use with the `--genome` flag. You can find the keys to specify the genomes in the [iGenomes config file](../conf/igenomes.config). Common genomes that are supported are: @@ -171,33 +184,48 @@ params { ``` + ### `--fasta` + If you prefer, you can specify the full path to your reference genome when you run the pipeline: ```bash --fasta '[path to Fasta reference]' ``` -### `--igenomesIgnore` +### `--igenomes_ignore` + 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`. ## Job resources + ### Automatic resubmission + 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 an error code of `143` (exceeded requested resources) it will automatically resubmit with higher requests (2 x original, then 3 x original). If it still fails after three times then the pipeline is stopped. ### Custom resource requests + Wherever process-specific requirements are set in the pipeline, the default value can be changed by creating a custom config file. See the files hosted at [`nf-core/configs`](https://github.com/nf-core/configs/tree/master/conf) for examples. If you are likely to be running `nf-core` pipelines regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter (see definition below). You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. -If you have any questions or issues please send us a message on [Slack](https://nf-core-invite.herokuapp.com/). +If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack). ## AWS Batch specific parameters -Running the pipeline on AWS Batch requires a couple of specific parameters to be set according to your AWS Batch configuration. Please use the `-awsbatch` profile and then specify all of the following parameters. + +Running the pipeline on AWS Batch requires a couple of specific parameters to be set according to your AWS Batch configuration. Please use [`-profile awsbatch`](https://github.com/nf-core/configs/blob/master/conf/awsbatch.config) and then specify all of the following parameters. + ### `--awsqueue` + The JobQueue that you intend to use on AWS Batch. + ### `--awsregion` -The AWS region to run your job in. Default is set to `eu-west-1` but can be adjusted to your needs. + +The AWS region in which to run your job. Default is set to `eu-west-1` but can be adjusted to your needs. + +### `--awscli` + +The [AWS CLI](https://www.nextflow.io/docs/latest/awscloud.html#aws-cli-installation) path in your custom AMI. Default: `/home/ec2-user/miniconda/bin/aws`. Please make sure to also set the `-w/--work-dir` and `--outdir` parameters to a S3 storage bucket of your choice - you'll get an error message notifying you if you didn't. @@ -206,12 +234,23 @@ Please make sure to also set the `-w/--work-dir` and `--outdir` parameters to a ### `--outdir` + The output directory where the results will be saved. ### `--email` + Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run. +### `--email_on_fail` + +This works exactly as with `--email`, except emails are only sent if the workflow is not successful. + +### `--max_multiqc_email_size` + +Threshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB). + ### `-name` + Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic. This is used in the MultiQC report (if not default) and in the summary HTML / e-mail (always). @@ -219,6 +258,7 @@ This is used in the MultiQC report (if not default) and in the summary HTML / e- **NB:** Single hyphen (core Nextflow option) ### `-resume` + Specify this when restarting a pipeline. Nextflow will used cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. @@ -226,6 +266,7 @@ You can also supply a run name to resume a specific run: `-resume [run-name]`. U **NB:** Single hyphen (core Nextflow option) ### `-c` + Specify the path to a specific config file (this is a core NextFlow command). **NB:** Single hyphen (core Nextflow option) @@ -233,7 +274,8 @@ Specify the path to a specific config file (this is a core NextFlow command). Note - you can use this to override pipeline defaults. ### `--custom_config_version` -Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default is set to `master`. + +Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`. ```bash ## Download and use config file with following git commid id @@ -241,6 +283,7 @@ Provide git commit id for custom Institutional configs hosted at `nf-core/config ``` ### `--custom_config_base` + If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the @@ -261,22 +304,28 @@ nextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs > files + singularity containers + institutional configs in one go for you, to make this process easier. ### `--max_memory` + Use to set a top-limit for the default memory requirement for each process. Should be a string in the format integer-unit. eg. `--max_memory '8.GB'` ### `--max_time` + Use to set a top-limit for the default time requirement for each process. Should be a string in the format integer-unit. eg. `--max_time '2.h'` ### `--max_cpus` + Use to set a top-limit for the default CPU requirement for each process. Should be a string in the format integer-unit. eg. `--max_cpus 1` ### `--plaintext_email` + Set to receive plain-text e-mails instead of HTML formatted. ### `--monochrome_logs` + Set to disable colourful command line output and live life in monochrome. ### `--multiqc_config` + Specify a path to a custom MultiQC configuration file. diff --git a/environment.yml b/environment.yml index 6d1ff3c479..82cdd864c6 100644 --- a/environment.yml +++ b/environment.yml @@ -1,11 +1,15 @@ # You can use this file to create a conda environment for this pipeline: # conda env create -f environment.yml -name: nf-core-sarek-1.0dev +name: nf-core-sarek-dev channels: - conda-forge - bioconda - defaults dependencies: + - conda-forge::python=3.7.3 + - conda-forge::markdown=3.1.1 + - conda-forge::pymdown-extensions=6.0 + - conda-forge::pygments=2.5.2 # TODO nf-core: Add required software dependencies here - - fastqc=0.11.8 - - multiqc=1.7 + - bioconda::fastqc=0.11.8 + - bioconda::multiqc=1.7 diff --git a/main.nf b/main.nf index 42567aca5c..2cf6a76ce8 100644 --- a/main.nf +++ b/main.nf @@ -9,7 +9,6 @@ ---------------------------------------------------------------------------------------- */ - def helpMessage() { // TODO nf-core: Add to this help message with new command line parameters log.info nfcoreHeader() @@ -22,39 +21,41 @@ def helpMessage() { nextflow run nf-core/sarek --reads '*_R{1,2}.fastq.gz' -profile docker Mandatory arguments: - --reads Path to input data (must be surrounded with quotes) - -profile Configuration profile to use. Can use multiple (comma separated) - Available: conda, docker, singularity, awsbatch, test and more. + --reads [file] Path to input data (must be surrounded with quotes) + -profile [str] Configuration profile to use. Can use multiple (comma separated) + Available: conda, docker, singularity, test, awsbatch, and more Options: - --genome Name of iGenomes reference - --singleEnd Specifies that the input is single end reads + --genome [str] Name of iGenomes reference + --single_end [bool] Specifies that the input is single-end reads - References If not specified in the configuration file or you wish to overwrite any of the references. - --fasta Path to Fasta reference + References If not specified in the configuration file or you wish to overwrite any of the references + --fasta [file] Path to fasta reference Other options: - --outdir The output directory where the results will be saved - --email Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits - --maxMultiqcEmailFileSize Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) - -name Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic. + --outdir [file] The output directory where the results will be saved + --email [email] Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits + --email_on_fail [email] Same as --email, except only send mail if the workflow is not successful + --max_multiqc_email_size [str] Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) + -name [str] Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic AWSBatch options: - --awsqueue The AWSBatch JobQueue that needs to be set when running on AWSBatch - --awsregion The AWS Region for your AWS Batch job to run on + --awsqueue [str] The AWSBatch JobQueue that needs to be set when running on AWSBatch + --awsregion [str] The AWS Region for your AWS Batch job to run on + --awscli [str] Path to the AWS CLI tool """.stripIndent() } -/* - * SET UP CONFIGURATION VARIABLES - */ - -// Show help emssage -if (params.help){ +// Show help message +if (params.help) { helpMessage() exit 0 } +/* + * SET UP CONFIGURATION VARIABLES + */ + // Check if genome exists in the config file if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(", ")}" @@ -62,103 +63,101 @@ if (params.genomes && params.genome && !params.genomes.containsKey(params.genome // TODO nf-core: Add any reference files that are needed // Configurable reference genomes -fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false -if ( params.fasta ){ - fasta = file(params.fasta) - if( !fasta.exists() ) exit 1, "Fasta file not found: ${params.fasta}" -} // // NOTE - THIS IS NOT USED IN THIS PIPELINE, EXAMPLE ONLY -// If you want to use the above in a process, define the following: +// If you want to use the channel below in a process, define the following: // input: -// file fasta from fasta +// file fasta from ch_fasta // - +params.fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false +if (params.fasta) { ch_fasta = file(params.fasta, checkIfExists: true) } // Has the run name been specified by the user? // this has the bonus effect of catching both -name and --name custom_runName = params.name -if( !(workflow.runName ==~ /[a-z]+_[a-z]+/) ){ - custom_runName = workflow.runName +if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { + custom_runName = workflow.runName } - -if( workflow.profile == 'awsbatch') { - // AWSBatch sanity checking - if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" - // Check outdir paths to be S3 buckets if running on AWSBatch - // related: https://github.com/nextflow-io/nextflow/issues/813 - if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" - // Prevent trace files to be stored on S3 since S3 does not support rolling files. - if (workflow.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." +if (workflow.profile.contains('awsbatch')) { + // AWSBatch sanity checking + if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" + // Check outdir paths to be S3 buckets if running on AWSBatch + // related: https://github.com/nextflow-io/nextflow/issues/813 + if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" + // Prevent trace files to be stored on S3 since S3 does not support rolling files. + if (params.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." } // Stage config files -ch_multiqc_config = Channel.fromPath(params.multiqc_config) -ch_output_docs = Channel.fromPath("$baseDir/docs/output.md") +ch_multiqc_config = file("$baseDir/assets/multiqc_config.yaml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() +ch_output_docs = file("$baseDir/docs/output.md", checkIfExists: true) /* * Create a channel for input read files */ -if(params.readPaths){ - if(params.singleEnd){ +if (params.readPaths) { + if (params.single_end) { Channel .from(params.readPaths) - .map { row -> [ row[0], [file(row[1][0])]] } + .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true) ] ] } .ifEmpty { exit 1, "params.readPaths was empty - no input files supplied" } - .into { read_files_fastqc; read_files_trimming } + .into { ch_read_files_fastqc; ch_read_files_trimming } } else { Channel .from(params.readPaths) - .map { row -> [ row[0], [file(row[1][0]), file(row[1][1])]] } + .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true), file(row[1][1], checkIfExists: true) ] ] } .ifEmpty { exit 1, "params.readPaths was empty - no input files supplied" } - .into { read_files_fastqc; read_files_trimming } + .into { ch_read_files_fastqc; ch_read_files_trimming } } } else { Channel - .fromFilePairs( params.reads, size: params.singleEnd ? 1 : 2 ) - .ifEmpty { exit 1, "Cannot find any reads matching: ${params.reads}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --singleEnd on the command line." } - .into { read_files_fastqc; read_files_trimming } + .fromFilePairs(params.reads, size: params.single_end ? 1 : 2) + .ifEmpty { exit 1, "Cannot find any reads matching: ${params.reads}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --single_end on the command line." } + .into { ch_read_files_fastqc; ch_read_files_trimming } } - // Header log info log.info nfcoreHeader() def summary = [:] -if(workflow.revision) summary['Pipeline Release'] = workflow.revision +if (workflow.revision) summary['Pipeline Release'] = workflow.revision summary['Run Name'] = custom_runName ?: workflow.runName // TODO nf-core: Report custom parameters here summary['Reads'] = params.reads summary['Fasta Ref'] = params.fasta -summary['Data Type'] = params.singleEnd ? 'Single-End' : 'Paired-End' +summary['Data Type'] = params.single_end ? 'Single-End' : 'Paired-End' summary['Max Resources'] = "$params.max_memory memory, $params.max_cpus cpus, $params.max_time time per job" -if(workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" +if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" summary['Output dir'] = params.outdir summary['Launch dir'] = workflow.launchDir summary['Working dir'] = workflow.workDir summary['Script dir'] = workflow.projectDir summary['User'] = workflow.userName -if(workflow.profile == 'awsbatch'){ - summary['AWS Region'] = params.awsregion - summary['AWS Queue'] = params.awsqueue +if (workflow.profile.contains('awsbatch')) { + summary['AWS Region'] = params.awsregion + summary['AWS Queue'] = params.awsqueue + summary['AWS CLI'] = params.awscli } summary['Config Profile'] = workflow.profile -if(params.config_profile_description) summary['Config Description'] = params.config_profile_description -if(params.config_profile_contact) summary['Config Contact'] = params.config_profile_contact -if(params.config_profile_url) summary['Config URL'] = params.config_profile_url -if(params.email) { - summary['E-mail Address'] = params.email - summary['MultiQC maxsize'] = params.maxMultiqcEmailFileSize +if (params.config_profile_description) summary['Config Description'] = params.config_profile_description +if (params.config_profile_contact) summary['Config Contact'] = params.config_profile_contact +if (params.config_profile_url) summary['Config URL'] = params.config_profile_url +if (params.email || params.email_on_fail) { + summary['E-mail Address'] = params.email + summary['E-mail on failure'] = params.email_on_fail + summary['MultiQC maxsize'] = params.max_multiqc_email_size } log.info summary.collect { k,v -> "${k.padRight(18)}: $v" }.join("\n") -log.info "\033[2m----------------------------------------------------\033[0m" +log.info "-\033[2m--------------------------------------------------\033[0m-" // Check the hostnames against configured profiles checkHostname() -def create_workflow_summary(summary) { - def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') - yaml_file.text = """ +Channel.from(summary.collect{ [it.key, it.value] }) + .map { k,v -> "
$k
${v ?: 'N/A'}
" } + .reduce { a, b -> return [a, b].join("\n ") } + .map { x -> """ id: 'nf-core-sarek-summary' description: " - this information is collected when the pipeline is started." section_name: 'nf-core/sarek Workflow Summary' @@ -166,26 +165,23 @@ def create_workflow_summary(summary) { plot_type: 'html' data: |
-${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} + $x
- """.stripIndent() - - return yaml_file -} - + """.stripIndent() } + .set { ch_workflow_summary } /* * Parse software version numbers */ process get_software_versions { publishDir "${params.outdir}/pipeline_info", mode: 'copy', - saveAs: {filename -> - if (filename.indexOf(".csv") > 0) filename - else null - } + saveAs: { filename -> + if (filename.indexOf(".csv") > 0) filename + else null + } output: - file 'software_versions_mqc.yaml' into software_versions_yaml + file 'software_versions_mqc.yaml' into ch_software_versions_yaml file "software_versions.csv" script: @@ -199,30 +195,29 @@ process get_software_versions { """ } - - /* * STEP 1 - FastQC */ process fastqc { tag "$name" + label 'process_medium' publishDir "${params.outdir}/fastqc", mode: 'copy', - saveAs: {filename -> filename.indexOf(".zip") > 0 ? "zips/$filename" : "$filename"} + saveAs: { filename -> + filename.indexOf(".zip") > 0 ? "zips/$filename" : "$filename" + } input: - set val(name), file(reads) from read_files_fastqc + set val(name), file(reads) from ch_read_files_fastqc output: - file "*_fastqc.{zip,html}" into fastqc_results + file "*_fastqc.{zip,html}" into ch_fastqc_results script: """ - fastqc -q $reads + fastqc --quiet --threads $task.cpus $reads """ } - - /* * STEP 2 - MultiQC */ @@ -230,28 +225,28 @@ process multiqc { publishDir "${params.outdir}/MultiQC", mode: 'copy' input: - file multiqc_config from ch_multiqc_config + file (multiqc_config) from ch_multiqc_config + file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) // TODO nf-core: Add in log files from your new processes for MultiQC to find! - file ('fastqc/*') from fastqc_results.collect().ifEmpty([]) - file ('software_versions/*') from software_versions_yaml.collect() - file workflow_summary from create_workflow_summary(summary) + file ('fastqc/*') from ch_fastqc_results.collect().ifEmpty([]) + file ('software_versions/*') from ch_software_versions_yaml.collect() + file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") output: - file "*multiqc_report.html" into multiqc_report + file "*multiqc_report.html" into ch_multiqc_report file "*_data" file "multiqc_plots" script: rtitle = custom_runName ? "--title \"$custom_runName\"" : '' rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' + custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' // TODO nf-core: Specify which MultiQC modules to use with -m for a faster run time """ - multiqc -f $rtitle $rfilename --config $multiqc_config . + multiqc -f $rtitle $rfilename $custom_config_file . """ } - - /* * STEP 3 - Output Description HTML */ @@ -266,12 +261,10 @@ process output_documentation { script: """ - markdown_to_html.r $output_docs results_description.html + markdown_to_html.py $output_docs -o results_description.html """ } - - /* * Completion e-mail notification */ @@ -279,8 +272,8 @@ workflow.onComplete { // Set up the e-mail variables def subject = "[nf-core/sarek] Successful: $workflow.runName" - if(!workflow.success){ - subject = "[nf-core/sarek] FAILED: $workflow.runName" + if (!workflow.success) { + subject = "[nf-core/sarek] FAILED: $workflow.runName" } def email_fields = [:] email_fields['version'] = workflow.manifest.version @@ -298,21 +291,20 @@ workflow.onComplete { email_fields['summary']['Date Completed'] = workflow.complete email_fields['summary']['Pipeline script file path'] = workflow.scriptFile email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId - if(workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository - if(workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId - if(workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision - if(workflow.container) email_fields['summary']['Docker image'] = workflow.container + if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision email_fields['summary']['Nextflow Version'] = workflow.nextflow.version email_fields['summary']['Nextflow Build'] = workflow.nextflow.build email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - // TODO nf-core: If not using MultiQC, strip out this code (including params.maxMultiqcEmailFileSize) + // TODO nf-core: If not using MultiQC, strip out this code (including params.max_multiqc_email_size) // On success try attach the multiqc report def mqc_report = null try { if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList){ + mqc_report = ch_multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList) { log.warn "[nf-core/sarek] Found multiple reports from process 'multiqc', will use only one" mqc_report = mqc_report[0] } @@ -321,6 +313,12 @@ workflow.onComplete { log.warn "[nf-core/sarek] Could not attach MultiQC report to summary email" } + // Check if we are only sending emails on failure + email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } + // Render the TXT template def engine = new groovy.text.GStringTemplateEngine() def tf = new File("$baseDir/assets/email_template.txt") @@ -333,89 +331,89 @@ workflow.onComplete { def email_html = html_template.toString() // Render the sendmail template - def smail_fields = [ email: params.email, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.maxMultiqcEmailFileSize.toBytes() ] + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] def sf = new File("$baseDir/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - if (params.email) { + if (email_address) { try { - if( params.plaintext_email ){ throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "[nf-core/sarek] Sent summary e-mail to $params.email (sendmail)" + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "[nf-core/sarek] Sent summary e-mail to $email_address (sendmail)" } catch (all) { - // Catch failures and try with plaintext - [ 'mail', '-s', subject, params.email ].execute() << email_txt - log.info "[nf-core/sarek] Sent summary e-mail to $params.email (mail)" + // Catch failures and try with plaintext + [ 'mail', '-s', subject, email_address ].execute() << email_txt + log.info "[nf-core/sarek] Sent summary e-mail to $email_address (mail)" } } // Write summary e-mail HTML to a file - def output_d = new File( "${params.outdir}/pipeline_info/" ) - if( !output_d.exists() ) { - output_d.mkdirs() + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() } - def output_hf = new File( output_d, "pipeline_report.html" ) + def output_hf = new File(output_d, "pipeline_report.html") output_hf.withWriter { w -> w << email_html } - def output_tf = new File( output_d, "pipeline_report.txt" ) + def output_tf = new File(output_d, "pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - c_reset = params.monochrome_logs ? '' : "\033[0m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; c_red = params.monochrome_logs ? '' : "\033[0;31m"; + c_reset = params.monochrome_logs ? '' : "\033[0m"; - if (workflow.stats.ignoredCountFmt > 0 && workflow.success) { - log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" - log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCountFmt} ${c_reset}" - log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCountFmt} ${c_reset}" + if (workflow.stats.ignoredCount > 0 && workflow.success) { + log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" + log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" + log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" } - if(workflow.success){ - log.info "${c_purple}[nf-core/sarek]${c_green} Pipeline completed successfully${c_reset}" + if (workflow.success) { + log.info "-${c_purple}[nf-core/sarek]${c_green} Pipeline completed successfully${c_reset}-" } else { checkHostname() - log.info "${c_purple}[nf-core/sarek]${c_red} Pipeline completed with errors${c_reset}" + log.info "-${c_purple}[nf-core/sarek]${c_red} Pipeline completed with errors${c_reset}-" } } -def nfcoreHeader(){ +def nfcoreHeader() { // Log colors ANSI codes - c_reset = params.monochrome_logs ? '' : "\033[0m"; - c_dim = params.monochrome_logs ? '' : "\033[2m"; c_black = params.monochrome_logs ? '' : "\033[0;30m"; - c_green = params.monochrome_logs ? '' : "\033[0;32m"; - c_yellow = params.monochrome_logs ? '' : "\033[0;33m"; c_blue = params.monochrome_logs ? '' : "\033[0;34m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; c_cyan = params.monochrome_logs ? '' : "\033[0;36m"; + c_dim = params.monochrome_logs ? '' : "\033[2m"; + c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; + c_reset = params.monochrome_logs ? '' : "\033[0m"; c_white = params.monochrome_logs ? '' : "\033[0;37m"; + c_yellow = params.monochrome_logs ? '' : "\033[0;33m"; - return """ ${c_dim}----------------------------------------------------${c_reset} + return """ -${c_dim}--------------------------------------------------${c_reset}- ${c_green},--.${c_black}/${c_green},-.${c_reset} ${c_blue} ___ __ __ __ ___ ${c_green}/,-._.--~\'${c_reset} ${c_blue} |\\ | |__ __ / ` / \\ |__) |__ ${c_yellow}} {${c_reset} ${c_blue} | \\| | \\__, \\__/ | \\ |___ ${c_green}\\`-._,-`-,${c_reset} ${c_green}`._,._,\'${c_reset} ${c_purple} nf-core/sarek v${workflow.manifest.version}${c_reset} - ${c_dim}----------------------------------------------------${c_reset} + -${c_dim}--------------------------------------------------${c_reset}- """.stripIndent() } -def checkHostname(){ +def checkHostname() { def c_reset = params.monochrome_logs ? '' : "\033[0m" def c_white = params.monochrome_logs ? '' : "\033[0;37m" def c_red = params.monochrome_logs ? '' : "\033[1;91m" def c_yellow_bold = params.monochrome_logs ? '' : "\033[1;93m" - if(params.hostnames){ + if (params.hostnames) { def hostname = "hostname".execute().text.trim() params.hostnames.each { prof, hnames -> hnames.each { hname -> - if(hostname.contains(hname) && !workflow.profile.contains(prof)){ + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { log.error "====================================================\n" + " ${c_red}WARNING!${c_reset} You are running with `-profile $workflow.profile`\n" + " but your machine hostname is ${c_white}'$hostname'${c_reset}\n" + diff --git a/nextflow.config b/nextflow.config index c8f631f826..c5b0c4f9b6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -10,29 +10,35 @@ params { // Workflow flags // TODO nf-core: Specify your pipeline's command line flags + genome = false reads = "data/*{1,2}.fastq.gz" - singleEnd = false + single_end = false outdir = './results' // Boilerplate options name = false - multiqc_config = "$baseDir/assets/multiqc_config.yaml" + multiqc_config = false email = false - maxMultiqcEmailFileSize = 25.MB + email_on_fail = false + max_multiqc_email_size = 25.MB plaintext_email = false monochrome_logs = false help = false - igenomes_base = "./iGenomes" + igenomes_base = 's3://ngi-igenomes/igenomes/' tracedir = "${params.outdir}/pipeline_info" - awsqueue = false - awsregion = 'eu-west-1' - igenomesIgnore = false + igenomes_ignore = false custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" hostnames = false config_profile_description = false config_profile_contact = false config_profile_url = false + + // Defaults only, expecting to be overwritten + max_memory = 128.GB + max_cpus = 16 + max_time = 240.h + } // Container slug. Stable releases should specify release tag! @@ -50,19 +56,33 @@ try { } profiles { - awsbatch { includeConfig 'conf/awsbatch.config' } conda { process.conda = "$baseDir/environment.yml" } debug { process.beforeScript = 'echo $HOSTNAME' } - docker { docker.enabled = true } - singularity { singularity.enabled = true } + docker { + docker.enabled = true + // Avoid this error: + // WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. + // Testing this in nf-core after discussion here https://github.com/nf-core/tools/pull/351 + // once this is established and works well, nextflow might implement this behavior as new default. + docker.runOptions = '-u \$(id -u):\$(id -g)' + } + singularity { + singularity.enabled = true + singularity.autoMounts = true + } test { includeConfig 'conf/test.config' } } // Load igenomes.config if required -if(!params.igenomesIgnore){ +if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } +// Export this variable to prevent local Python libraries from conflicting with those in the container +env { + PYTHONNOUSERSITE = 1 +} + // Capture exit codes from upstream processes when piping process.shell = ['/bin/bash', '-euo', 'pipefail'] @@ -87,18 +107,18 @@ manifest { name = 'nf-core/sarek' author = 'Maxime Garcia, Szilveszter Juhos' homePage = 'https://github.com/nf-core/sarek' - description = 'An open-source analysis pipeline to detect germline or somatic variants from whole genome or targeted sequencing.' + description = 'An open-source analysis pipeline to detect germline or somatic variants from whole genome or targeted sequencing' mainScript = 'main.nf' - nextflowVersion = '>=0.32.0' - version = '1.0dev' + nextflowVersion = '>=19.10.0' + version = 'dev' } // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { - if(type == 'memory'){ + if (type == 'memory') { try { - if(obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) + if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) return params.max_memory as nextflow.util.MemoryUnit else return obj @@ -106,9 +126,9 @@ def check_max(obj, type) { println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" return obj } - } else if(type == 'time'){ + } else if (type == 'time') { try { - if(obj.compareTo(params.max_time as nextflow.util.Duration) == 1) + if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) return params.max_time as nextflow.util.Duration else return obj @@ -116,7 +136,7 @@ def check_max(obj, type) { println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" return obj } - } else if(type == 'cpus'){ + } else if (type == 'cpus') { try { return Math.min( obj, params.max_cpus as int ) } catch (all) {