From 8129fe7cdcdbf1aca7c5d01230c2f4ff3c5f1031 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 28 Apr 2023 14:26:01 +0000 Subject: [PATCH 01/83] Template update for nf-core/tools version 2.8 --- .editorconfig | 2 +- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 3 +- .github/workflows/awsfulltest.yml | 2 +- .github/workflows/awstest.yml | 2 +- .github/workflows/branch.yml | 2 +- .github/workflows/clean-up.yml | 24 ++++ .github/workflows/linting.yml | 2 +- .pre-commit-config.yaml | 5 + CHANGELOG.md | 2 +- README.md | 74 ++++++---- bin/check_samplesheet.py | 3 - conf/base.config | 2 +- conf/igenomes.config | 8 ++ conf/test_full.config | 2 + docs/usage.md | 130 +++++------------- lib/NfcoreSchema.groovy | 4 +- lib/WorkflowMain.groovy | 13 +- lib/WorkflowRnafusion.groovy | 12 +- main.nf | 1 - modules.json | 4 +- modules/local/samplesheet_check.nf | 2 +- .../custom/dumpsoftwareversions/main.nf | 6 +- .../custom/dumpsoftwareversions/meta.yml | 2 + modules/nf-core/multiqc/main.nf | 6 +- modules/nf-core/multiqc/meta.yml | 3 +- nextflow.config | 31 ++++- tower.yml | 5 + 28 files changed, 195 insertions(+), 159 deletions(-) create mode 100644 .github/workflows/clean-up.yml create mode 100644 .pre-commit-config.yaml create mode 100644 tower.yml diff --git a/.editorconfig b/.editorconfig index b78de6e6..b6b31907 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ trim_trailing_whitespace = true indent_size = 4 indent_style = space -[*.{md,yml,yaml,html,css,scss,js,cff}] +[*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 # These files are edited and tested upstream in nf-core/modules diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 8ed5ffe6..41c21167 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -45,6 +45,6 @@ body: * Nextflow version _(eg. 22.10.1)_ * Hardware _(eg. HPC, Desktop, Cloud)_ * Executor _(eg. slurm, local, awsbatch)_ - * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter or Charliecloud)_ + * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, or Apptainer)_ * OS _(eg. CentOS Linux, macOS, Linux Mint)_ * Version of nf-core/rnafusion _(eg. 1.1, 1.5, 1.8.2)_ diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6f604f38..5cc076f3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -15,7 +15,8 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rnaf - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/rnafusion/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/rnafusion _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/rnafusion/tree/master/.github/CONTRIBUTING.md) +- [ ] If necessary, also make a PR on the nf-core/rnafusion _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index a2fbe1e2..30a9fbbc 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Launch workflow via tower - uses: nf-core/tower-action@v3 + uses: seqeralabs/action-tower-launch@v1 # TODO nf-core: You can customise AWS full pipeline tests as required # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 14762177..be662dd3 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -12,7 +12,7 @@ jobs: steps: # Launch workflow using Tower CLI tool action - name: Launch workflow via tower - uses: nf-core/tower-action@v3 + uses: seqeralabs/action-tower-launch@v1 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index ccb7211b..3867817a 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,7 +13,7 @@ jobs: - name: Check PRs if: github.repository == 'nf-core/rnafusion' run: | - { [[ ${{github.event.pull_request.head.repo.full_name }} == nf-core/rnafusion ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == nf-core/rnafusion ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml new file mode 100644 index 00000000..694e90ec --- /dev/null +++ b/.github/workflows/clean-up.yml @@ -0,0 +1,24 @@ +name: "Close user-tagged issues and PRs" +on: + schedule: + - cron: "0 0 * * 0" # Once a week + +jobs: + clean-up: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v7 + with: + stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." + stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." + close-issue-message: "This issue was closed because it has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor and then staled for 20 days with no activity." + days-before-stale: 30 + days-before-close: 20 + days-before-pr-close: -1 + any-of-labels: "awaiting-changes,awaiting-feedback" + exempt-issue-labels: "WIP" + exempt-pr-labels: "WIP" + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 858d622e..888cb4bc 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -78,7 +78,7 @@ jobs: - uses: actions/setup-python@v4 with: - python-version: "3.7" + python-version: "3.8" architecture: "x64" - name: Install dependencies diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..0c31cdb9 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,5 @@ +repos: + - repo: https://github.com/pre-commit/mirrors-prettier + rev: "v2.7.1" + hooks: + - id: prettier diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bb898b7..5470be26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.2.0dev - [date] +## v2.3.4 - [date] Initial release of nf-core/rnafusion, created with the [nf-core](https://nf-co.re/) template. diff --git a/README.md b/README.md index aa92b95d..7fef3b59 100644 --- a/README.md +++ b/README.md @@ -8,57 +8,71 @@ [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Nextflow Tower](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Nextflow%20Tower-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/nf-core/rnafusion) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnafusion-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnafusion)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) ## Introduction - +**nf-core/rnafusion** is a bioinformatics pipeline that ... -**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for Nextflow rnafusion analysis pipeline, part of the nf-core community.. - -The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! - - - -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results). - -## Pipeline summary + + 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) 2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) -## Quick Start +## Usage + +> **Note** +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how +> to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) +> with `-profile test` before running the workflow on actual data. + + - Note that some form of configuration will be needed so that Nextflow knows how to fetch the required software. This is usually done in the form of a config profile (`YOURPROFILE` in the example command above). You can chain multiple config profiles in a comma-separated string. +Now, you can run the pipeline using: - > - The pipeline comes with config profiles called `docker`, `singularity`, `podman`, `shifter`, `charliecloud` and `conda` which instruct the pipeline to use the named tool for software management. For example, `-profile test,docker`. - > - Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. - > - If you are using `singularity`, please use the [`nf-core download`](https://nf-co.re/tools/#downloading-pipelines-for-offline-use) command to download images first, before running the pipeline. Setting the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) Nextflow options enables you to store and re-use the images from a central location for future pipeline runs. - > - If you are using `conda`, it is highly recommended to use the [`NXF_CONDA_CACHEDIR` or `conda.cacheDir`](https://www.nextflow.io/docs/latest/conda.html) settings to store the environments in a central location for future pipeline runs. + -4. Start running your own analysis! +```bash +nextflow run nf-core/rnafusion \ + -profile \ + --input samplesheet.csv \ + --outdir +``` - +> **Warning:** +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those +> provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; +> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). - ```bash - nextflow run nf-core/rnafusion --input samplesheet.csv --outdir --genome GRCh37 -profile - ``` +For more details, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters). -## Documentation +## Pipeline output -The nf-core/rnafusion pipeline comes with documentation about the pipeline [usage](https://nf-co.re/rnafusion/usage), [parameters](https://nf-co.re/rnafusion/parameters) and [output](https://nf-co.re/rnafusion/output). +To see the the results of a test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page. +For more details about the output files and reports, please refer to the +[output documentation](https://nf-co.re/rnafusion/output). ## Credits diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 11b15572..4a758fe0 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -158,9 +158,6 @@ def sniff_format(handle): peek = read_head(handle) handle.seek(0) sniffer = csv.Sniffer() - if not sniffer.has_header(peek): - logger.critical("The given sample sheet does not appear to contain a header.") - sys.exit(1) dialect = sniffer.sniff(peek) return dialect diff --git a/conf/base.config b/conf/base.config index d9c546a1..51042a02 100644 --- a/conf/base.config +++ b/conf/base.config @@ -15,7 +15,7 @@ process { memory = { check_max( 6.GB * task.attempt, 'memory' ) } time = { check_max( 4.h * task.attempt, 'time' ) } - errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' diff --git a/conf/igenomes.config b/conf/igenomes.config index 7a1b3ac6..3f114377 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -36,6 +36,14 @@ params { macs_gsize = "2.7e9" blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } + 'CHM13' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" + bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" + gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" + mito_name = "chrM" + } 'GRCm38' { fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" diff --git a/conf/test_full.config b/conf/test_full.config index e2522d72..54ef4afd 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,6 +10,8 @@ ---------------------------------------------------------------------------------------- */ +cleanup = true + params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' diff --git a/docs/usage.md b/docs/usage.md index 977e4b38..06b9bc29 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -71,6 +71,29 @@ work # Directory containing the nextflow working files # Other nextflow hidden files, eg. history of pipeline runs and old logs. ``` +If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. + +Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. + +> ⚠️ Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). +> The above pipeline run specified with a params file in yaml format: + +```bash +nextflow run nf-core/rnafusion -profile docker -params-file params.yaml +``` + +with `params.yaml` containing: + +```yaml +input: './samplesheet.csv' +outdir: './results/' +genome: 'GRCh37' +input: 'data' +<...> +``` + +You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). + ### Updating the pipeline When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: @@ -87,6 +110,10 @@ First, go to the [nf-core/rnafusion releases page](https://github.com/nf-core/rn This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. +To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. + +> 💡 If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. + ## Core Nextflow arguments > **NB:** These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). @@ -95,7 +122,7 @@ This version number will be logged in reports when you run the pipeline, so that Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. @@ -119,8 +146,10 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) +- `apptainer` + - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `conda` - - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. + - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. ### `-resume` @@ -138,102 +167,19 @@ Specify the path to a specific config file (this is a core Nextflow command). Se Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. -For example, if the nf-core/rnaseq pipeline is failing after multiple re-submissions of the `STAR_ALIGN` process due to an exit code of `137` this would indicate that there is an out of memory issue: - -```console -[62/149eb0] NOTE: Process `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) -- Execution is retried (1) -Error executing process > 'NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)' - -Caused by: - Process `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) - -Command executed: - STAR \ - --genomeDir star \ - --readFilesIn WT_REP1_trimmed.fq.gz \ - --runThreadN 2 \ - --outFileNamePrefix WT_REP1. \ - - -Command exit status: - 137 - -Command output: - (empty) - -Command error: - .command.sh: line 9: 30 Killed STAR --genomeDir star --readFilesIn WT_REP1_trimmed.fq.gz --runThreadN 2 --outFileNamePrefix WT_REP1. -Work dir: - /home/pipelinetest/work/9d/172ca5881234073e8d76f2a19c88fb - -Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` -``` - -#### For beginners - -A first step to bypass this error, you could try to increase the amount of CPUs, memory, and time for the whole pipeline. Therefor you can try to increase the resource for the parameters `--max_cpus`, `--max_memory`, and `--max_time`. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of rnaseq](https://nf-co.re/rnaseq/3.9/parameters) and scroll down to the `show hidden parameter` button to get the default value for `--max_memory`. In this case 128GB, you than can try to run your pipeline again with `--max_memory 200GB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. - -#### Advanced option on process level - -To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). -We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/star/align/main.nf`. -If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). -The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. -The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. -Providing you haven't set any other standard nf-core parameters to **cap** the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `STAR_ALIGN` process failure by creating a custom config file that sets at least 72GB of memory, in this case increased to 100GB. -The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. - -```nextflow -process { - withName: 'NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN' { - memory = 100.GB - } -} -``` - -> **NB:** We specify the full process name i.e. `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN` in the config file because this takes priority over the short name (`STAR_ALIGN`) and allows existing configuration using the full process name to be correctly overridden. -> -> If you get a warning suggesting that the process selector isn't recognised check that the process name has been specified correctly. - -### Updating containers (advanced users) - -The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. - -1. Check the default version used by the pipeline in the module file for [Pangolin](https://github.com/nf-core/viralrecon/blob/a85d5969f9025409e3618d6c280ef15ce417df65/modules/nf-core/software/pangolin/main.nf#L14-L19) -2. Find the latest version of the Biocontainer available on [Quay.io](https://quay.io/repository/biocontainers/pangolin?tag=latest&tab=tags) -3. Create the custom config accordingly: - - - For Docker: +To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. - ```nextflow - process { - withName: PANGOLIN { - container = 'quay.io/biocontainers/pangolin:3.0.5--pyhdfd78af_0' - } - } - ``` +### Custom Containers - - For Singularity: +In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. - ```nextflow - process { - withName: PANGOLIN { - container = 'https://depot.galaxyproject.org/singularity/pangolin:3.0.5--pyhdfd78af_0' - } - } - ``` +To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. - - For Conda: +### Custom Tool Arguments - ```nextflow - process { - withName: PANGOLIN { - conda = 'bioconda::pangolin=3.0.5' - } - } - ``` +A pipeline might not always support every possible argument or option of a particular tool used in pipeline. Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. -> **NB:** If you wish to periodically update individual tool-specific results (e.g. Pangolin) generated by the pipeline then you must ensure to keep the `work/` directory otherwise the `-resume` ability of the pipeline will be compromised and it will restart from scratch. +To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. ### nf-core/configs diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 33cd4f6e..9b34804d 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -2,6 +2,7 @@ // This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. // +import nextflow.Nextflow import org.everit.json.schema.Schema import org.everit.json.schema.loader.SchemaLoader import org.everit.json.schema.ValidationException @@ -83,6 +84,7 @@ class NfcoreSchema { 'stub-run', 'test', 'w', + 'with-apptainer', 'with-charliecloud', 'with-conda', 'with-dag', @@ -177,7 +179,7 @@ class NfcoreSchema { } if (has_error) { - System.exit(1) + Nextflow.error('Exiting!') } } diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 83ded3a4..7674aa79 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -2,6 +2,8 @@ // This file holds several functions specific to the main.nf workflow in the nf-core/rnafusion pipeline // +import nextflow.Nextflow + class WorkflowMain { // @@ -21,7 +23,7 @@ class WorkflowMain { // // Generate help string // - public static String help(workflow, params, log) { + public static String help(workflow, params) { def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" def help_string = '' help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) @@ -34,7 +36,7 @@ class WorkflowMain { // // Generate parameter summary log string // - public static String paramsSummaryLog(workflow, params, log) { + public static String paramsSummaryLog(workflow, params) { def summary_log = '' summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) @@ -49,7 +51,7 @@ class WorkflowMain { public static void initialise(workflow, params, log) { // Print help to screen if required if (params.help) { - log.info help(workflow, params, log) + log.info help(workflow, params) System.exit(0) } @@ -61,7 +63,7 @@ class WorkflowMain { } // Print parameter summary log to screen - log.info paramsSummaryLog(workflow, params, log) + log.info paramsSummaryLog(workflow, params) // Validate workflow parameters via the JSON schema if (params.validate_params) { @@ -81,8 +83,7 @@ class WorkflowMain { // Check input has been provided if (!params.input) { - log.error "Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'" - System.exit(1) + Nextflow.error("Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'") } } // diff --git a/lib/WorkflowRnafusion.groovy b/lib/WorkflowRnafusion.groovy index f31abbf7..9c2e78c1 100755 --- a/lib/WorkflowRnafusion.groovy +++ b/lib/WorkflowRnafusion.groovy @@ -2,6 +2,7 @@ // This file holds several functions specific to the workflow/rnafusion.nf in the nf-core/rnafusion pipeline // +import nextflow.Nextflow import groovy.text.SimpleTemplateEngine class WorkflowRnafusion { @@ -14,8 +15,7 @@ class WorkflowRnafusion { if (!params.fasta) { - log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." - System.exit(1) + Nextflow.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." } } @@ -61,17 +61,19 @@ class WorkflowRnafusion { def description_html = engine.createTemplate(methods_text).make(meta) return description_html - }// + } + + // // Exit pipeline if incorrect --genome key provided // private static void genomeExistsError(params, log) { if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - log.error "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + " Currently, the available genome keys are:\n" + " ${params.genomes.keySet().join(", ")}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - System.exit(1) + Nextflow.error(error_string) } } } diff --git a/main.nf b/main.nf index 8cb0a641..b2c34856 100644 --- a/main.nf +++ b/main.nf @@ -4,7 +4,6 @@ nf-core/rnafusion ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Github : https://github.com/nf-core/rnafusion - Website: https://nf-co.re/rnafusion Slack : https://nfcore.slack.com/channels/rnafusion ---------------------------------------------------------------------------------------- diff --git a/modules.json b/modules.json index d7bc9b18..c8d72c8f 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "76cc4938c1f6ea5c7d83fed1eeffc146787f9543", "installed_by": ["modules"] }, "fastqc": { @@ -17,7 +17,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "f2d63bd5b68925f98f572eed70993d205cc694b7", "installed_by": ["modules"] } } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 695bcdb3..9226705d 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -5,7 +5,7 @@ process SAMPLESHEET_CHECK { conda "conda-forge::python=3.8.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'quay.io/biocontainers/python:3.8.3' }" + 'biocontainers/python:3.8.3' }" input: path samplesheet diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 3df21765..800a6099 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "bioconda::multiqc=1.13" + conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml index 60b546a0..c32657de 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ b/modules/nf-core/custom/dumpsoftwareversions/meta.yml @@ -1,7 +1,9 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: custom_dumpsoftwareversions description: Custom module used to dump software versions within the nf-core pipeline template keywords: - custom + - dump - version tools: - custom: diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 68f66bea..4b604749 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_single' - conda "bioconda::multiqc=1.13" + conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index ebc29b27..f93b5ee5 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,3 +1,4 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: MultiQC description: Aggregate results from bioinformatics analyses across many samples into a single report keywords: @@ -37,7 +38,7 @@ output: description: MultiQC report file pattern: "multiqc_report.html" - data: - type: dir + type: directory description: MultiQC data dir pattern: "multiqc_data" - plots: diff --git a/nextflow.config b/nextflow.config index eba99080..1becd30e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -78,7 +78,11 @@ try { profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } + debug { + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false + } conda { conda.enabled = true docker.enabled = false @@ -86,6 +90,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } mamba { conda.enabled = true @@ -95,14 +100,18 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } docker { docker.enabled = true + docker.registry = 'quay.io' docker.userEmulation = true + conda.enabled = false singularity.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } arm { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' @@ -110,31 +119,49 @@ profiles { singularity { singularity.enabled = true singularity.autoMounts = true + conda.enabled = false docker.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } podman { podman.enabled = true + podman.registry = 'quay.io' + conda.enabled = false docker.enabled = false singularity.enabled = false shifter.enabled = false charliecloud.enabled = false + apptainer.enabled = false } shifter { shifter.enabled = true + conda.enabled = false docker.enabled = false singularity.enabled = false podman.enabled = false charliecloud.enabled = false + apptainer.enabled = false } charliecloud { charliecloud.enabled = true + conda.enabled = false docker.enabled = false singularity.enabled = false podman.enabled = false shifter.enabled = false + apptainer.enabled = false + } + apptainer { + apptainer.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false } gitpod { executor.name = 'local' @@ -193,7 +220,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=22.10.1' - version = '2.2.0dev' + version = '2.3.4' doi = '' } diff --git a/tower.yml b/tower.yml new file mode 100644 index 00000000..787aedfe --- /dev/null +++ b/tower.yml @@ -0,0 +1,5 @@ +reports: + multiqc_report.html: + display: "MultiQC HTML report" + samplesheet.csv: + display: "Auto-created samplesheet with collated metadata and FASTQ paths" From 18673734c6bc5814fc068d5a1392ee61d1e31f94 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 30 Jun 2023 16:15:33 +0000 Subject: [PATCH 02/83] Template update for nf-core/tools version 2.9 --- .github/CONTRIBUTING.md | 1 - .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/workflows/awsfulltest.yml | 11 +- .github/workflows/awstest.yml | 10 +- .github/workflows/ci.yml | 2 +- .gitpod.yml | 5 + CITATIONS.md | 6 + README.md | 6 +- assets/methods_description_template.yml | 12 +- assets/multiqc_config.yml | 4 +- assets/nf-core-rnafusion_logo_light.png | Bin 10989 -> 72629 bytes assets/slackreport.json | 2 +- conf/test_full.config | 2 - docs/usage.md | 6 +- lib/NfcoreSchema.groovy | 530 ------------------------ lib/NfcoreTemplate.groovy | 2 +- lib/WorkflowMain.groovy | 37 -- lib/WorkflowRnafusion.groovy | 45 +- main.nf | 16 + nextflow.config | 52 ++- nextflow_schema.json | 36 +- workflows/rnafusion.nf | 25 +- 22 files changed, 175 insertions(+), 637 deletions(-) delete mode 100755 lib/NfcoreSchema.groovy diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d4b48eae..975df6cd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -116,4 +116,3 @@ To get started: Devcontainer specs: - [DevContainer config](.devcontainer/devcontainer.json) -- [Dockerfile](.devcontainer/Dockerfile) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 41c21167..7755ffb4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -42,7 +42,7 @@ body: attributes: label: System information description: | - * Nextflow version _(eg. 22.10.1)_ + * Nextflow version _(eg. 23.04.0)_ * Hardware _(eg. HPC, Desktop, Cloud)_ * Executor _(eg. slurm, local, awsbatch)_ * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, or Apptainer)_ diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 30a9fbbc..2db9edfa 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Launch workflow via tower - uses: seqeralabs/action-tower-launch@v1 + uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters @@ -22,13 +22,18 @@ jobs: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + revision: ${{ github.sha }} workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/rnafusion/work-${{ github.sha }} parameters: | { + "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-${{ github.sha }}" } - profiles: test_full,aws_tower + profiles: test_full + - uses: actions/upload-artifact@v3 with: name: Tower debug log file - path: tower_action_*.log + path: | + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index be662dd3..5ef7e96c 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -12,18 +12,22 @@ jobs: steps: # Launch workflow using Tower CLI tool action - name: Launch workflow via tower - uses: seqeralabs/action-tower-launch@v1 + uses: seqeralabs/action-tower-launch@v2 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + revision: ${{ github.sha }} workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/rnafusion/work-${{ github.sha }} parameters: | { "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/rnafusion/results-test-${{ github.sha }}" } - profiles: test,aws_tower + profiles: test + - uses: actions/upload-artifact@v3 with: name: Tower debug log file - path: tower_action_*.log + path: | + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff58f38e..a6726dd9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: strategy: matrix: NXF_VER: - - "22.10.1" + - "23.04.0" - "latest-everything" steps: - name: Check out pipeline code diff --git a/.gitpod.yml b/.gitpod.yml index 85d95ecc..25488dcc 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,4 +1,9 @@ image: nfcore/gitpod:latest +tasks: + - name: Update Nextflow and setup pre-commit + command: | + pre-commit install --install-hooks + nextflow self-update vscode: extensions: # based on nf-core.nf-core-extensionpack diff --git a/CITATIONS.md b/CITATIONS.md index b298989b..1d65b743 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,7 +12,10 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. Available online https://www.bioinformatics.babraham.ac.uk/projects/fastqc/. + - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. ## Software packaging/containerisation tools @@ -31,5 +34,8 @@ - [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) + > Merkel, D. (2014). Docker: lightweight linux containers for consistent development and deployment. Linux Journal, 2014(239), 2. doi: 10.5555/2600239.2600241. + - [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) + > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. diff --git a/README.md b/README.md index 7fef3b59..504929dd 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rnafusion/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A522.10.1-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -66,11 +66,11 @@ nextflow run nf-core/rnafusion \ > provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; > see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). -For more details, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters). +For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnafusion/usage) and the [parameter documentation](https://nf-co.re/rnafusion/parameters). ## Pipeline output -To see the the results of a test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page. +To see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnafusion/results) tab on the nf-core website pipeline page. For more details about the output files and reports, please refer to the [output documentation](https://nf-co.re/rnafusion/output). diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index 016b3d45..62a8ff4e 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -3,17 +3,21 @@ description: "Suggested text and references to use when describing pipeline usag section_name: "nf-core/rnafusion Methods Description" section_href: "https://github.com/nf-core/rnafusion" plot_type: "html" -## TODO nf-core: Update the HTML below to your prefered methods description, e.g. add publication citation for this pipeline +## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline ## You inject any metadata in the Nextflow '${workflow}' object data: |

Methods

-

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

+

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

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

${workflow.commandLine}
+

${tool_citations}

References

    -
  • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. https://doi.org/10.1038/nbt.3820
  • -
  • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. https://doi.org/10.1038/s41587-020-0439-x
  • +
  • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. doi: 10.1038/nbt.3820
  • +
  • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. doi: 10.1038/s41587-020-0439-x
  • +
  • Grüning, B., Dale, R., Sjödin, A., Chapman, B. A., Rowe, J., Tomkins-Tinch, C. H., Valieris, R., Köster, J., & Bioconda Team. (2018). Bioconda: sustainable and comprehensive software distribution for the life sciences. Nature Methods, 15(7), 475–476. doi: 10.1038/s41592-018-0046-7
  • +
  • da Veiga Leprevost, F., Grüning, B. A., Alves Aflitos, S., Röst, H. L., Uszkoreit, J., Barsnes, H., Vaudel, M., Moreno, P., Gatto, L., Weber, J., Bai, M., Jimenez, R. C., Sachsenberg, T., Pfeuffer, J., Vera Alvarez, R., Griss, J., Nesvizhskii, A. I., & Perez-Riverol, Y. (2017). BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics (Oxford, England), 33(16), 2580–2582. doi: 10.1093/bioinformatics/btx192
  • + ${tool_bibliography}
Notes:
diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 5c8a20b2..d8d63229 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnafusion + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-rnafusion-methods-description": order: -1000 diff --git a/assets/nf-core-rnafusion_logo_light.png b/assets/nf-core-rnafusion_logo_light.png index 55f385411694bc192b1d6cf172a0c7defcd49d1a..5609a199d523605d536b8c5bb0aae654af1c4a57 100644 GIT binary patch literal 72629 zcmeEt`9IX_`~RRQS?ZKSWhn*~p=96c5GGq9OZHNfecuPCQz(&w!1jG0qM))u18{N;szxKLnntC7*Z0~7*=;B1!jv^4p5Gb_^hQ29NgTYTSd@O|5 zS3HI44fR<@BwC_WweNAg^K`t?ay|Ua^`zuS;o*5X;p5j0nLR_3TdTw-*C$<<{Vk$; z9`%au>-b1%=CCl=x~!Jp!Br{RFpzjKp!3X+Tb;*QRKss@Kb){h^c+@seV?p-3zMBT zv9)Zlu({<`v3Pc z_~QTk@G~L)&kz6ShyTBGp!b^mFYH1%8g&}PE+NMRdy{Rgwkaa9QvrRQY2HJz)6`6H z9;J$!8p?T$p0J;N*Ye!J#ykH8M)iUCxVX5E!@pK|Rzc1t45Gxe-2E^GvsRWhY(8G+ zqQw!LH!;zIl^)J$8$X^IcCItbD!;xEnF(K*M&+X@JSfW~(%%?AjAD}I{FvT)!b;+< zT`3RVvHyDV#tr{F?pFSzX|tN{P8k1QHN6RI-9sVD@-lUEm%l0Eg`Uqb{CpIznVgoC zqUmmd=@Irb{U+;BnnF@S4JpEd=f8=bxA|}L4A?vsm9JMY?xEj%PSrz{(B9T6zCrD{ z5aNCa{cB^cli-wq*o{Dpv7Lu_ua|VKlQa68K&C3~Q72#9XybNMzba}b4=Acza~8q2n+%iDoFDn0jDk39X?^7A)!^mJ;E z5ekGVYdquWg)k>J@LX5^<&$Ub>jptvS20#izP!}h(}bdq;~{4o<`Z~-?Z6?eBvmOx zsE#!^me;!Al9p_BB9-oh+Bc@3zYqDCn3hx{MhJ+VI+>dJOaT*E;koA-_dUK}Uzf&# zH;{fF7_10)<{MQM8t=)+Bc#9Hzz?%a`@_R0){SISt$Kn@K8L}>h6mZ|Sq!BZKB@H20kftU}^PiE` z)c*Xdd@3S@t0+sw_uO~aLtzgUG2d;xQ1Q*1H#0qHdV%)wP1#8svyWz%C}A74L_x?B3pf9H&Y@2X=|G$}7iYO?E5Lr+QZ zunjfr@njOx!!AI9VRd9th^kl#?3g$t5Dxfn?H4g>K($Nt+fHaOY#hv@QlJIXl)td!4Cw33#odkl6Y zV>S|OhL=y33;S(CMLA9S@}2)++OhBFrXf0zRg_T_+T~HTPwd7xJV6cPBJX{fB~&hK zs$Fc?B(tfBkrDJu$X3Q1{1zTNRk(@T;z!+JtsYJ#VQFEI95Bp+1d)p+`Gk3TG-5Wg zkhB!>_0%li8!7wS)(5l@KDF!}dm%NoRf{a39g|I_D;7#><0*1`M%3kp01AB_Dq!Zg z8ht}kcgMfVhs)|`f(tl+ixNr3KYnoDKRVH}!H24qCWtT&%xd}zW+opB3MoDNJ0-8f zNvx7d#yy3T+j3B!o%L;!;b>EGDQXB~+h}0EX^k<%)ZBpGVwTz%Bc=Z{6LNVVmQ)Zs z#qHX&f?Rw4S8Pz4H6Vlw2CL`ph1rxV>T3%^&1h1dBkPo8>RjJw|7HE<#P4E!4_OE` zO$@0HI!7pPZx!b@3)8f7f(6Vl`(n8hAxh@*>=H@8QQ)g9oK9SqBFr%3t$}fQ3U0|& zMTUI5{BLzyt1e{`H?CqHGJTzP#T38;zV<;^=nNbG6N-_k!KrUQDx)Z|AC(bG|5a8Z zB*H@M#uON%NKm+sWqkHO`)aB@we3grs9;DMV?Q{%PqLj~`hASTUIF*q`ZO5WR)wVFI`G?Zxevi{$Td5LndKR;aC(U=|9wR~L8w;+zr-%IHsbY> zUgGTk{6DWrVb zYX7qj`>+ae$t5+}$|T_!B3=Erhn`P}k1ai*^PzUqmU{4eDXuat%oMLHRxej$e~5m@ z@ADVp?D3O)y6!#xyXd$s{yrf~zYM$Yrd~^{xM%^*VgG&MleV6Y&|SUNwG!INi~rl; z<-XXdqpn!99)UghSN}nCVm|NOx&~&TmiGceJ?{6R>laTmSZ>pxJbelcMsk4R0F=Ar(?q*%!}BhZw%+9K`8y{Yh!MT%%c;Bib&k(wxLRjmW=N{ro zoje;XgQ^~##P@&C)S#ViS*=Lu%Jg6vf7wA7B1zehn!53h9Ut=hiFVdZ2A1)BWO+Or zT}sR*gJqqhOx-8b1SCR0`&Ue?BhO8gDxoY*R=fY z+Cyn|_k)xr7Y`wB{C-T)JdQ-^IL_#4Kt|xti;{O2Uif`>)vlM+z~WAes&vp2#~e;> zaP#^zhn)Ghwj{nES?XIu)mFnEPiGi7&MHYgMRFdBqLYyRcM0|3NrSwRzt{zDC$Q16 z*lJ*$9KIG@s!K*lv(_p8gm-n5bjuuJKPNIbLluNw9-=Anc+g>>{ftA1)Liqyomg7G z0lZGlRAqUVOzOE5hF~nSdqkDH#ahTn%b<|fSG~?U$lf?xD}R^!j=>M6H8HyWF6y2} zPGPZ%iKNdTp7uW4JWgAQE8vm;X_WJc)Enn#$({*pabQ-s4krlc*`UTUP?m@IrR(4uk6XT&bDN%A5aA~}3fQZ}+Rd6c3 z*IAG-N{$P(j4Q>Srfr2tpV8=0h{!#~3-AoOv!u9tWom_0YBxR+7|^?x3!H1(U)HeMcJvM;GiZDK%TC8~?<`}ApK9*l&Oz?(AV;afU?!7R7^1E3 zn(zjAZ>L6+)k_BZ;z(Js8zvb4U#rVK@}KTN_B?4j^DOxi6XO26e;wx5>Meq@OeH16 zPKhP&D9lsS_dDnqJvA_TPayL?T-&Eo4MaN$Vsh~LOFAw$sP98vj^)e3erB(Ix)0Ed zcRcmT-^mAK97kIoOzJos^3BBIn=oowuyWRsVNp-Q8QI%4?47^vYmBj55kB(7-5G-Jw=*jed)*MV}zlKa?!7quxNI9Dqv5~0*qxF{ z-|ays&_rj1kTx$F^uK@^zBGGr$N8@D5U_4!fjHEh%d}?#HzMqS1VBYf&^KYut?s3z z#x(Dl-G0}fkFA#VYCT#)Cajcq(Xx9}P9Gs}$ynv!cB`zU=s>7GEmrr*<+Gsc;!_6q z1=Fl1&esa#1l?YLx5t#zFs9X%$7g7LW1T&4gw?plYc~G0M)WlGL4fi~%|d=l{ONR0 z(ExtJ#m(uPIko8AUgyCi5<6xC?H?P${GQ>p{S!2bzAysv+#gde=;uWi-SN!d&Z0cl z=Vxa<6L=w~xspnfYZmT}S`g$EU~=c)X2)i+nZgjfLi{{7BR9A9V@M?IiAzae66wR{ zbVBUFuw%J$iY49n2)JM4(tQT$^3x(BBAJp1iSJ3%-4{`4VM1nRNn{A0Wy;eaWAc95 zmX5rTQxA~AmcS{swE)2-o_n~AHzPLsJI(%{&@RtXp}uWD?G!-#W|yZ}HlXQ(*l93tqTy}~zd~*$CAgPi|Hx9G?WY5}M z02i&|#Gzt|tMhtL2iunNy9`lKjcFtdl5U(c0=}qQSucG4Onn{mfpPuC~ zUODq^;@FC~c)^rubE~#vvhN#etKRV16JtlmZIYdM@X)Bpn0CtGAJ@B}v82Whya624 zAWNK=gJR5mxMhoFA9d`R9<}|+y@96bmehO5?J{6J#mA%^uw=C3g0&=Yhgqk{lD6Pl zA2MNCrS_F=zGQJRW^*O@TbhT;+S9Ov8I?CaYg*B%^XJm?+K0UD#yYZ6KNnk=2?@=p zc=mdfEVeY#XB$fMFMFYgxxJ-=GENxkH(mxUP$i=}qjnpYz~jsE$`XWx{Ko z{su~~zYEKQH!jQXa{LphLJz|!xE7Bz&XW0HhkW@%MrHfMT?G}tx!TNXzI;CFJ5KS| z+d?rqica4@b;u}fj(?1w;vxQs=2i$^nPv}O^2q1a?fY1*LTE(|m4YKGJh`lI0QgB5 zLd7Q`gSl>EmtO3M%k!8F{Q_tbt)Q?GgUEKEQ{K}&yDmX?P&-6cwO7Pf5_I02N$U;D z^>}L)h~66K!L}xBeQR1XE4$^_To%#xacxYw<_$IFVFHr~HRaRStq6wUxxh^9K{nwv zGSbBg62eHHrLdO9f=R$peChd;#blkTAnf=uz@z{+E z09mH;dkVd2@B;WHFHWdCk-9TsY`B4HF0mG@Y0w_n%lfxep=Py_`>pF8HAic zI5>Dzt5K|fzC3L9WK7<5F*_$RAK>TKRTAWIyYol#>f`FxkO*AF7vCO4Eh?p$q_x59cLmsMlbT+}V zaI|PtAk*V&lNx5bTV?I&R}u~D-glvDnrJQ!d9;*d={1AV_H|(ab9o^1DGx zEg*8wH=cWZ&jMWl(Bb3=VVJ2CsbSv&R{t)jDfS@mUP+~{)vZwNT@_+ChG}txxpgN5 zoEUkoKQHx6+acPT(tX;P1!#WopOG#Ay=mGdgRh0xa7Yzn`F)du8^WH4JELXyeXy9XZNETOysflQOlCGBF*;iJnGrL6%1H`;Ol5>#tPMvU^qdFg6f+ zJ15{3Uw%mDwl9BEHY@WzC}z+7&<^JkfyR=ThRTwkPyL*}H=xoj`;$p= zzvcr(!zV$+TpgsJOE5~&Iu_a!B5G-Szdsm3JB-9Fv?8G!dg;0Im|<{;?oNIT>Mw_u zc)4N9LGY&l#N!Pr@+CYtT`7<%?rS-11^B9A3X|D zz`k>awRwQ!@Zpjy&@Rq`BKE}8fF_hR1+je_VFF#Pw4WYkP`_+9>`NqEb*gHg1zKK# z9$UEbB;f-%d{2K8i4zlOMLs6c2Alex9lj=y7xD?ln8j|GV)T%Ht{_O8$oT_~^dpxb zh6WP}2HLBBFTy$k4vuWXZp^LOJN}+>so%B{$y?m^&t!i3t`;ZptDkukl%4!I;I-4amD{4_C|db zZO)L6QpS)3z?ueRT_Op~KDooYukNekjPxi;Afr7!vZ@W`8FH7KQEehTFy}6Xhdg}Bj%BxLhz^5<=~ zrJ&XZ1!n?b)vw=MrncjT`pUz!c7_Mm_2vn-!H_(%@uWNm`l$j4BYD3>1G>f&!KDEh zuXthGF+96Nj(Oc46AUNoKh0wc3yq*^&k*k3OQ%^>h~DYB_{L#K11?8(IF=tl4VlX` zMOG$&kXWFZlMd!&o2S^Ck@w$&+a4-RQxde8 zhGZVKLiQTS?|R%5$A%c8!MMTUp3#~rR4ufb%a_T=gv~&9CX$k42Q1}xh5@QxJ5-Se zO<11i9!(6?i7+79&@ktMc#3qHQhSn3jY# zn()HALZ!onAgu|0NiBT3VTe(OOFYa_MqYyO+Igr4F>MH!VT0Sdb_l2_5AA)BkRplz zY67NS#Pi%uH)8<~6fiX}J=utEmR9nJ$b(Slx}(J%bj-eu-&-8ZJ$G2ML6xQA zAn$*S1b*Nrux5H7vK9w{fGcQ-XFC?hb{WqE`jYR|FDtK<7QdrH5269ZQVSZR5JsC% zYD*y4oDl33NA7(pbp}7Lf=ANz3oMdIKMMhB_~RphsVuLXpoz@ncSX`BrMlA2&3=Le zr=R#GVf5O_Xw@XE`ka;gE+ojMDkPy4EYh2}2^PujSTtg^Dwjxl`x8^S*#Bo-a)~MA z>X3;%V(y9P{#itTa%OHjdaY7hm6%u0FA6rueZa!(z z55fR4_!W(|Y)7QOjkW(ASX(RZ05^mIM!wMa#KRYB6NL2nLt0$|L~%@$H13UkWcF=r z`R6Sb*U{lvTj&`WWK&2m$Hbo+Hj_uVHq@qrle~7EG{CIF^po4H9ib5MAw#`nF)#2a zskzw?mkZ`ZT3m&w({4j*Y3f&}v`ym3{rX>ST8FkF4wX+EYy#6Da?BGl^l2ksF*uF_ zSf~FIiseqVB)Xk7I-U)Z3xPLz)#r(2_XdOp+Q|V>M&R-JqC5!o-U^;CyNQJ96Fkol z0ui+IH8F;9L=Cclw!91!P9v0{6Ux$3o=Kw61;|qUDTx1^F2F78u$?LlqwQc#!YOyj z3wao0qG>yrwC#IMe%(Q5{p2e7gCJtkB>*DP;%-TMG&e^bSEfYxsr6E4u8>&@`vA)k zxdcFVEn&Lu2qsQM&ZGW+Xv1=NzHkVxy8(U~=QJ_fFaS@1l%flfx{Z7aNx5?ikptdu z{Iz(pIxZe5Lz~Z)10m7UbOc0FEs_(8Gq;xm5{Y)7VO{DbvU5p+_xE>uE!9gj!Iaau z%TFIXWBQcl8QS$m&d-|+{G1^WoC~bS1nb3WC$J$>;x_+XN(!O`AFjVa!rEXG5`K;b zLkucjdLoFq=2sw)uk#>uh1rhcpfy5-0i{s0rF|25=m!O-h2=Vit8$brH`j`EeQw`? zL6`I+b)0m}!FGYHzOt7qDQX zIS6n~695KoovaVSl!6c;GgU4mm$Y?s0f=D8&_)T~62QOo>)(U|a=<8| zmh<}3Vo5buv9oOvSK7;t4{f@qTbfzW%O{eaBbhLPRl$D5)gGw(des^iu6^*W01VD= zV`SCyCXV!F^g(CP^s5eD;YpQ(DVV+nE2t1WsC?LjMo#~>30v%zN7F=bEEDaTetXht zD1o#E_J1y^GsUSdbxb#c*pR9T1iLgE)cIhl2K;)5od|btFs`W=y+@_Ni2Go$G z@Q{h=CgX5+t#?(wO8mjy&(d?s1W;^(en=qu=JwRZH31Ya4A+#T-}62FOj(4Ize6K}@W6YZr^?Dem#2jOqCXeRmww! zGoXHbb(q>X%pi-d^xzQ?UExb;e0Y9E7+$IvUKF2wG*%JQ^{QuCsPZgsEN-9sivbU` z^o-vqspl3owq}(i0*$Rkr}*|_c^%3<0OR+;sp0(+>IjV)o+Gz$AOr8Yi18q}9&GBb zhCVk~4W$D)%R_z?rKpk>Y~a!^-}tp}xLZErW@WFlQsU52v7F)kHR6QLkLPa`e7PWu zP*($;n`-Gse6jdZF{fFHdOy&oao;`%FPORU1nYRZVCpQF<}Y*}i+P1BV@o7}St8x_r>2-9wNP;M8 zcD9UX^E6p$%+jaBD+&%Za`9O#c7)A0(g;|qKb}NcWL6&jTBlfN|LX0O_N>=8LS}~s zEG>-LxD6U{;Q6zLS7gq*oU)Xj)4UHIuOt8#v3%G9OgVIN1CN5DR`a*hn4WcMhgXDB zET3mhL~RFhA}g0OW>3rX=Z(1R8A>B*u+jHze?P<-rw@NK&kIl&y4o0 z%LA25?zFbbb0q!k(@9RF=!8@GnzM3FN?D7!<#~RA`YxsQ0HN@LgA74Kd!kPf;JS7( z{bOMTc9-*QcbLo2OA#@Kh`ezN@SyqA0S*o(*?$tUfu^W(7FFBZ2>=wKiV0x*H62-`5Fclu*L zA~Ipi-Mq2=6WV6m{YiUEZ;SypCJhiu0!L}LK>g?tkyI=$n*VCQQ_2pQKnKvZ`dcf( zW!^7Wh9_W1bPC5%$)`mLLn%YIqI6mGFsa$VK&*8n>!rELxi1ZUF(i)7X}Hj`zyj*c{HII61u=Y<{rl8{jrhqkAEU5q=%DQdXOIh0xDvYHV8Foh+13dBI$3Yd4~3b%RKPN&QF6obt$IcIBy*HauFFq|vp$<%f`KJ5a8XFyi<8}qXRuV}*ahZQ{g zB#I4Eenr^N1*2yg6?F<4vjkE^Y?n-RvKCWFXJJauev8uSfw0=yUMsh4+Z)tnp0TtN zhyM5PYvE0}LBHz<(y1Rt%#K}6GXFh~JA5SnU z(4kC|If7CaB`fZtoKX}kjSw>H4J{xGWQ8v&vsvc129b3({jj$U9dAK)8^_krX6J!# zIxW_rTP7Mp)wT=zd62oUF0=NxDXnf+`wUUv71&SpDi__ySdKB&|8%(&Ba<$!0N(do?Y0_U~$B}&=QlWP~%Hr~FH$qctY?fm)58_koMPp*h( zJn3j+J$KN@k#?RE6iF6U1l#d{Cx%pb1cTHP~un?rQDjRQ5zSi@)HkbH|YsJFE} z%IdEucy<51w_zb#xgMV1E)d6-W~&UlNK=dTyp9)j12D5bqpWdPHZl%RmduPR=4A;e0bB0cAG9A(?*V0)a!t%S*Pumi8vLLfTp)urZ-phYc`kn znQgB;!M50G<(_T&5zyFZTCoXVP2ukAo;;Y=wPf?8DSysHM5M?H_ zM?Wme+|<<6)Qt}@hB3?{hFEjUbOat=K2*|1U#4c`%Hy{-#+zE$7d#W!Jx0&BJ4!lA zfa!-QG4}*ZK9e$>O|?5TBlv}c?B5%;0m^F+?`B+!rxzE*;;)*`YcRhV4_Pc=nV4M|q$8`7S9o({=o;ipR}!KWvPa>3ogeEH1k6m9Ibd z*&c6fMz6k4v9uNlNMFG7E4_Rd&GH2dKT9!=t9!6PxVA|wDCi6ghLEN0zV&88OHD1q zXW-+DVY*u(O|nr_*!s|ws&Z<�ev`Q}H7y#R1zKkC5n?0_OP7^FqWWeXhX0t0pNK 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

)bNtXB<>| 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𝔷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 diff --git a/assets/slackreport.json b/assets/slackreport.json index 043d02f2..1b3cba01 100644 --- a/assets/slackreport.json +++ b/assets/slackreport.json @@ -3,7 +3,7 @@ { "fallback": "Plain-text summary of the attachment.", "color": "<% if (success) { %>good<% } else { %>danger<%} %>", - "author_name": "sanger-tol/readmapping v${version} - ${runName}", + "author_name": "nf-core/rnafusion v${version} - ${runName}", "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", "fields": [ diff --git a/conf/test_full.config b/conf/test_full.config index 54ef4afd..e2522d72 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,8 +10,6 @@ ---------------------------------------------------------------------------------------- */ -cleanup = true - params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' diff --git a/docs/usage.md b/docs/usage.md index 06b9bc29..bcf9dd8d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -57,7 +57,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/rnafusion --input samplesheet.csv --outdir --genome GRCh37 -profile docker +nextflow run nf-core/rnafusion --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -76,7 +76,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. > ⚠️ Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -> The above pipeline run specified with a params file in yaml format: + +The above pipeline run specified with a params file in yaml format: ```bash nextflow run nf-core/rnafusion -profile docker -params-file params.yaml @@ -88,7 +89,6 @@ with `params.yaml` containing: input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' -input: 'data' <...> ``` diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy deleted file mode 100755 index 9b34804d..00000000 --- a/lib/NfcoreSchema.groovy +++ /dev/null @@ -1,530 +0,0 @@ -// -// This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. -// - -import nextflow.Nextflow -import org.everit.json.schema.Schema -import org.everit.json.schema.loader.SchemaLoader -import org.everit.json.schema.ValidationException -import org.json.JSONObject -import org.json.JSONTokener -import org.json.JSONArray -import groovy.json.JsonSlurper -import groovy.json.JsonBuilder - -class NfcoreSchema { - - // - // Resolve Schema path relative to main workflow directory - // - public static String getSchemaPath(workflow, schema_filename='nextflow_schema.json') { - return "${workflow.projectDir}/${schema_filename}" - } - - // - // Function to loop over all parameters defined in schema and check - // whether the given parameters adhere to the specifications - // - /* groovylint-disable-next-line UnusedPrivateMethodParameter */ - public static void validateParameters(workflow, params, log, schema_filename='nextflow_schema.json') { - def has_error = false - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// - // Check for nextflow core params and unexpected params - def json = new File(getSchemaPath(workflow, schema_filename=schema_filename)).text - def Map schemaParams = (Map) new JsonSlurper().parseText(json).get('definitions') - def nf_params = [ - // Options for base `nextflow` command - 'bg', - 'c', - 'C', - 'config', - 'd', - 'D', - 'dockerize', - 'h', - 'log', - 'q', - 'quiet', - 'syslog', - 'v', - - // Options for `nextflow run` command - 'ansi', - 'ansi-log', - 'bg', - 'bucket-dir', - 'c', - 'cache', - 'config', - 'dsl2', - 'dump-channels', - 'dump-hashes', - 'E', - 'entry', - 'latest', - 'lib', - 'main-script', - 'N', - 'name', - 'offline', - 'params-file', - 'pi', - 'plugins', - 'poll-interval', - 'pool-size', - 'profile', - 'ps', - 'qs', - 'queue-size', - 'r', - 'resume', - 'revision', - 'stdin', - 'stub', - 'stub-run', - 'test', - 'w', - 'with-apptainer', - 'with-charliecloud', - 'with-conda', - 'with-dag', - 'with-docker', - 'with-mpi', - 'with-notification', - 'with-podman', - 'with-report', - 'with-singularity', - 'with-timeline', - 'with-tower', - 'with-trace', - 'with-weblog', - 'without-docker', - 'without-podman', - 'work-dir' - ] - def unexpectedParams = [] - - // Collect expected parameters from the schema - def expectedParams = [] - def enums = [:] - for (group in schemaParams) { - for (p in group.value['properties']) { - expectedParams.push(p.key) - if (group.value['properties'][p.key].containsKey('enum')) { - enums[p.key] = group.value['properties'][p.key]['enum'] - } - } - } - - for (specifiedParam in params.keySet()) { - // nextflow params - if (nf_params.contains(specifiedParam)) { - log.error "ERROR: You used a core Nextflow option with two hyphens: '--${specifiedParam}'. Please resubmit with '-${specifiedParam}'" - has_error = true - } - // unexpected params - def params_ignore = params.schema_ignore_params.split(',') + 'schema_ignore_params' - def expectedParamsLowerCase = expectedParams.collect{ it.replace("-", "").toLowerCase() } - def specifiedParamLowerCase = specifiedParam.replace("-", "").toLowerCase() - def isCamelCaseBug = (specifiedParam.contains("-") && !expectedParams.contains(specifiedParam) && expectedParamsLowerCase.contains(specifiedParamLowerCase)) - if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam) && !isCamelCaseBug) { - // Temporarily remove camelCase/camel-case params #1035 - def unexpectedParamsLowerCase = unexpectedParams.collect{ it.replace("-", "").toLowerCase()} - if (!unexpectedParamsLowerCase.contains(specifiedParamLowerCase)){ - unexpectedParams.push(specifiedParam) - } - } - } - - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// - // Validate parameters against the schema - InputStream input_stream = new File(getSchemaPath(workflow, schema_filename=schema_filename)).newInputStream() - JSONObject raw_schema = new JSONObject(new JSONTokener(input_stream)) - - // Remove anything that's in params.schema_ignore_params - raw_schema = removeIgnoredParams(raw_schema, params) - - Schema schema = SchemaLoader.load(raw_schema) - - // Clean the parameters - def cleanedParams = cleanParameters(params) - - // Convert to JSONObject - def jsonParams = new JsonBuilder(cleanedParams) - JSONObject params_json = new JSONObject(jsonParams.toString()) - - // Validate - try { - schema.validate(params_json) - } catch (ValidationException e) { - println '' - log.error 'ERROR: Validation of pipeline parameters failed!' - JSONObject exceptionJSON = e.toJSON() - printExceptions(exceptionJSON, params_json, log, enums) - println '' - has_error = true - } - - // Check for unexpected parameters - if (unexpectedParams.size() > 0) { - Map colors = NfcoreTemplate.logColours(params.monochrome_logs) - println '' - def warn_msg = 'Found unexpected parameters:' - for (unexpectedParam in unexpectedParams) { - warn_msg = warn_msg + "\n* --${unexpectedParam}: ${params[unexpectedParam].toString()}" - } - log.warn warn_msg - log.info "- ${colors.dim}Ignore this warning: params.schema_ignore_params = \"${unexpectedParams.join(',')}\" ${colors.reset}" - println '' - } - - if (has_error) { - Nextflow.error('Exiting!') - } - } - - // - // Beautify parameters for --help - // - public static String paramsHelp(workflow, params, command, schema_filename='nextflow_schema.json') { - Map colors = NfcoreTemplate.logColours(params.monochrome_logs) - Integer num_hidden = 0 - String output = '' - output += 'Typical pipeline command:\n\n' - output += " ${colors.cyan}${command}${colors.reset}\n\n" - Map params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) - Integer max_chars = paramsMaxChars(params_map) + 1 - Integer desc_indent = max_chars + 14 - Integer dec_linewidth = 160 - desc_indent - for (group in params_map.keySet()) { - Integer num_params = 0 - String group_output = colors.underlined + colors.bold + group + colors.reset + '\n' - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (group_params.get(param).hidden && !params.show_hidden_params) { - num_hidden += 1 - continue; - } - def type = '[' + group_params.get(param).type + ']' - def description = group_params.get(param).description - def defaultValue = group_params.get(param).default != null ? " [default: " + group_params.get(param).default.toString() + "]" : '' - def description_default = description + colors.dim + defaultValue + colors.reset - // Wrap long description texts - // Loosely based on https://dzone.com/articles/groovy-plain-text-word-wrap - if (description_default.length() > dec_linewidth){ - List olines = [] - String oline = "" // " " * indent - description_default.split(" ").each() { wrd -> - if ((oline.size() + wrd.size()) <= dec_linewidth) { - oline += wrd + " " - } else { - olines += oline - oline = wrd + " " - } - } - olines += oline - description_default = olines.join("\n" + " " * desc_indent) - } - group_output += " --" + param.padRight(max_chars) + colors.dim + type.padRight(10) + colors.reset + description_default + '\n' - num_params += 1 - } - group_output += '\n' - if (num_params > 0){ - output += group_output - } - } - if (num_hidden > 0){ - output += colors.dim + "!! Hiding $num_hidden params, use --show_hidden_params to show them !!\n" + colors.reset - } - output += NfcoreTemplate.dashedLine(params.monochrome_logs) - return output - } - - // - // Groovy Map summarising parameters/workflow options used by the pipeline - // - public static LinkedHashMap paramsSummaryMap(workflow, params, schema_filename='nextflow_schema.json') { - // Get a selection of core Nextflow workflow options - def Map workflow_summary = [:] - if (workflow.revision) { - workflow_summary['revision'] = workflow.revision - } - workflow_summary['runName'] = workflow.runName - if (workflow.containerEngine) { - workflow_summary['containerEngine'] = workflow.containerEngine - } - if (workflow.container) { - workflow_summary['container'] = workflow.container - } - workflow_summary['launchDir'] = workflow.launchDir - workflow_summary['workDir'] = workflow.workDir - workflow_summary['projectDir'] = workflow.projectDir - workflow_summary['userName'] = workflow.userName - workflow_summary['profile'] = workflow.profile - workflow_summary['configFiles'] = workflow.configFiles.join(', ') - - // Get pipeline parameters defined in JSON Schema - def Map params_summary = [:] - def params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) - for (group in params_map.keySet()) { - def sub_params = new LinkedHashMap() - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (params.containsKey(param)) { - def params_value = params.get(param) - def schema_value = group_params.get(param).default - def param_type = group_params.get(param).type - if (schema_value != null) { - if (param_type == 'string') { - if (schema_value.contains('$projectDir') || schema_value.contains('${projectDir}')) { - def sub_string = schema_value.replace('\$projectDir', '') - sub_string = sub_string.replace('\${projectDir}', '') - if (params_value.contains(sub_string)) { - schema_value = params_value - } - } - if (schema_value.contains('$params.outdir') || schema_value.contains('${params.outdir}')) { - def sub_string = schema_value.replace('\$params.outdir', '') - sub_string = sub_string.replace('\${params.outdir}', '') - if ("${params.outdir}${sub_string}" == params_value) { - schema_value = params_value - } - } - } - } - - // We have a default in the schema, and this isn't it - if (schema_value != null && params_value != schema_value) { - sub_params.put(param, params_value) - } - // No default in the schema, and this isn't empty - else if (schema_value == null && params_value != "" && params_value != null && params_value != false) { - sub_params.put(param, params_value) - } - } - } - params_summary.put(group, sub_params) - } - return [ 'Core Nextflow options' : workflow_summary ] << params_summary - } - - // - // Beautify parameters for summary and return as string - // - public static String paramsSummaryLog(workflow, params) { - Map colors = NfcoreTemplate.logColours(params.monochrome_logs) - String output = '' - def params_map = paramsSummaryMap(workflow, params) - def max_chars = paramsMaxChars(params_map) - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - if (group_params) { - output += colors.bold + group + colors.reset + '\n' - for (param in group_params.keySet()) { - output += " " + colors.blue + param.padRight(max_chars) + ": " + colors.green + group_params.get(param) + colors.reset + '\n' - } - output += '\n' - } - } - output += "!! Only displaying parameters that differ from the pipeline defaults !!\n" - output += NfcoreTemplate.dashedLine(params.monochrome_logs) - return output - } - - // - // Loop over nested exceptions and print the causingException - // - private static void printExceptions(ex_json, params_json, log, enums, limit=5) { - def causingExceptions = ex_json['causingExceptions'] - if (causingExceptions.length() == 0) { - def m = ex_json['message'] =~ /required key \[([^\]]+)\] not found/ - // Missing required param - if (m.matches()) { - log.error "* Missing required parameter: --${m[0][1]}" - } - // Other base-level error - else if (ex_json['pointerToViolation'] == '#') { - log.error "* ${ex_json['message']}" - } - // Error with specific param - else { - def param = ex_json['pointerToViolation'] - ~/^#\// - def param_val = params_json[param].toString() - if (enums.containsKey(param)) { - def error_msg = "* --${param}: '${param_val}' is not a valid choice (Available choices" - if (enums[param].size() > limit) { - log.error "${error_msg} (${limit} of ${enums[param].size()}): ${enums[param][0..limit-1].join(', ')}, ... )" - } else { - log.error "${error_msg}: ${enums[param].join(', ')})" - } - } else { - log.error "* --${param}: ${ex_json['message']} (${param_val})" - } - } - } - for (ex in causingExceptions) { - printExceptions(ex, params_json, log, enums) - } - } - - // - // Remove an element from a JSONArray - // - private static JSONArray removeElement(json_array, element) { - def list = [] - int len = json_array.length() - for (int i=0;i - if(raw_schema.keySet().contains('definitions')){ - raw_schema.definitions.each { definition -> - for (key in definition.keySet()){ - if (definition[key].get("properties").keySet().contains(ignore_param)){ - // Remove the param to ignore - definition[key].get("properties").remove(ignore_param) - // If the param was required, change this - if (definition[key].has("required")) { - def cleaned_required = removeElement(definition[key].required, ignore_param) - definition[key].put("required", cleaned_required) - } - } - } - } - } - if(raw_schema.keySet().contains('properties') && raw_schema.get('properties').keySet().contains(ignore_param)) { - raw_schema.get("properties").remove(ignore_param) - } - if(raw_schema.keySet().contains('required') && raw_schema.required.contains(ignore_param)) { - def cleaned_required = removeElement(raw_schema.required, ignore_param) - raw_schema.put("required", cleaned_required) - } - } - return raw_schema - } - - // - // Clean and check parameters relative to Nextflow native classes - // - private static Map cleanParameters(params) { - def new_params = params.getClass().newInstance(params) - for (p in params) { - // remove anything evaluating to false - if (!p['value']) { - new_params.remove(p.key) - } - // Cast MemoryUnit to String - if (p['value'].getClass() == nextflow.util.MemoryUnit) { - new_params.replace(p.key, p['value'].toString()) - } - // Cast Duration to String - if (p['value'].getClass() == nextflow.util.Duration) { - new_params.replace(p.key, p['value'].toString().replaceFirst(/d(?!\S)/, "day")) - } - // Cast LinkedHashMap to String - if (p['value'].getClass() == LinkedHashMap) { - new_params.replace(p.key, p['value'].toString()) - } - } - return new_params - } - - // - // This function tries to read a JSON params file - // - private static LinkedHashMap paramsLoad(String json_schema) { - def params_map = new LinkedHashMap() - try { - params_map = paramsRead(json_schema) - } catch (Exception e) { - println "Could not read parameters settings from JSON. $e" - params_map = new LinkedHashMap() - } - return params_map - } - - // - // Method to actually read in JSON file using Groovy. - // Group (as Key), values are all parameters - // - Parameter1 as Key, Description as Value - // - Parameter2 as Key, Description as Value - // .... - // Group - // - - private static LinkedHashMap paramsRead(String json_schema) throws Exception { - def json = new File(json_schema).text - def Map schema_definitions = (Map) new JsonSlurper().parseText(json).get('definitions') - def Map schema_properties = (Map) new JsonSlurper().parseText(json).get('properties') - /* Tree looks like this in nf-core schema - * definitions <- this is what the first get('definitions') gets us - group 1 - title - description - properties - parameter 1 - type - description - parameter 2 - type - description - group 2 - title - description - properties - parameter 1 - type - description - * properties <- parameters can also be ungrouped, outside of definitions - parameter 1 - type - description - */ - - // Grouped params - def params_map = new LinkedHashMap() - schema_definitions.each { key, val -> - def Map group = schema_definitions."$key".properties // Gets the property object of the group - def title = schema_definitions."$key".title - def sub_params = new LinkedHashMap() - group.each { innerkey, value -> - sub_params.put(innerkey, value) - } - params_map.put(title, sub_params) - } - - // Ungrouped params - def ungrouped_params = new LinkedHashMap() - schema_properties.each { innerkey, value -> - ungrouped_params.put(innerkey, value) - } - params_map.put("Other parameters", ungrouped_params) - - return params_map - } - - // - // Get maximum number of characters across all parameter names - // - private static Integer paramsMaxChars(params_map) { - Integer max_chars = 0 - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (param.size() > max_chars) { - max_chars = param.size() - } - } - } - return max_chars - } -} diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 25a0a74a..408951ae 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -128,7 +128,7 @@ class NfcoreTemplate { def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] def sf = new File("$projectDir/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 7674aa79..a8a3d0dc 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -20,40 +20,11 @@ class WorkflowMain { " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" } - // - // Generate help string - // - public static String help(workflow, params) { - def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" - def help_string = '' - help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) - help_string += NfcoreSchema.paramsHelp(workflow, params, command) - help_string += '\n' + citation(workflow) + '\n' - help_string += NfcoreTemplate.dashedLine(params.monochrome_logs) - return help_string - } - - // - // Generate parameter summary log string - // - public static String paramsSummaryLog(workflow, params) { - def summary_log = '' - summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) - summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) - summary_log += '\n' + citation(workflow) + '\n' - summary_log += NfcoreTemplate.dashedLine(params.monochrome_logs) - return summary_log - } // // Validate parameters and print summary to screen // public static void initialise(workflow, params, log) { - // Print help to screen if required - if (params.help) { - log.info help(workflow, params) - System.exit(0) - } // Print workflow version and exit on --version if (params.version) { @@ -62,14 +33,6 @@ class WorkflowMain { System.exit(0) } - // Print parameter summary log to screen - log.info paramsSummaryLog(workflow, params) - - // Validate workflow parameters via the JSON schema - if (params.validate_params) { - NfcoreSchema.validateParameters(workflow, params, log) - } - // Check that a -profile or Nextflow config has been provided to run the pipeline NfcoreTemplate.checkConfigProvided(workflow, log) diff --git a/lib/WorkflowRnafusion.groovy b/lib/WorkflowRnafusion.groovy index 9c2e78c1..0654f5fc 100755 --- a/lib/WorkflowRnafusion.groovy +++ b/lib/WorkflowRnafusion.groovy @@ -11,6 +11,7 @@ class WorkflowRnafusion { // Check and validate parameters // public static void initialise(params, log) { + genomeExistsError(params, log) @@ -46,15 +47,57 @@ class WorkflowRnafusion { return yaml_file_text } - public static String methodsDescriptionText(run_workflow, mqc_methods_yaml) { + // + // Generate methods description for MultiQC + // + + public static String toolCitationText(params) { + + // TODO Optionally add in-text citation tools to this list. + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", + // Uncomment function in methodsDescriptionText to render in MultiQC report + def citation_text = [ + "Tools used in the workflow included:", + "FastQC (Andrews 2010),", + "MultiQC (Ewels et al. 2016)", + "." + ].join(' ').trim() + + return citation_text + } + + public static String toolBibliographyText(params) { + + // TODO Optionally add bibliographic entries to this list. + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "

  • Author (2023) Pub name, Journal, DOI
  • " : "", + // Uncomment function in methodsDescriptionText to render in MultiQC report + def reference_text = [ + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " + ].join(' ').trim() + + return reference_text + } + + public static String methodsDescriptionText(run_workflow, mqc_methods_yaml, params) { // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = run_workflow.toMap() meta["manifest_map"] = run_workflow.manifest.toMap() + // Pipeline DOI meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " + // Tool references + meta["tool_citations"] = "" + meta["tool_bibliography"] = "" + + // TODO Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! + //meta["tool_citations"] = toolCitationText(params).replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + //meta["tool_bibliography"] = toolBibliographyText(params) + + def methods_text = mqc_methods_yaml.text def engine = new SimpleTemplateEngine() diff --git a/main.nf b/main.nf index b2c34856..af935a03 100644 --- a/main.nf +++ b/main.nf @@ -25,6 +25,22 @@ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +include { validateParameters; paramsHelp } from 'plugin/nf-validation' + +// Print help message if needed +if (params.help) { + def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) + def citation = '\n' + WorkflowMain.citation(workflow) + '\n' + def String command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" + log.info logo + paramsHelp(command) + citation + NfcoreTemplate.dashedLine(params.monochrome_logs) + System.exit(0) +} + +// Validate input parameters +if (params.validate_params) { + validateParameters() +} + WorkflowMain.initialise(workflow, params, log) /* diff --git a/nextflow.config b/nextflow.config index 1becd30e..2c39b442 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,12 +12,12 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = null - - // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false + + // MultiQC options multiqc_config = null multiqc_title = null @@ -27,7 +27,6 @@ params { // Boilerplate options outdir = null - tracedir = "${params.outdir}/pipeline_info" publish_dir_mode = 'copy' email = null email_on_fail = null @@ -36,19 +35,15 @@ params { hook_url = null help = false version = false - validate_params = true - show_hidden_params = false - schema_ignore_params = 'genomes' - // Config options + config_profile_name = null + config_profile_description = null custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_description = null config_profile_contact = null config_profile_url = null - config_profile_name = null - + // Max resource options // Defaults only, expecting to be overwritten @@ -56,6 +51,13 @@ params { max_cpus = 16 max_time = '240.h' + // Schema validation default options + validationFailUnrecognisedParams = false + validationLenientMode = false + validationSchemaIgnoreParams = 'genomes' + validationShowHiddenParams = false + validate_params = true + } // Load base.config by default for all pipelines @@ -75,13 +77,11 @@ try { // } catch (Exception e) { // System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") // } - - profiles { debug { dumpHashes = true process.beforeScript = 'echo $HOSTNAME' - cleanup = false + cleanup = false } conda { conda.enabled = true @@ -104,7 +104,6 @@ profiles { } docker { docker.enabled = true - docker.registry = 'quay.io' docker.userEmulation = true conda.enabled = false singularity.enabled = false @@ -128,7 +127,6 @@ profiles { } podman { podman.enabled = true - podman.registry = 'quay.io' conda.enabled = false docker.enabled = false singularity.enabled = false @@ -172,6 +170,18 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } +// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' + +// Nextflow plugins +plugins { + id 'nf-validation' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} // Load igenomes.config if required if (!params.igenomes_ignore) { @@ -179,8 +189,6 @@ if (!params.igenomes_ignore) { } else { params.genomes = [:] } - - // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -198,19 +206,19 @@ process.shell = ['/bin/bash', '-euo', 'pipefail'] def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" } report { enabled = true - file = "${params.tracedir}/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" } trace { enabled = true - file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" } dag { enabled = true - file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" } manifest { @@ -219,7 +227,7 @@ manifest { homePage = 'https://github.com/nf-core/rnafusion' description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' - nextflowVersion = '!>=22.10.1' + nextflowVersion = '!>=23.04.0' version = '2.3.4' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index 31308425..6a47c09a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -15,9 +15,9 @@ "input": { "type": "string", "format": "file-path", + "exists": true, "mimetype": "text/csv", "pattern": "^\\S+\\.csv$", - "schema": "assets/schema_input.json", "description": "Path to comma-separated file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/rnafusion/usage#samplesheet-input).", "fa_icon": "fas fa-file-csv" @@ -57,6 +57,7 @@ "fasta": { "type": "string", "format": "file-path", + "exists": true, "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", @@ -157,7 +158,7 @@ "description": "Maximum amount of time that can be requested for any single job.", "default": "240.h", "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", + "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } @@ -174,12 +175,14 @@ "type": "boolean", "description": "Display help text.", "fa_icon": "fas fa-question-circle", + "default": false, "hidden": true }, "version": { "type": "boolean", "description": "Display version and exit.", "fa_icon": "fas fa-question-circle", + "default": false, "hidden": true }, "publish_dir_mode": { @@ -203,6 +206,7 @@ "type": "boolean", "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", + "default": false, "hidden": true }, "max_multiqc_email_size": { @@ -217,6 +221,7 @@ "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", + "default": false, "hidden": true }, "hook_url": { @@ -228,6 +233,7 @@ }, "multiqc_config": { "type": "string", + "format": "file-path", "description": "Custom config file to supply to MultiQC.", "fa_icon": "fas fa-cog", "hidden": true @@ -243,13 +249,6 @@ "description": "Custom MultiQC yaml file containing HTML including a methods description.", "fa_icon": "fas fa-cog" }, - "tracedir": { - "type": "string", - "description": "Directory to keep pipeline Nextflow logs and reports.", - "default": "${params.outdir}/pipeline_info", - "fa_icon": "fas fa-cogs", - "hidden": true - }, "validate_params": { "type": "boolean", "description": "Boolean whether to validate parameters against the schema at runtime", @@ -257,12 +256,29 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "show_hidden_params": { + "validationShowHiddenParams": { "type": "boolean", "fa_icon": "far fa-eye-slash", "description": "Show all params when using `--help`", + "default": false, "hidden": true, "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." + }, + "validationFailUnrecognisedParams": { + "type": "boolean", + "fa_icon": "far fa-check-circle", + "description": "Validation of parameters fails when an unrecognised parameter is found.", + "default": false, + "hidden": true, + "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." + }, + "validationLenientMode": { + "type": "boolean", + "fa_icon": "far fa-check-circle", + "description": "Validation of parameters in lenient more.", + "default": false, + "hidden": true, + "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." } } } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 71b63738..1ea5267f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -1,21 +1,19 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - VALIDATE INPUTS + PRINT PARAMS SUMMARY ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) +include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' -// Validate input parameters -WorkflowRnafusion.initialise(params, log) +def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) +def citation = '\n' + WorkflowMain.citation(workflow) + '\n' +def summary_params = paramsSummaryMap(workflow) -// TODO nf-core: Add all file path parameters for the pipeline to the list below -// Check input path parameters to see if they exist -def checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] -for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } +// Print parameter summary log to screen +log.info logo + paramsSummaryLog(workflow) + citation -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } +WorkflowRnafusion.initialise(params, log) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -69,9 +67,12 @@ workflow RNAFUSION { // SUBWORKFLOW: Read in samplesheet, validate and stage input files // INPUT_CHECK ( - ch_input + file(params.input) ) ch_versions = ch_versions.mix(INPUT_CHECK.out.versions) + // TODO: OPTIONAL, you can use nf-validation plugin to create an input channel from the samplesheet with Channel.fromSamplesheet("input") + // See the documentation https://nextflow-io.github.io/nf-validation/samplesheets/fromSamplesheet/ + // ! There is currently no tooling to help you write a sample sheet schema // // MODULE: Run FastQC @@ -91,7 +92,7 @@ workflow RNAFUSION { workflow_summary = WorkflowRnafusion.paramsSummaryMultiqc(workflow, summary_params) ch_workflow_summary = Channel.value(workflow_summary) - methods_description = WorkflowRnafusion.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description) + methods_description = WorkflowRnafusion.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description, params) ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() From 5aa1731651aed47505385f5cb57e343e7da1a269 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:35:50 +0200 Subject: [PATCH 03/83] merging template 2.9 --- nextflow.config | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nextflow.config b/nextflow.config index 3f1432be..69f5b11c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -301,13 +301,8 @@ manifest { homePage = 'https://github.com/nf-core/rnafusion' description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' -<<<<<<< HEAD nextflowVersion = '!>=23.04.0' version = '2.3.4' -======= - nextflowVersion = '!>=22.10.1' - version = '2.3.4' ->>>>>>> dev doi = '' } From 5778ee63371fc52d17e3c70cdaf960f7fdaee97e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:48:20 +0200 Subject: [PATCH 04/83] update modules --- assets/methods_description_template.yml | 5 --- modules.json | 42 +++++++++---------- modules/nf-core/arriba/main.nf | 2 +- modules/nf-core/cat/cat/main.nf | 2 +- modules/nf-core/cat/fastq/main.nf | 2 +- modules/nf-core/cat/fastq/meta.yml | 3 +- .../custom/dumpsoftwareversions/main.nf | 2 +- modules/nf-core/fastp/main.nf | 6 +-- modules/nf-core/fastqc/main.nf | 8 +++- .../nf-core/gatk4/bedtointervallist/main.nf | 14 +++---- .../nf-core/gatk4/bedtointervallist/meta.yml | 7 ++++ .../gatk4/createsequencedictionary/main.nf | 18 ++++---- .../gatk4/createsequencedictionary/meta.yml | 7 ++++ modules/nf-core/kallisto/index/main.nf | 2 +- modules/nf-core/multiqc/main.nf | 6 +-- .../nf-core/picard/collectwgsmetrics/main.nf | 10 ++--- .../nf-core/picard/collectwgsmetrics/meta.yml | 3 +- modules/nf-core/picard/markduplicates/main.nf | 12 +++--- .../nf-core/picard/markduplicates/meta.yml | 11 +++++ modules/nf-core/qualimap/rnaseq/main.nf | 6 +-- modules/nf-core/samtools/faidx/main.nf | 22 ++++++---- modules/nf-core/samtools/faidx/meta.yml | 14 ++++++- modules/nf-core/samtools/index/main.nf | 6 +-- modules/nf-core/samtools/sort/main.nf | 14 +++++-- modules/nf-core/samtools/view/main.nf | 8 ++-- modules/nf-core/samtools/view/meta.yml | 15 ++++--- modules/nf-core/star/align/main.nf | 24 ++++++++--- modules/nf-core/star/align/meta.yml | 8 ++++ modules/nf-core/star/genomegenerate/main.nf | 2 +- modules/nf-core/stringtie/merge/main.nf | 2 +- modules/nf-core/stringtie/stringtie/main.nf | 2 +- 31 files changed, 179 insertions(+), 106 deletions(-) diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index 0789eeb1..80452425 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -3,11 +3,6 @@ description: "Suggested text and references to use when describing pipeline usag section_name: "nf-core/rnafusion Methods Description" section_href: "https://github.com/nf-core/rnafusion" plot_type: "html" -<<<<<<< HEAD -## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline -## You inject any metadata in the Nextflow '${workflow}' object -======= ->>>>>>> dev data: |

    Methods

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

    diff --git a/modules.json b/modules.json index 78b30658..db763f95 100644 --- a/modules.json +++ b/modules.json @@ -7,107 +7,107 @@ "nf-core": { "arriba": { "branch": "master", - "git_sha": "76cc4938c1f6ea5c7d83fed1eeffc146787f9543", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "b6d4d476aee074311c89d82a69c1921bd70c8180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "20a508676f40d0fd3f911ac595af91ec845704c4", + "git_sha": "d497a4868ace3302016ea8ed4b395072d5e833cd", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "bd8092b67b5103bdd52e300f75889442275c3117", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "kallisto/index": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", + "git_sha": "a6e11ac655e744f7ebc724be669dd568ffdc0e80", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "2f88b26e9804b99e98f7cd08e74c3f88288a3358", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "qualimap/rnaseq": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "a0f7be95788366c1923171e358da7d049eb440f9", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", "installed_by": ["modules"] }, "star/align": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "57d75dbac06812c59798a48585032f6e50bb1914", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", "installed_by": ["modules"] }, "stringtie/merge": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] } } diff --git a/modules/nf-core/arriba/main.nf b/modules/nf-core/arriba/main.nf index e4b48be2..a04fe3b7 100644 --- a/modules/nf-core/arriba/main.nf +++ b/modules/nf-core/arriba/main.nf @@ -5,7 +5,7 @@ process ARRIBA { conda "bioconda::arriba=2.3.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/arriba:2.3.0--haa8aa89_0' : - 'quay.io/biocontainers/arriba:2.3.0--haa8aa89_0' }" + 'biocontainers/arriba:2.3.0--haa8aa89_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index 840af4b9..9f062219 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -5,7 +5,7 @@ process CAT_CAT { conda "conda-forge::pigz=2.3.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : - 'quay.io/biocontainers/pigz:2.3.4' }" + 'biocontainers/pigz:2.3.4' }" input: tuple val(meta), path(files_in) diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index 8a0b5600..5021e6fc 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -5,7 +5,7 @@ process CAT_FASTQ { conda "conda-forge::sed=4.7" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'ubuntu:20.04' }" + 'nf-core/ubuntu:20.04' }" input: tuple val(meta), path(reads, stageAs: "input*/*") diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml index c836598e..8a39e309 100644 --- a/modules/nf-core/cat/fastq/meta.yml +++ b/modules/nf-core/cat/fastq/meta.yml @@ -1,6 +1,7 @@ name: cat_fastq description: Concatenates fastq files keywords: + - cat - fastq - concatenate tools: @@ -16,7 +17,7 @@ input: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - reads: - type: list + type: file description: | List of input FastQ files to be concatenated. output: diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 800a6099..ebc87273 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -5,7 +5,7 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 5eeb9b09..831b7f12 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -2,10 +2,10 @@ process FASTP { tag "$meta.id" label 'process_medium' - conda "bioconda::fastp=0.23.2" + conda "bioconda::fastp=0.23.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fastp:0.23.2--h79da9fb_0' : - 'quay.io/biocontainers/fastp:0.23.2--h79da9fb_0' }" + 'https://depot.galaxyproject.org/singularity/fastp:0.23.4--h5f740d0_0' : + 'biocontainers/fastp:0.23.4--h5f740d0_0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 9ae58381..249f9064 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -5,7 +5,7 @@ process FASTQC { conda "bioconda::fastqc=0.11.9" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' : - 'quay.io/biocontainers/fastqc:0.11.9--0' }" + 'biocontainers/fastqc:0.11.9--0' }" input: tuple val(meta), path(reads) @@ -29,7 +29,11 @@ process FASTQC { printf "%s %s\\n" $rename_to | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name done - fastqc $args --threads $task.cpus $renamed_files + + fastqc \\ + $args \\ + --threads $task.cpus \\ + $renamed_files cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 41fab003..a23abd06 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -2,14 +2,14 @@ process GATK4_BEDTOINTERVALLIST { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.3.0.0" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bed) - path dict + tuple val(meta2), path(dict) output: tuple val(meta), path('*.interval_list'), emit: interval_list @@ -22,14 +22,14 @@ process GATK4_BEDTOINTERVALLIST { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" BedToIntervalList \\ + gatk --java-options "-Xmx${avail_mem}M" BedToIntervalList \\ --INPUT $bed \\ --OUTPUT ${prefix}.interval_list \\ --SEQUENCE_DICTIONARY $dict \\ diff --git a/modules/nf-core/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml index 986f1592..40daf752 100644 --- a/modules/nf-core/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/gatk4/bedtointervallist/meta.yml @@ -3,6 +3,7 @@ description: Creates an interval list from a bed file and a reference dict keywords: - bed - interval list + - bedtointervallist tools: - gatk4: description: | @@ -23,6 +24,11 @@ input: type: file description: Input bed file pattern: "*.bed" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: Sequence dictionary @@ -38,3 +44,4 @@ output: pattern: "versions.yml" authors: - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index bc324ada..15a86bea 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -2,17 +2,17 @@ process GATK4_CREATESEQUENCEDICTIONARY { tag "$fasta" label 'process_medium' - conda "bioconda::gatk4=4.3.0.0" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "*.dict" , emit: dict - path "versions.yml" , emit: versions + tuple val(meta), path('*.dict') , emit: dict + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -20,14 +20,14 @@ process GATK4_CREATESEQUENCEDICTIONARY { script: def args = task.ext.args ?: '' - def avail_mem = 6 + def avail_mem = 6144 if (!task.memory) { log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" CreateSequenceDictionary \\ + gatk --java-options "-Xmx${avail_mem}M" CreateSequenceDictionary \\ --REFERENCE $fasta \\ --URI $fasta \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index 69c23581..a421e681 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -3,6 +3,7 @@ description: Creates a sequence dictionary for a reference sequence keywords: - dictionary - fasta + - createsequencedictionary tools: - gatk: description: | @@ -15,6 +16,11 @@ tools: licence: ["Apache-2.0"] input: + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Input fasta file @@ -30,3 +36,4 @@ output: pattern: "versions.yml" authors: - "@maxulysse" + - "@ramprasadn" diff --git a/modules/nf-core/kallisto/index/main.nf b/modules/nf-core/kallisto/index/main.nf index a24024b4..c866c2a1 100644 --- a/modules/nf-core/kallisto/index/main.nf +++ b/modules/nf-core/kallisto/index/main.nf @@ -5,7 +5,7 @@ process KALLISTO_INDEX { conda "bioconda::kallisto=0.46.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/kallisto:0.46.2--h4f7b962_1' : - 'quay.io/biocontainers/kallisto:0.46.2--h4f7b962_1' }" + 'biocontainers/kallisto:0.46.2--h4f7b962_1' }" input: path fasta diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 4b604749..65d7dd0d 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_single' - conda "bioconda::multiqc=1.14" + conda "bioconda::multiqc=1.15" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.15--pyhdfd78af_0' : + 'biocontainers/multiqc:1.15--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 827dfb23..1d59334c 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -5,12 +5,12 @@ process PICARD_COLLECTWGSMETRICS { conda "bioconda::picard=3.0.0 r::r-base" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) - tuple val(meta2), path(fai) + tuple val(meta3), path(fai) path intervallist output: @@ -23,16 +23,16 @@ process PICARD_COLLECTWGSMETRICS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 def interval = intervallist ? "--INTERVALS ${intervallist}" : '' if (!task.memory) { log.info '[Picard CollectWgsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ CollectWgsMetrics \\ $args \\ --INPUT $bam \\ diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index 2f8dbd3c..19906f08 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -37,7 +37,7 @@ input: type: file description: Genome fasta file pattern: "*.{fa,fasta,fna}" - - meta2: + - meta3: type: map description: | Groovy Map containing reference information @@ -67,3 +67,4 @@ authors: - "@drpatelh" - "@flowuenne" - "@lassefolkersen" + - "@ramprasadn" diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index be243a95..facd7efb 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -5,12 +5,12 @@ process PICARD_MARKDUPLICATES { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*.bam") , emit: bam @@ -24,15 +24,15 @@ process PICARD_MARKDUPLICATES { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ MarkDuplicates \\ $args \\ --INPUT $bam \\ diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 3f2357bb..f7693d2f 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -25,10 +25,20 @@ input: type: file description: BAM file pattern: "*.{bam,cram,sam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Reference genome fasta file pattern: "*.{fasta,fa}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Reference genome fasta index @@ -58,3 +68,4 @@ output: authors: - "@drpatelh" - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/qualimap/rnaseq/main.nf b/modules/nf-core/qualimap/rnaseq/main.nf index ad15ebc2..2c0e4105 100644 --- a/modules/nf-core/qualimap/rnaseq/main.nf +++ b/modules/nf-core/qualimap/rnaseq/main.nf @@ -5,7 +5,7 @@ process QUALIMAP_RNASEQ { conda "bioconda::qualimap=2.2.2d" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/qualimap:2.2.2d--1' : - 'quay.io/biocontainers/qualimap:2.2.2d--1' }" + 'biocontainers/qualimap:2.2.2d--1' }" input: tuple val(meta), path(bam) @@ -22,7 +22,7 @@ process QUALIMAP_RNASEQ { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def paired_end = meta.single_end ? '' : '-pe' - def memory = task.memory.toGiga() + "G" + def memory = (task.memory.mega*0.8).intValue() + 'M' def strandedness = 'non-strand-specific' if (meta.strandedness == 'forward') { @@ -32,7 +32,7 @@ process QUALIMAP_RNASEQ { } """ unset DISPLAY - mkdir tmp + mkdir -p tmp export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp qualimap \\ --java-mem-size=$memory \\ diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index ce6580d2..59ed3088 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -2,18 +2,20 @@ process SAMTOOLS_FAIDX { tag "$fasta" label 'process_single' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(fasta) + tuple val(meta2), path(fai) output: - tuple val(meta), path ("*.fai"), emit: fai - tuple val(meta), path ("*.gzi"), emit: gzi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path ("*.{fa,fasta}") , emit: fa , optional: true + tuple val(meta), path ("*.fai") , emit: fai, optional: true + tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -23,8 +25,8 @@ process SAMTOOLS_FAIDX { """ samtools \\ faidx \\ - $args \\ - $fasta + $fasta \\ + $args cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -33,8 +35,12 @@ process SAMTOOLS_FAIDX { """ stub: + def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() + def fastacmd = match[0] ? "touch ${match[0][1]}" : '' """ + ${fastacmd} touch ${fasta}.fai + cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index fe2fe9a1..957b25e5 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -3,6 +3,7 @@ description: Index FASTA file keywords: - index - fasta + - faidx tools: - samtools: description: | @@ -17,12 +18,21 @@ input: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: FASTA file pattern: "*.{fa,fasta}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - meta: type: map diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 8b95687a..0b20aa4b 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_INDEX { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 84c167cd..2b7753fd 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_SORT { tag "$meta.id" label 'process_medium' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(bam) @@ -23,7 +23,13 @@ process SAMTOOLS_SORT { def prefix = task.ext.prefix ?: "${meta.id}" if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ - samtools sort $args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam + samtools sort \\ + $args \\ + -@ $task.cpus \\ + -o ${prefix}.bam \\ + -T $prefix \\ + $bam + cat <<-END_VERSIONS > versions.yml "${task.process}": samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 729c85e5..cb91facf 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -2,14 +2,14 @@ process SAMTOOLS_VIEW { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input), path(index) - path fasta + tuple val(meta2), path(fasta) path qname output: diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 2e597d34..3b05450b 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -26,12 +26,17 @@ input: description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" - index: - type: optional file - description: BAM.BAI/CRAM.CRAI file - pattern: "*.{.bai,.crai}" + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) + pattern: "*.{.bai,.csi,.crai}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: - type: optional file - description: Reference file the CRAM was created with + type: file + description: Reference file the CRAM was created with (optional) pattern: "*.{fasta,fa}" - qname: type: file diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 0e3bd713..8cb8e9a4 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -5,10 +5,10 @@ process STAR_ALIGN { conda "bioconda::star=2.7.10a bioconda::samtools=1.16.1 conda-forge::gawk=5.1.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' : - 'quay.io/biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' }" + 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' }" input: - tuple val(meta), path(reads) + tuple val(meta), path(reads, stageAs: "input*/*") path index path gtf val star_ignore_sjdbgtf @@ -16,19 +16,23 @@ process STAR_ALIGN { val seq_center output: - tuple val(meta), path('*d.out.bam') , emit: bam tuple val(meta), path('*Log.final.out') , emit: log_final tuple val(meta), path('*Log.out') , emit: log_out tuple val(meta), path('*Log.progress.out'), emit: log_progress path "versions.yml" , emit: versions + tuple val(meta), path('*d.out.bam') , optional:true, emit: bam tuple val(meta), path('*sortedByCoord.out.bam') , optional:true, emit: bam_sorted tuple val(meta), path('*toTranscriptome.out.bam'), optional:true, emit: bam_transcript tuple val(meta), path('*Aligned.unsort.out.bam') , optional:true, emit: bam_unsorted tuple val(meta), path('*fastq.gz') , optional:true, emit: fastq tuple val(meta), path('*.tab') , optional:true, emit: tab + tuple val(meta), path('*.SJ.out.tab') , optional:true, emit: spl_junc_tab + tuple val(meta), path('*.ReadsPerGene.out.tab') , optional:true, emit: read_per_gene_tab tuple val(meta), path('*.out.junction') , optional:true, emit: junction tuple val(meta), path('*.out.sam') , optional:true, emit: sam + tuple val(meta), path('*.wig') , optional:true, emit: wig + tuple val(meta), path('*.bg') , optional:true, emit: bedgraph when: task.ext.when == null || task.ext.when @@ -36,20 +40,23 @@ process STAR_ALIGN { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def reads1 = [], reads2 = [] + meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" - def seq_center = seq_center ? "--outSAMattrRGline ID:$prefix 'CN:$seq_center' 'SM:$prefix' $seq_platform " : "--outSAMattrRGline ID:$prefix 'SM:$prefix' $seq_platform " + def seq_center = seq_center ? "'CN:$seq_center'" : "" + def attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' def mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' """ STAR \\ --genomeDir $index \\ - --readFilesIn $reads \\ + --readFilesIn ${reads1.join(",")} ${reads2.join(",")} \\ --runThreadN $task.cpus \\ --outFileNamePrefix $prefix. \\ $out_sam_type \\ $ignore_gtf \\ - $seq_center \\ + $attrRG \\ $args $mv_unsorted_bam @@ -81,11 +88,16 @@ process STAR_ALIGN { touch ${prefix}.sortedByCoord.out.bam touch ${prefix}.toTranscriptome.out.bam touch ${prefix}.Aligned.unsort.out.bam + touch ${prefix}.Aligned.sortedByCoord.out.bam touch ${prefix}.unmapped_1.fastq.gz touch ${prefix}.unmapped_2.fastq.gz touch ${prefix}.tab + touch ${prefix}.SJ.out.tab + touch ${prefix}.ReadsPerGene.out.tab touch ${prefix}.Chimeric.out.junction touch ${prefix}.out.sam + touch ${prefix}.Signal.UniqueMultiple.str1.out.wig + touch ${prefix}.Signal.UniqueMultiple.str1.out.bg cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml index 7ee10f1c..bce16d36 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -74,6 +74,14 @@ output: type: file description: STAR chimeric junction output file (optional) pattern: "*.out.junction" + - wig: + type: file + description: STAR output wiggle format file(s) (optional) + pattern: "*.wig" + - bedgraph: + type: file + description: STAR output bedGraph format file(s) (optional) + pattern: "*.bg" authors: - "@kevinmenden" diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf index 91462489..2407d006 100644 --- a/modules/nf-core/star/genomegenerate/main.nf +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -5,7 +5,7 @@ process STAR_GENOMEGENERATE { conda "bioconda::star=2.7.10a bioconda::samtools=1.16.1 conda-forge::gawk=5.1.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' : - 'quay.io/biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' }" + 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' }" input: path fasta diff --git a/modules/nf-core/stringtie/merge/main.nf b/modules/nf-core/stringtie/merge/main.nf index f1635afc..12224f78 100644 --- a/modules/nf-core/stringtie/merge/main.nf +++ b/modules/nf-core/stringtie/merge/main.nf @@ -5,7 +5,7 @@ process STRINGTIE_MERGE { conda "bioconda::stringtie=2.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/stringtie:2.2.1--hecb563c_2' : - 'quay.io/biocontainers/stringtie:2.2.1--hecb563c_2' }" + 'biocontainers/stringtie:2.2.1--hecb563c_2' }" input: path stringtie_gtf diff --git a/modules/nf-core/stringtie/stringtie/main.nf b/modules/nf-core/stringtie/stringtie/main.nf index 2d5b035f..d0f8b563 100644 --- a/modules/nf-core/stringtie/stringtie/main.nf +++ b/modules/nf-core/stringtie/stringtie/main.nf @@ -5,7 +5,7 @@ process STRINGTIE_STRINGTIE { conda "bioconda::stringtie=2.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/stringtie:2.2.1--hecb563c_2' : - 'quay.io/biocontainers/stringtie:2.2.1--hecb563c_2' }" + 'biocontainers/stringtie:2.2.1--hecb563c_2' }" input: tuple val(meta), path(bam) From 7e2772d68c1799a5d60de461d7358bf5d82f3b5d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 18 Aug 2023 14:40:45 +0200 Subject: [PATCH 05/83] version bump --- .github/workflows/awsfulltest.yml | 1 - CHANGELOG.md | 2 +- README.md | 21 --------------------- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 5 files changed, 4 insertions(+), 26 deletions(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 8601db99..31c6cd5f 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -272,4 +272,3 @@ jobs: path: | tower_action_*.log tower_action_*.json - diff --git a/CHANGELOG.md b/CHANGELOG.md index e3e00523..17e9561e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.3.4 - [date] +## v2.3.4dev - [date] ## v2.3.0 - [2022/04/24] diff --git a/README.md b/README.md index 9d64ff1e..3f667dea 100644 --- a/README.md +++ b/README.md @@ -95,27 +95,6 @@ In rnafusion the full-sized test includes reference building and fusion detectio > to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) > with `-profile test` before running the workflow on actual data. - - ```console nextflow run nf-core/rnafusion --input samplesheet.csv --outdir --genome GRCh38 --all -profile ``` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index d8d63229..e9edbc07 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnafusion + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-rnafusion-methods-description": order: -1000 diff --git a/nextflow.config b/nextflow.config index 69f5b11c..ffbc21db 100644 --- a/nextflow.config +++ b/nextflow.config @@ -302,7 +302,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.3.4' + version = '2.3.5dev' doi = '' } From ef98ac9a6672b7bf7a5660da8baf6cb95dc4553e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 21 Aug 2023 14:54:57 +0200 Subject: [PATCH 06/83] add meta info to references in modules --- modules/local/arriba/visualisation/main.nf | 2 +- modules/local/fusionreport/detect/main.nf | 2 +- modules/local/picard/collectrnaseqmetrics/main.nf | 4 ++-- modules/local/pizzly/detect/main.nf | 4 ++-- modules/local/squid/annotate/main.nf | 2 +- modules/local/starfusion/build/main.nf | 4 ++-- modules/local/uscs/custom_gtftogenepred/main.nf | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/local/arriba/visualisation/main.nf b/modules/local/arriba/visualisation/main.nf index b55666ca..f97344d1 100644 --- a/modules/local/arriba/visualisation/main.nf +++ b/modules/local/arriba/visualisation/main.nf @@ -9,7 +9,7 @@ process ARRIBA_VISUALISATION { input: tuple val(meta), path(bam), path(bai), path(fusions) - path gtf + tuple val(meta2), path(gtf) path protein_domains path cytobands diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 8c35be4a..2d180113 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -9,7 +9,7 @@ process FUSIONREPORT { input: tuple val(meta), path(reads), path(arriba_fusions), path(pizzly_fusions), path(squid_fusions), path(starfusion_fusions), path(fusioncatcher_fusions) - path(fusionreport_ref) + tuple val(meta2), path(fusionreport_ref) output: path "versions.yml" , emit: versions diff --git a/modules/local/picard/collectrnaseqmetrics/main.nf b/modules/local/picard/collectrnaseqmetrics/main.nf index f1b2fff5..5651c6c1 100644 --- a/modules/local/picard/collectrnaseqmetrics/main.nf +++ b/modules/local/picard/collectrnaseqmetrics/main.nf @@ -9,8 +9,8 @@ process PICARD_COLLECTRNASEQMETRICS { input: tuple val(meta), path(bam), path(bai) - path(refflat) - path(rrna_intervals) + tuple val(meta2), path(refflat) + tuple val(meta3), path(rrna_intervals) output: tuple val(meta), path("*rna_metrics.txt") , emit: metrics diff --git a/modules/local/pizzly/detect/main.nf b/modules/local/pizzly/detect/main.nf index 9f10caf8..a610b531 100644 --- a/modules/local/pizzly/detect/main.nf +++ b/modules/local/pizzly/detect/main.nf @@ -9,8 +9,8 @@ process PIZZLY { input: tuple val(meta), path(txt) - path transcript - path gtf + tuple val(meta2), path(transcript) + tuple val(meta3), path(gtf) output: path "versions.yml" , emit: versions diff --git a/modules/local/squid/annotate/main.nf b/modules/local/squid/annotate/main.nf index 19975b00..9b6eebe7 100644 --- a/modules/local/squid/annotate/main.nf +++ b/modules/local/squid/annotate/main.nf @@ -10,7 +10,7 @@ process SQUID_ANNOTATE { input: tuple val(meta), path(txt) - path gtf + tuple val(meta2), path(gtf) output: tuple val(meta), path("*annotated.txt") , emit: fusions_annotated diff --git a/modules/local/starfusion/build/main.nf b/modules/local/starfusion/build/main.nf index da5b0c3b..e2bd7879 100644 --- a/modules/local/starfusion/build/main.nf +++ b/modules/local/starfusion/build/main.nf @@ -5,8 +5,8 @@ process STARFUSION_BUILD { container "docker.io/trinityctat/starfusion:1.12.0" input: - path fasta - path gtf + tuple val(meta), path(fasta) + tuple val(meta2), path(gtf) output: path "*" , emit: reference diff --git a/modules/local/uscs/custom_gtftogenepred/main.nf b/modules/local/uscs/custom_gtftogenepred/main.nf index 46052b5a..78fcbd29 100644 --- a/modules/local/uscs/custom_gtftogenepred/main.nf +++ b/modules/local/uscs/custom_gtftogenepred/main.nf @@ -7,7 +7,7 @@ process GTF_TO_REFFLAT { 'quay.io/biocontainers/ucsc-gtftogenepred:377--ha8a8165_5' }" input: - path gtf + tuple val(meta), path (gtf) output: path('*.refflat'), emit: refflat From 640c12268d51d6c8c773857f0146c8fa1de0c650 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 21 Aug 2023 14:55:59 +0200 Subject: [PATCH 07/83] remove igenome usage --- nextflow.config | 7 ------- 1 file changed, 7 deletions(-) diff --git a/nextflow.config b/nextflow.config index ffbc21db..8874d640 100644 --- a/nextflow.config +++ b/nextflow.config @@ -256,13 +256,6 @@ plugins { id 'nf-validation' // Validation of pipeline parameters and creation of an input channel from a sample sheet } -// Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} - // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. From dd3772fa22ca90fc599b9e3e2626f579af4df127 Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 15:09:48 +0200 Subject: [PATCH 08/83] Add trim tail for reverse reads --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 7b8f2787..c1e552d5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -61,7 +61,7 @@ process { } withName: FASTP { - ext.args = params.trim_tail ? "--trim_tail1 ${params.trim_tail}" : '' + ext.args = params.trim_tail ? "--trim_tail1 ${params.trim_tail} --trim_tail2 ${params.trim_tail} " : '' } withName: FASTQC { From 5aeb72794ba586ca0b661d36d0302f0a5fc2e7a5 Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 15:16:43 +0200 Subject: [PATCH 09/83] update changelog --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff835124..db8ab10e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## v2.3.4dev - [2023/08/21] + +### Added + + +### Changed + + +### Fixed + +- Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) + +### Removed + + + ## v2.3.0 = [2022/04/24] ### Added From 96309174d7624bd223292a5a18b6cd505516d059 Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 15:24:43 +0200 Subject: [PATCH 10/83] prettier --- CHANGELOG.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db8ab10e..5fb2fd31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,23 +3,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - ## v2.3.4dev - [2023/08/21] ### Added - ### Changed - ### Fixed - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) ### Removed - - ## v2.3.0 = [2022/04/24] ### Added From 90c120bfa3911516594431a468a857220da3d0b0 Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 15:38:06 +0200 Subject: [PATCH 11/83] optional html for fusionreport --- modules/local/fusionreport/detect/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 8c35be4a..0bdc3af3 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -16,7 +16,7 @@ process FUSIONREPORT { tuple val(meta), path("*fusionreport.tsv") , emit: fusion_list tuple val(meta), path("*fusionreport_filtered.tsv") , emit: fusion_list_filtered tuple val(meta), path("index.html") , emit: report - tuple val(meta), path("*_*.html") , emit: html + tuple val(meta), path("*_*.html") , optional:true, emit: html tuple val(meta), path("*.csv") , optional:true, emit: csv tuple val(meta), path("*.json") , optional:true, emit: json From 88d10519235b16e6cdb7aa53d808b50a59d7c3f3 Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 16:11:40 +0200 Subject: [PATCH 12/83] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fb2fd31..272202bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) +- Set html files as optional in fusionreport [#380](https://github.com/nf-core/rnafusion/pull/380) ### Removed From fbf1c2e6131b8ccf98d6c51bcf290861c6abe89c Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 16:27:38 +0200 Subject: [PATCH 13/83] use institutional configs by default --- nextflow.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nextflow.config b/nextflow.config index 0f0bbc88..37cd5c28 100644 --- a/nextflow.config +++ b/nextflow.config @@ -137,11 +137,11 @@ try { // Load nf-core/rnafusion custom profiles from different institutions. // Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! -// try { -// includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" -// } catch (Exception e) { -// System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") -// } +try { + includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" +} catch (Exception e) { + System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") +} profiles { From 4c277ddaea19f4c9e624deb7ee1b402ba705c89c Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Mon, 21 Aug 2023 16:54:50 +0200 Subject: [PATCH 14/83] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fb2fd31..04b948cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Use institutional configs by default [#381](https://github.com/nf-core/rnafusion/pull/381) + ### Fixed - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) From 98fb0ba55557b09f2a345b45a83da6a59e61907d Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Tue, 22 Aug 2023 10:27:02 +0200 Subject: [PATCH 15/83] make fusioninspector tsv optional --- modules/local/fusioninspector/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 6f59a590..3e94d6a5 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -10,9 +10,9 @@ process FUSIONINSPECTOR { path reference output: - tuple val(meta), path("*FusionInspector.fusions.tsv") , emit: tsv - path "*" , emit: output - path "versions.yml" , emit: versions + tuple val(meta), path("*FusionInspector.fusions.tsv") , optional:true, emit: tsv + path "*" , emit: output + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From 1db024652e4d810a28f3eaf3fc1a4c590c9d4c38 Mon Sep 17 00:00:00 2001 From: Eva Caceres Date: Fri, 25 Aug 2023 08:55:33 +0200 Subject: [PATCH 16/83] Revert "make fusioninspector tsv optional" This reverts commit 98fb0ba55557b09f2a345b45a83da6a59e61907d. --- modules/local/fusioninspector/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/fusioninspector/main.nf b/modules/local/fusioninspector/main.nf index 3e94d6a5..6f59a590 100644 --- a/modules/local/fusioninspector/main.nf +++ b/modules/local/fusioninspector/main.nf @@ -10,9 +10,9 @@ process FUSIONINSPECTOR { path reference output: - tuple val(meta), path("*FusionInspector.fusions.tsv") , optional:true, emit: tsv - path "*" , emit: output - path "versions.yml" , emit: versions + tuple val(meta), path("*FusionInspector.fusions.tsv") , emit: tsv + path "*" , emit: output + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From dffeb114b7bae86425ea2b69ed0763e745d59d9e Mon Sep 17 00:00:00 2001 From: Ed Stone Date: Fri, 25 Aug 2023 10:24:25 +0000 Subject: [PATCH 17/83] fix for megafusion key error --- bin/megafusion.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/megafusion.py b/bin/megafusion.py index 6f27b296..76872b57 100755 --- a/bin/megafusion.py +++ b/bin/megafusion.py @@ -122,6 +122,8 @@ def column_manipulation(df): df["QUAL"] = "." df["FILTER"] = "PASS" df["REF"] = "N" + df["INFO"] = "" + df["Sample"] = "" for index, row in df.iterrows(): # ALT From 4404ca1918f255d4b643b0213118663599ab3c5a Mon Sep 17 00:00:00 2001 From: Ed Stone Date: Fri, 25 Aug 2023 10:39:03 +0000 Subject: [PATCH 18/83] fix to allow other remote URI paths --- workflows/rnafusion.nf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 45a9e623..510bc778 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -33,8 +33,11 @@ def checkPathParamList = [ for (param in checkPathParamList) if ((param) && !params.build_references) file(param, checkIfExists: true) -if (params.fasta[0,1] == "s3") { - log.info "INFO: s3 path detected, check for absolute path and trailing '/' not performed" +def params_fasta_path_uri = params.fasta =~ /^([a-zA-Z0-9]*):\/\/(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/ +// check if params.fasta is a remote uri such as s3://, gs:// or dx:// +if (params_fasta_path_uri){ + log.info "INFO: a remote uri path detected, check for absolute path and trailing '/' not performed" + // log.info "INFO: remote uri path detected (e.g. s3), check for absolute path and trailing '/' not performed" } else { for (param in checkPathParamList) if ((param.toString())!= file(param).toString() && !params.build_references) { exit 1, "Problem with ${param}: ABSOLUTE PATHS are required! Check for trailing '/' at the end of paths too." } From 0699dcaa619c70b47ffc3320656374502bea0165 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:33:05 +0200 Subject: [PATCH 19/83] update modules --- assets/multiqc_config.yml | 4 +- modules.json | 12 +++--- modules/nf-core/arriba/main.nf | 20 +++++----- modules/nf-core/arriba/meta.yml | 37 +++++++++++++++++++ .../custom/dumpsoftwareversions/main.nf | 6 +-- modules/nf-core/kallisto/index/main.nf | 6 +-- modules/nf-core/kallisto/index/meta.yml | 20 ++++++++-- modules/nf-core/qualimap/rnaseq/main.nf | 2 +- modules/nf-core/star/align/main.nf | 4 +- modules/nf-core/star/align/meta.yml | 24 ++++++++++++ modules/nf-core/star/genomegenerate/main.nf | 8 ++-- modules/nf-core/star/genomegenerate/meta.yml | 15 ++++++++ 12 files changed, 123 insertions(+), 35 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index e9edbc07..9b2226f8 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnafusion + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-rnafusion-methods-description": order: -1000 diff --git a/modules.json b/modules.json index db763f95..38ba9c33 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "arriba": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "ea9e2892a9d12e8769402f12096219942bcf6536", "installed_by": ["modules"] }, "cat/cat": { @@ -22,7 +22,7 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "05c280924b6c768d484c7c443dad5e605c4ff4b4", "installed_by": ["modules"] }, "fastp": { @@ -47,7 +47,7 @@ }, "kallisto/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "699fa6f3002d922380615f3847198aeb57d8b6a9", "installed_by": ["modules"] }, "multiqc": { @@ -67,7 +67,7 @@ }, "qualimap/rnaseq": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "4657d98bc9f565e067c4d924126ce107056f5e2f", "installed_by": ["modules"] }, "samtools/faidx": { @@ -92,12 +92,12 @@ }, "star/align": { "branch": "master", - "git_sha": "57d75dbac06812c59798a48585032f6e50bb1914", + "git_sha": "cc08a888069f67cab8120259bddab8032d4c0fe3", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "cc08a888069f67cab8120259bddab8032d4c0fe3", "installed_by": ["modules"] }, "stringtie/merge": { diff --git a/modules/nf-core/arriba/main.nf b/modules/nf-core/arriba/main.nf index a04fe3b7..2537d05b 100644 --- a/modules/nf-core/arriba/main.nf +++ b/modules/nf-core/arriba/main.nf @@ -2,20 +2,20 @@ process ARRIBA { tag "$meta.id" label 'process_medium' - conda "bioconda::arriba=2.3.0" + conda "bioconda::arriba=2.4.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/arriba:2.3.0--haa8aa89_0' : - 'biocontainers/arriba:2.3.0--haa8aa89_0' }" + 'https://depot.galaxyproject.org/singularity/arriba:2.4.0--h0033a41_2' : + 'biocontainers/arriba:2.4.0--h0033a41_2' }" input: tuple val(meta), path(bam) - path fasta - path gtf - path blacklist - path known_fusions - path structural_variants - path tags - path protein_domains + tuple val(meta2), path(fasta) + tuple val(meta3), path(gtf) + tuple val(meta4), path(blacklist) + tuple val(meta5), path(known_fusions) + tuple val(meta6), path(structural_variants) + tuple val(meta7), path(tags) + tuple val(meta8), path(protein_domains) output: tuple val(meta), path("*.fusions.tsv") , emit: fusions diff --git a/modules/nf-core/arriba/meta.yml b/modules/nf-core/arriba/meta.yml index 119dd912..85b3a30b 100644 --- a/modules/nf-core/arriba/meta.yml +++ b/modules/nf-core/arriba/meta.yml @@ -3,6 +3,8 @@ description: Arriba is a command-line tool for the detection of gene fusions fro keywords: - fusion - arriba + - detection + - RNA-Seq tools: - arriba: description: Fast and accurate gene fusion detection from RNA-Seq data @@ -22,30 +24,65 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: Assembly FASTA file pattern: "*.{fasta}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - gtf: type: file description: Annotation GTF file pattern: "*.{gtf}" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - blacklist: type: file description: Blacklist file pattern: "*.{tsv}" + - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - known_fusions: type: file description: Known fusions file pattern: "*.{tsv}" + - meta6: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - structural_variants: type: file description: Structural variants file pattern: "*.{tsv}" + - meta7: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - tags: type: file description: Tags file pattern: "*.{tsv}" + - meta8: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - protein_domains: type: file description: Protein domains file diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index ebc87273..c9d014b1 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "bioconda::multiqc=1.14" + conda "bioconda::multiqc=1.15" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.15--pyhdfd78af_0' : + 'biocontainers/multiqc:1.15--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/kallisto/index/main.nf b/modules/nf-core/kallisto/index/main.nf index c866c2a1..fb9e44d9 100644 --- a/modules/nf-core/kallisto/index/main.nf +++ b/modules/nf-core/kallisto/index/main.nf @@ -8,11 +8,11 @@ process KALLISTO_INDEX { 'biocontainers/kallisto:0.46.2--h4f7b962_1' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "kallisto" , emit: idx - path "versions.yml" , emit: versions + tuple val(meta), path("kallisto") , emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/kallisto/index/meta.yml b/modules/nf-core/kallisto/index/meta.yml index 47f40c9a..05dfa53d 100644 --- a/modules/nf-core/kallisto/index/meta.yml +++ b/modules/nf-core/kallisto/index/meta.yml @@ -1,6 +1,8 @@ name: kallisto_index description: Create kallisto index keywords: + - kallisto + - kallisto/index - index tools: - kallisto: @@ -12,20 +14,30 @@ tools: licence: ["BSD-2-Clause"] input: + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: genome fasta file pattern: "*.{fasta}" output: + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - index: + type: directory + description: Kallisto genome index + pattern: "*.idx" - versions: type: file description: File containing software versions pattern: "versions.yml" - - idx: - type: index - description: Kallisto genome index - pattern: "*.idx" authors: - "@ggabernet" diff --git a/modules/nf-core/qualimap/rnaseq/main.nf b/modules/nf-core/qualimap/rnaseq/main.nf index 2c0e4105..044c983f 100644 --- a/modules/nf-core/qualimap/rnaseq/main.nf +++ b/modules/nf-core/qualimap/rnaseq/main.nf @@ -9,7 +9,7 @@ process QUALIMAP_RNASEQ { input: tuple val(meta), path(bam) - path gtf + tuple val(meta2), path(gtf) output: tuple val(meta), path("${prefix}"), emit: results diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 8cb8e9a4..d0e20384 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -9,8 +9,8 @@ process STAR_ALIGN { input: tuple val(meta), path(reads, stageAs: "input*/*") - path index - path gtf + tuple val(meta2), path(index) + tuple val(meta3), path(gtf) val star_ignore_sjdbgtf val seq_platform val seq_center diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml index bce16d36..3d8fed0c 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -25,10 +25,34 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - index: type: directory description: STAR genome index pattern: "star" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: Annotation GTF file + pattern: "*.{gtf}" + - star_ignore_sjdbgtf: + type: boolean + description: Ignore annotation GTF file + - seq_platform: + type: string + description: Sequencing platform + - seq_center: + type: string + description: Sequencing center + output: - bam: type: file diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf index 2407d006..43424042 100644 --- a/modules/nf-core/star/genomegenerate/main.nf +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -8,12 +8,12 @@ process STAR_GENOMEGENERATE { 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:1df389393721fc66f3fd8778ad938ac711951107-0' }" input: - path fasta - path gtf + tuple val(meta), path(fasta) + tuple val(meta2), path(gtf) output: - path "star" , emit: index - path "versions.yml", emit: versions + tuple val(meta), path("star") , emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/star/genomegenerate/meta.yml b/modules/nf-core/star/genomegenerate/meta.yml index 8181157a..eba2d9cf 100644 --- a/modules/nf-core/star/genomegenerate/meta.yml +++ b/modules/nf-core/star/genomegenerate/meta.yml @@ -15,14 +15,29 @@ tools: doi: 10.1093/bioinformatics/bts635 licence: ["MIT"] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - fasta: type: file description: Fasta file of the reference genome + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - gtf: type: file description: GTF file of the reference genome output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - index: type: directory description: Folder containing the star index files From 3d31b2736b252bb2bbd944a32cfb6a83da85e32c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:35:21 +0200 Subject: [PATCH 20/83] bump version --- assets/multiqc_config.yml | 4 +- modules/nf-core/qualimap/rnaseq/meta.yml | 52 ++++++++++++++++++++++++ nextflow.config | 2 +- workflows/rnafusion.nf | 38 ++++++++--------- 4 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 modules/nf-core/qualimap/rnaseq/meta.yml diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 9b2226f8..f02eb657 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnafusion + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-rnafusion-methods-description": order: -1000 diff --git a/modules/nf-core/qualimap/rnaseq/meta.yml b/modules/nf-core/qualimap/rnaseq/meta.yml new file mode 100644 index 00000000..7738f08d --- /dev/null +++ b/modules/nf-core/qualimap/rnaseq/meta.yml @@ -0,0 +1,52 @@ +name: qualimap_rnaseq +description: Evaluate alignment data +keywords: + - quality control + - qc + - rnaseq +tools: + - qualimap: + description: | + Qualimap 2 is a platform-independent application written in + Java and R that provides both a Graphical User Interface and + a command-line interface to facilitate the quality control of + alignment sequencing data and its derivatives like feature counts. + homepage: http://qualimap.bioinfo.cipf.es/ + documentation: http://qualimap.conesalab.org/doc_html/index.html + doi: 10.1093/bioinformatics/bts503 + licence: ["GPL-2.0-only"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file of the reference genome + pattern: "*.{gtf}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results: + type: directory + description: Qualimap results dir + pattern: "*/*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@FriederikeHanssen" diff --git a/nextflow.config b/nextflow.config index 8874d640..6e990833 100644 --- a/nextflow.config +++ b/nextflow.config @@ -295,7 +295,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.3.5dev' + version = '2.4.0dev' doi = '' } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 0658e97a..459b5869 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -20,26 +20,26 @@ WorkflowRnafusion.initialise(params, log) if (file(params.input).exists() || params.build_references) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet does not exist or was not specified!' } if (params.fusioninspector_only && !params.fusioninspector_fusions) { exit 1, 'Parameter --fusioninspector_fusions PATH_TO_FUSION_LIST expected with parameter --fusioninspector_only'} -ch_chrgtf = params.starfusion_build ? file(params.chrgtf) : file("${params.starfusion_ref}/ref_annot.gtf") -ch_starindex_ref = params.starfusion_build ? params.starindex_ref : "${params.starfusion_ref}/ref_genome.fa.star.idx" -ch_starindex_ensembl_ref = params.starindex_ref -ch_refflat = params.starfusion_build ? file(params.refflat) : "${params.ensembl_ref}/ref_annot.gtf.refflat" -ch_rrna_interval = params.starfusion_build ? file(params.rrna_intervals) : "${params.ensembl_ref}/ref_annot.interval_list" - +ch_chrgtf = params.starfusion_build ? Channel.fromPath(params.chrgtf).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_annot.gtf").map { it -> [[id:it.Name], it] }.collect() +ch_starindex_ref = params.starfusion_build ? Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.starfusion_ref}/ref_genome.fa.star.idx").map { it -> [[id:it.Name], it] }.collect() +ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[id:it.Name], it] }.collect() +ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() +ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() +ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() + +ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() +ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() +ch_transcript = Channel.fromPath(params.transcript).map { it -> [[id:it.Name], it] }.collect() +ch_fai = Channel.fromPath(params.fai).map { it -> [[id:it.Name], it] }.collect() def checkPathParamList = [ params.fasta, params.fai, params.gtf, - ch_chrgtf, params.transcript, - ch_refflat, - ch_rrna_interval ] - -for (param in checkPathParamList) if ((param) && !params.build_references) file(param, checkIfExists: true) -if (params.fasta[0,1] == "s3") { +if (params.fasta == "s3") { log.info "INFO: s3 path detected, check for absolute path and trailing '/' not performed" } else { @@ -47,12 +47,6 @@ else { } if ((params.squid || params.all) && params.ensembl_version != 102) { exit 1, 'Ensembl version is not supported by squid' } -ch_fasta = file(params.fasta) -ch_gtf = file(params.gtf) -ch_transcript = file(params.transcript) -ch_fai = file(params.fai) - - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CONFIG FILES @@ -115,6 +109,9 @@ workflow RNAFUSION { ch_versions = Channel.empty() + + + // // SUBWORKFLOW: Read in samplesheet, validate and stage input files // @@ -137,9 +134,6 @@ workflow RNAFUSION { } .set { ch_fastq } ch_versions = ch_versions.mix(INPUT_CHECK.out.versions) - // TODO: OPTIONAL, you can use nf-validation plugin to create an input channel from the samplesheet with Channel.fromSamplesheet("input") - // See the documentation https://nextflow-io.github.io/nf-validation/samplesheets/fromSamplesheet/ - // ! There is currently no tooling to help you write a sample sheet schema CAT_FASTQ ( ch_fastq.multiple @@ -223,7 +217,7 @@ workflow RNAFUSION { //Run fusion-report FUSIONREPORT_WORKFLOW ( ch_reads_all, - params.fusionreport_ref, + ch_fusionreport_ref, ARRIBA_WORKFLOW.out.fusions, PIZZLY_WORKFLOW.out.fusions, SQUID_WORKFLOW.out.fusions, From f6105ce9b99866d2328093814784cd1e590a9d41 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 15:55:57 +0200 Subject: [PATCH 21/83] adapt ENSEMBL and building reference workflow with meta info --- modules/local/ensembl/main.nf | 21 ++++++++++++--------- modules/local/pizzly/download/main.nf | 2 +- workflows/build_references.nf | 15 ++++++--------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/modules/local/ensembl/main.nf b/modules/local/ensembl/main.nf index d6d71e6d..4a782c0d 100644 --- a/modules/local/ensembl/main.nf +++ b/modules/local/ensembl/main.nf @@ -9,13 +9,16 @@ process ENSEMBL_DOWNLOAD { input: val ensembl_version + val genome + val meta output: - path "versions.yml" , emit: versions - path "Homo_sapiens.${params.genome}.${ensembl_version}.all.fa" , emit: fasta - path "Homo_sapiens.${params.genome}.${ensembl_version}.gtf" , emit: gtf - path "Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf" , emit: chrgtf - path "Homo_sapiens.${params.genome}.${ensembl_version}.cdna.all.fa.gz", emit: transcript + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.all.fa") , emit: fasta + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.gtf") , emit: gtf + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.chr.gtf") , emit: chrgtf + tuple val(meta), path("Homo_sapiens.${genome}.${ensembl_version}.cdna.all.fa.gz"), emit: transcript + path "versions.yml" , emit: versions + script: """ @@ -40,10 +43,10 @@ process ENSEMBL_DOWNLOAD { stub: """ - touch "Homo_sapiens.${params.genome}.${ensembl_version}.all.fa" - touch "Homo_sapiens.${params.genome}.${ensembl_version}.gtf" - touch "Homo_sapiens.${params.genome}.${ensembl_version}.chr.gtf" - touch "Homo_sapiens.${params.genome}.${ensembl_version}.cdna.all.fa.gz" + touch "Homo_sapiens.${genome}.${ensembl_version}.all.fa" + touch "Homo_sapiens.${genome}.${ensembl_version}.gtf" + touch "Homo_sapiens.${genome}.${ensembl_version}.chr.gtf" + touch "Homo_sapiens.${genome}.${ensembl_version}.cdna.all.fa.gz" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/pizzly/download/main.nf b/modules/local/pizzly/download/main.nf index 571cd4dc..efaae3aa 100644 --- a/modules/local/pizzly/download/main.nf +++ b/modules/local/pizzly/download/main.nf @@ -8,7 +8,7 @@ process PIZZLY_DOWNLOAD { 'quay.io/biocontainers/kallisto:0.46.2--h4f7b962_1' }" input: - path transcript + tuple val(meta), path(transcript) output: path "versions.yml" , emit: versions diff --git a/workflows/build_references.nf b/workflows/build_references.nf index c43ecc84..6a03edb6 100644 --- a/workflows/build_references.nf +++ b/workflows/build_references.nf @@ -33,18 +33,15 @@ include { GATK4_BEDTOINTERVALLIST } from '../modules/nf-core/gatk4/bedto workflow BUILD_REFERENCES { - ENSEMBL_DOWNLOAD( params.ensembl_version ) - ENSEMBL_DOWNLOAD.out.fasta - .map { it -> tuple(id:it.baseName, it) } - .set { ch_fasta_w_meta } + def fake_meta = [:] + fake_meta.id = "Homo_sapiens.${params.genome}.${params.ensembl_version}" + ENSEMBL_DOWNLOAD( params.ensembl_version, params.genome, fake_meta ) - SAMTOOLS_FAIDX(ch_fasta_w_meta) + + SAMTOOLS_FAIDX(ENSEMBL_DOWNLOAD.out.fasta, [[],[]]) GATK4_CREATESEQUENCEDICTIONARY(ENSEMBL_DOWNLOAD.out.fasta) - ENSEMBL_DOWNLOAD.out.gtf - .map { it -> tuple(id:it.baseName, it) } - .set { ch_gtf_w_meta } - RRNA_TRANSCRIPTS(ch_gtf_w_meta) + RRNA_TRANSCRIPTS(ENSEMBL_DOWNLOAD.out.gtf) CONVERT2BED(RRNA_TRANSCRIPTS.out.rrna_gtf) GATK4_BEDTOINTERVALLIST(CONVERT2BED.out.bed, GATK4_CREATESEQUENCEDICTIONARY.out.dict) From 03f304cb6b19478c7de8f1d6837e71af43d457e6 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 16:02:45 +0200 Subject: [PATCH 22/83] try to make fasta existence check optional --- nextflow_schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 195ba8d3..1258d5a7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -322,7 +322,6 @@ "fasta": { "type": "string", "format": "file-path", - "exists": true, "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", From a17881a8b5b10b2b66a828982a12a82a7575e86d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 16:22:35 +0200 Subject: [PATCH 23/83] fix channel for arriba workflow --- modules/local/arriba/visualisation/main.nf | 4 ++-- nextflow.config | 16 +++++++--------- subworkflows/local/arriba_workflow.nf | 5 ++++- subworkflows/local/fusioninspector_workflow.nf | 4 +++- workflows/rnafusion.nf | 14 ++++++++++++-- 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/modules/local/arriba/visualisation/main.nf b/modules/local/arriba/visualisation/main.nf index f97344d1..5805a904 100644 --- a/modules/local/arriba/visualisation/main.nf +++ b/modules/local/arriba/visualisation/main.nf @@ -10,8 +10,8 @@ process ARRIBA_VISUALISATION { input: tuple val(meta), path(bam), path(bai), path(fusions) tuple val(meta2), path(gtf) - path protein_domains - path cytobands + tuple val(meta3), path(protein_domains) + tuple val(meta4), path(cytobands) output: tuple val(meta), path("*.pdf") , emit: pdf diff --git a/nextflow.config b/nextflow.config index a9743258..37333c8e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -73,7 +73,7 @@ params { arriba_ref_blacklist = "${params.genomes_base}/arriba/blacklist_hg38_GRCh38_v2.3.0.tsv.gz" arriba_ref_cytobands = "${params.genomes_base}/arriba/cytobands_hg38_GRCh38_v2.3.0.tsv" arriba_ref_known_fusions = "${params.genomes_base}/arriba/known_fusions_hg38_GRCh38_v2.3.0.tsv.gz" - arriba_ref_protein_domain = "${params.genomes_base}/arriba/protein_domains_hg38_GRCh38_v2.3.0.gff3" + arriba_ref_protein_domains = "${params.genomes_base}/arriba/protein_domains_hg38_GRCh38_v2.3.0.gff3" fusioncatcher_ref = "${params.genomes_base}/fusioncatcher/human_v102" pizzly_ref = "${params.genomes_base}/pizzly/kallisto" squid_ref = "${params.genomes_base}/squid" @@ -140,13 +140,11 @@ try { // Load nf-core/rnafusion custom profiles from different institutions. // Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! - -try { - includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") -} - +// try { +// includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" +// } catch (Exception e) { +// System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") +// } profiles { debug { dumpHashes = true @@ -297,7 +295,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.4.0dev' + version = '2.3.5dev' doi = '' } diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 0712f787..9f770190 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -10,6 +10,9 @@ workflow ARRIBA_WORKFLOW { ch_gtf ch_fasta ch_starindex_ref + ch_arriba_ref_blacklist + ch_arriba_ref_known_fusions + ch_arriba_ref_protein_domains main: ch_versions = Channel.empty() @@ -34,7 +37,7 @@ workflow ARRIBA_WORKFLOW { .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file } else { - ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, params.arriba_ref_blacklist, params.arriba_ref_known_fusions, [], [], params.arriba_ref_protein_domain ) + ARRIBA ( STAR_FOR_ARRIBA.out.bam, ch_fasta, ch_gtf, ch_arriba_ref_blacklist, ch_arriba_ref_known_fusions, [[],[]], [[],[]], ch_arriba_ref_protein_domains ) ch_versions = ch_versions.mix(ARRIBA.out.versions) ch_arriba_fusions = ARRIBA.out.fusions diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index 388f42a6..3c224689 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -11,6 +11,8 @@ workflow FUSIONINSPECTOR_WORKFLOW { report bam_sorted_indexed ch_gtf + ch_arriba_ref_protein_domains + ch_arriba_ref_cytobands main: ch_versions = Channel.empty() @@ -38,7 +40,7 @@ workflow FUSIONINSPECTOR_WORKFLOW { if ((params.starfusion || params.all || params.stringtie) && !params.fusioninspector_only && !params.skip_vis) { bam_sorted_indexed_fusions = bam_sorted_indexed.join(FUSIONINSPECTOR.out.tsv) - ARRIBA_VISUALISATION(bam_sorted_indexed_fusions, ch_gtf, params.arriba_ref_protein_domain, params.arriba_ref_cytobands) + ARRIBA_VISUALISATION(bam_sorted_indexed_fusions, ch_gtf, ch_arriba_ref_protein_domains, ch_arriba_ref_cytobands) ch_versions = ch_versions.mix(ARRIBA_VISUALISATION.out.versions) } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 459b5869..0b79053f 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -26,6 +26,11 @@ ch_starindex_ensembl_ref = Channel.fromPath(params.starindex_ref).map { it -> [[ ch_refflat = params.starfusion_build ? Channel.fromPath(params.refflat).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.gtf.refflat").map { it -> [[id:it.Name], it] }.collect() ch_rrna_interval = params.starfusion_build ? Channel.fromPath(params.rrna_intervals).map { it -> [[id:it.Name], it] }.collect() : Channel.fromPath("${params.ensembl_ref}/ref_annot.interval_list").map { it -> [[id:it.Name], it] }.collect() ch_fusionreport_ref = Channel.fromPath(params.fusionreport_ref).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_blacklist = Channel.fromPath(params.arriba_ref_blacklist).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_known_fusions = Channel.fromPath(params.arriba_ref_known_fusions).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_protein_domains = Channel.fromPath(params.arriba_ref_protein_domains).map { it -> [[id:it.Name], it] }.collect() +ch_arriba_ref_cytobands = Channel.fromPath(params.arriba_ref_cytobands).map { it -> [[id:it.Name], it] }.collect() + ch_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it.Name], it] }.collect() ch_gtf = Channel.fromPath(params.gtf).map { it -> [[id:it.Name], it] }.collect() @@ -164,7 +169,10 @@ workflow RNAFUSION { ch_reads_all, ch_gtf, ch_fasta, - ch_starindex_ensembl_ref + ch_starindex_ensembl_ref, + ch_arriba_ref_blacklist, + ch_arriba_ref_known_fusions, + ch_arriba_ref_protein_domains ) ch_versions = ch_versions.mix(ARRIBA_WORKFLOW.out.versions.first().ifEmpty(null)) @@ -234,7 +242,9 @@ workflow RNAFUSION { FUSIONREPORT_WORKFLOW.out.fusion_list_filtered, FUSIONREPORT_WORKFLOW.out.report, STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, - ch_chrgtf + ch_chrgtf, + ch_arriba_ref_protein_domains, + ch_arriba_ref_cytobands ) ch_versions = ch_versions.mix(FUSIONINSPECTOR_WORKFLOW.out.versions.first().ifEmpty(null)) From 092a6bda990fb2aee47ff18cae9cef4ba73e5774 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 16:25:16 +0200 Subject: [PATCH 24/83] small fix --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 1258d5a7..02cd1e27 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -114,7 +114,7 @@ "fa_icon": "far fa-file-code", "description": "Path to arriba reference known fusions" }, - "arriba_ref_protein_domain": { + "arriba_ref_protein_domains": { "type": "string", "fa_icon": "far fa-file-code", "description": "Path to arriba reference protein domain" From cb169f124003b28bcac21ddc8b06ee4f00ab49d5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 25 Aug 2023 16:55:38 +0200 Subject: [PATCH 25/83] fix version bump --- CHANGELOG.md | 2 +- nextflow.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 054e3409..4f3c8389 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.4.0 dev +## v2.4.0dev ### Added diff --git a/nextflow.config b/nextflow.config index 37333c8e..107eba8a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -295,7 +295,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.3.5dev' + version = '2.4.0dev' doi = '' } From 68a9fe1c3c6a5d0b47d133633b45283a822468a2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 12:48:26 +0200 Subject: [PATCH 26/83] add gene count by default --- conf/modules.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index c1e552d5..901957d9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -352,7 +352,8 @@ process { --alignInsertionFlush Right \ --alignSplicedMateMapLminOverLmate 0 \ --alignSplicedMateMapLmin 30 \ - --chimOutType Junctions' + --chimOutType Junctions \ + --quantMode GeneCounts' } withName: STAR_GENOMEGENERATE { From 0fbdfd125f7c39a443dadab19972b28374ca13d3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 16:27:04 +0200 Subject: [PATCH 27/83] fix fusionreport issue with MACOXS dir --- modules/local/fusionreport/download/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index 5dca9b2a..c54910a1 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -4,7 +4,7 @@ process FUSIONREPORT_DOWNLOAD { // Note: 2.7X indices incompatible with AWS iGenomes. conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.5p2.1" + container "docker.io/clinicalgenomics/fusion-report:2.1.5p3" input: val(username) From 39390f1a9204145a73a0475b38610298309bf0d9 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 16:36:07 +0200 Subject: [PATCH 28/83] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03e58659..77bafca0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) - Set html files as optional in fusionreport [#380](https://github.com/nf-core/rnafusion/pull/380) +- Provide gene count file by default when running STAR_FOR_STARFUSION [#370](https://github.com/nf-core/rnafusion/issues/370) +- Fix fusion-report issue with MACOXS directories [#377](https://github.com/nf-core/rnafusion/issues/377) ### Removed From 1c784f8a977c0654a77cc3e9fc0d159897121bc5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 17:25:16 +0200 Subject: [PATCH 29/83] remove redundant indexing in starfusion and qc workflows, output bai files in same dir as bam files --- conf/modules.config | 13 ++----------- subworkflows/local/qc_workflow.nf | 10 ++-------- workflows/rnafusion.nf | 2 +- 3 files changed, 5 insertions(+), 20 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 901957d9..4bee29b3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -187,16 +187,7 @@ process { withName: SAMTOOLS_INDEX_FOR_ARRIBA { publishDir = [ - path: { "${params.outdir}/samtools_index_for_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: SAMTOOLS_INDEX_FOR_QC { - ext.when = { !params.skip_qc && !params.fusioninspector_only && (params.starfusion || params.all)} - publishDir = [ - path: { "${params.outdir}/samtools_index_for_qc" }, + path: { "${params.outdir}/star_for_arriba" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -204,7 +195,7 @@ process { withName: SAMTOOLS_INDEX_FOR_STARFUSION { publishDir = [ - path: { "${params.outdir}/samtools_index_for_starfusion" }, + path: { "${params.outdir}/star_for_starfusion" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index a2a1dec9..aac1a1d7 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -3,13 +3,12 @@ // include { QUALIMAP_RNASEQ } from '../../modules/nf-core/qualimap/rnaseq/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_QC } from '../../modules/nf-core/samtools/index/main' include { PICARD_COLLECTRNASEQMETRICS } from '../../modules/local/picard/collectrnaseqmetrics/main' include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/picard/markduplicates/main' workflow QC_WORKFLOW { take: - bam_sorted + ch_bam_sorted_indexed ch_chrgtf ch_refflat ch_fasta @@ -23,12 +22,7 @@ workflow QC_WORKFLOW { ch_versions = ch_versions.mix(QUALIMAP_RNASEQ.out.versions) ch_qualimap_qc = Channel.empty().mix(QUALIMAP_RNASEQ.out.results) - SAMTOOLS_INDEX_FOR_QC(bam_sorted) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_QC.out.versions) - - bam_indexed = bam_sorted.join(SAMTOOLS_INDEX_FOR_QC.out.bai) - - PICARD_COLLECTRNASEQMETRICS(bam_indexed, ch_refflat, ch_rrna_interval) + PICARD_COLLECTRNASEQMETRICS(ch_bam_sorted_indexed, ch_refflat, ch_rrna_interval) ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 510bc778..b196d117 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -240,7 +240,7 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( - STARFUSION_WORKFLOW.out.bam_sorted, + STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, ch_chrgtf, ch_refflat, ch_fasta, From 6c2a58002cb362fd9e9d860bb16da496854b2109 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 17:28:09 +0200 Subject: [PATCH 30/83] update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03e58659..11d7eb1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Use institutional configs by default [#381](https://github.com/nf-core/rnafusion/pull/381) - +- Remove redundant indexing in starfusion and qc workflows +- Output bai files in same directory as bam files [#373](https://github.com/nf-core/rnafusion/issues/373) ### Fixed - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) From cfec4795991e39827def7153a46f614ced72697f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 17:29:47 +0200 Subject: [PATCH 31/83] prettier --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11d7eb1b..b0d6c948 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use institutional configs by default [#381](https://github.com/nf-core/rnafusion/pull/381) - Remove redundant indexing in starfusion and qc workflows - Output bai files in same directory as bam files [#373](https://github.com/nf-core/rnafusion/issues/373) + ### Fixed - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) From 1160d70037b6a2827636761afea219ef048a33b4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 17:32:43 +0200 Subject: [PATCH 32/83] fix channel i/o --- subworkflows/local/qc_workflow.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index aac1a1d7..56e19425 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -18,7 +18,7 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - QUALIMAP_RNASEQ(bam_sorted, ch_chrgtf) + QUALIMAP_RNASEQ(ch_bam_sorted_indexed, ch_chrgtf) ch_versions = ch_versions.mix(QUALIMAP_RNASEQ.out.versions) ch_qualimap_qc = Channel.empty().mix(QUALIMAP_RNASEQ.out.results) @@ -26,7 +26,7 @@ workflow QC_WORKFLOW { ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) - PICARD_MARKDUPLICATES(bam_sorted, ch_fasta, ch_fai) + PICARD_MARKDUPLICATES(ch_bam_sorted_indexed, ch_fasta, ch_fai) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES.out.versions) ch_duplicate_metrics = Channel.empty().mix(PICARD_MARKDUPLICATES.out.metrics) From 02fe176847cc347e593f00647c784c8db0d09b64 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 17:39:25 +0200 Subject: [PATCH 33/83] fix channel i/o as bam_sorted is necessary for some PICARD processes --- subworkflows/local/qc_workflow.nf | 5 +++-- subworkflows/local/starfusion_workflow.nf | 5 +++-- workflows/rnafusion.nf | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 56e19425..066cd2cd 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -8,6 +8,7 @@ include { PICARD_MARKDUPLICATES } from '../../modules/nf-co workflow QC_WORKFLOW { take: + ch_bam_sorted ch_bam_sorted_indexed ch_chrgtf ch_refflat @@ -17,7 +18,7 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - + bam_sorted QUALIMAP_RNASEQ(ch_bam_sorted_indexed, ch_chrgtf) ch_versions = ch_versions.mix(QUALIMAP_RNASEQ.out.versions) ch_qualimap_qc = Channel.empty().mix(QUALIMAP_RNASEQ.out.results) @@ -26,7 +27,7 @@ workflow QC_WORKFLOW { ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) - PICARD_MARKDUPLICATES(ch_bam_sorted_indexed, ch_fasta, ch_fai) + PICARD_MARKDUPLICATES(bam_sorted, ch_fasta, ch_fai) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES.out.versions) ch_duplicate_metrics = Channel.empty().mix(PICARD_MARKDUPLICATES.out.metrics) diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index 1656ec7a..4120bc79 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -51,8 +51,9 @@ workflow STARFUSION_WORKFLOW { emit: fusions = ch_starfusion_fusions star_stats = ch_star_stats - bam_sorted = ch_align - versions = ch_versions.ifEmpty(null) + ch_bam_sorted = ch_align ch_bam_sorted_indexed = bam_sorted_indexed.ifEmpty(null) + versions = ch_versions.ifEmpty(null) + } diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index b196d117..426e6acf 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -240,6 +240,7 @@ workflow RNAFUSION { //QC QC_WORKFLOW ( + STARFUSION_WORKFLOW.out.ch_bam_sorted, STARFUSION_WORKFLOW.out.ch_bam_sorted_indexed, ch_chrgtf, ch_refflat, From f5c0dc9c592d0b372376413d2739d709e5325fd8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 17:46:12 +0200 Subject: [PATCH 34/83] fix channel i/o --- subworkflows/local/qc_workflow.nf | 4 ++-- workflows/rnafusion.nf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 066cd2cd..9a341f2d 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -18,7 +18,7 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - bam_sorted + QUALIMAP_RNASEQ(ch_bam_sorted_indexed, ch_chrgtf) ch_versions = ch_versions.mix(QUALIMAP_RNASEQ.out.versions) ch_qualimap_qc = Channel.empty().mix(QUALIMAP_RNASEQ.out.results) @@ -27,7 +27,7 @@ workflow QC_WORKFLOW { ch_versions = ch_versions.mix(PICARD_COLLECTRNASEQMETRICS.out.versions) ch_rnaseq_metrics = Channel.empty().mix(PICARD_COLLECTRNASEQMETRICS.out.metrics) - PICARD_MARKDUPLICATES(bam_sorted, ch_fasta, ch_fai) + PICARD_MARKDUPLICATES(ch_bam_sorted, ch_fasta, ch_fai) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES.out.versions) ch_duplicate_metrics = Channel.empty().mix(PICARD_MARKDUPLICATES.out.metrics) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 426e6acf..6612a607 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -207,7 +207,7 @@ workflow RNAFUSION { //Run stringtie STRINGTIE_WORKFLOW ( - STARFUSION_WORKFLOW.out.bam_sorted, + STARFUSION_WORKFLOW.out.ch_bam_sorted, ch_chrgtf ) ch_versions = ch_versions.mix(STRINGTIE_WORKFLOW.out.versions.first().ifEmpty(null)) From 22c58623c39fb5ca4a878085d2f462974e8fffc5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 18:23:21 +0200 Subject: [PATCH 35/83] fix channel i/o --- subworkflows/local/qc_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_workflow.nf b/subworkflows/local/qc_workflow.nf index 9a341f2d..bdf887d1 100644 --- a/subworkflows/local/qc_workflow.nf +++ b/subworkflows/local/qc_workflow.nf @@ -19,7 +19,7 @@ workflow QC_WORKFLOW { main: ch_versions = Channel.empty() - QUALIMAP_RNASEQ(ch_bam_sorted_indexed, ch_chrgtf) + QUALIMAP_RNASEQ(ch_bam_sorted, ch_chrgtf) ch_versions = ch_versions.mix(QUALIMAP_RNASEQ.out.versions) ch_qualimap_qc = Channel.empty().mix(QUALIMAP_RNASEQ.out.results) From 74e94ea6bc044f4e7bccf4d5fbeb419967c79d9d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 28 Aug 2023 22:06:56 +0200 Subject: [PATCH 36/83] fix channel i/o for empty channels --- subworkflows/local/starfusion_workflow.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/starfusion_workflow.nf b/subworkflows/local/starfusion_workflow.nf index 4120bc79..c9ba4bf3 100644 --- a/subworkflows/local/starfusion_workflow.nf +++ b/subworkflows/local/starfusion_workflow.nf @@ -51,8 +51,8 @@ workflow STARFUSION_WORKFLOW { emit: fusions = ch_starfusion_fusions star_stats = ch_star_stats - ch_bam_sorted = ch_align - ch_bam_sorted_indexed = bam_sorted_indexed.ifEmpty(null) + ch_bam_sorted = ch_align.ifEmpty([[],[]]) + ch_bam_sorted_indexed = bam_sorted_indexed.ifEmpty([[],[],[]]) versions = ch_versions.ifEmpty(null) } From 0bc1378f25b30a6c287fa20bd99587efac12e608 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 30 Aug 2023 10:20:04 +0200 Subject: [PATCH 37/83] link PR instead of issue --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0d6c948..0fe75721 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,8 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Use institutional configs by default [#381](https://github.com/nf-core/rnafusion/pull/381) -- Remove redundant indexing in starfusion and qc workflows -- Output bai files in same directory as bam files [#373](https://github.com/nf-core/rnafusion/issues/373) +- Remove redundant indexing in starfusion and qc workflows [#387](https://github.com/nf-core/rnafusion/pull/387) +- Output bai files in same directory as bam files [#387](https://github.com/nf-core/rnafusion/pull/387) ### Fixed From ea8d9eca51b6bac0d141702be364d8d1a74f290e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 30 Aug 2023 10:35:08 +0200 Subject: [PATCH 38/83] update changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77bafca0..a24b1262 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,8 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Tail trimming for reverse reads [#379](https://github.com/nf-core/rnafusion/pull/379) - Set html files as optional in fusionreport [#380](https://github.com/nf-core/rnafusion/pull/380) -- Provide gene count file by default when running STAR_FOR_STARFUSION [#370](https://github.com/nf-core/rnafusion/issues/370) -- Fix fusion-report issue with MACOXS directories [#377](https://github.com/nf-core/rnafusion/issues/377) +- Provide gene count file by default when running STAR_FOR_STARFUSION [#385](https://github.com/nf-core/rnafusion/pull/385) +- Fix fusion-report issue with MACOXS directories [#386](https://github.com/nf-core/rnafusion/pull/386) ### Removed From ca52d587fea08aaf311d594fac85134e614e1310 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:35:19 +0200 Subject: [PATCH 39/83] add branch in case of no fusions --- subworkflows/local/fusioninspector_workflow.nf | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/fusioninspector_workflow.nf b/subworkflows/local/fusioninspector_workflow.nf index 388f42a6..3602645f 100644 --- a/subworkflows/local/fusioninspector_workflow.nf +++ b/subworkflows/local/fusioninspector_workflow.nf @@ -15,19 +15,23 @@ workflow FUSIONINSPECTOR_WORKFLOW { main: ch_versions = Channel.empty() index ="${params.starfusion_ref}" - ch_fusion_list = params.fusioninspector_filter ? fusion_list_filtered : fusion_list + ch_fusion_list = ( params.fusioninspector_filter ? fusion_list_filtered : fusion_list ) + .branch{ + no_fusions: it[1].size() == 0 + fusions: it[1].size() > 0 + } if (params.whitelist) { - ch_whitelist = ch_fusion_list.combine(Channel.value(file(params.whitelist, checkIfExists:true))) + ch_whitelist = ch_fusion_list.fusions.combine(Channel.value(file(params.whitelist, checkIfExists:true))) .map { meta, fusions, whitelist -> [ meta, [fusions, whitelist] ] } CAT_CAT(ch_whitelist) // fusioninspector takes care of possible duplicates ch_versions = ch_versions.mix(CAT_CAT.out.versions) - ch_fusion_list = CAT_CAT.out.file_out + ch_fusion_list.fusions = CAT_CAT.out.file_out } - reads_fusion = reads.join(ch_fusion_list ) + reads_fusion = reads.join(ch_fusion_list.fusions ) FUSIONINSPECTOR( reads_fusion, index) ch_versions = ch_versions.mix(FUSIONINSPECTOR.out.versions) From 6b799843239247e48de5539980f9b117b99b35cc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 4 Sep 2023 12:30:44 +0200 Subject: [PATCH 40/83] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e57f2ea6..3442440b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Set html files as optional in fusionreport [#380](https://github.com/nf-core/rnafusion/pull/380) - Provide gene count file by default when running STAR_FOR_STARFUSION [#385](https://github.com/nf-core/rnafusion/pull/385) - Fix fusion-report issue with MACOXS directories [#386](https://github.com/nf-core/rnafusion/pull/386) +- The fusion lists is updated to contain to branches, one in case no fusions are detected and one for if fusions are detected, that will be used to feed to fusioninspector, megafusion, arriba visualisation [#388](https://github.com/nf-core/rnafusion/pull/388) ### Removed From 72ee2ec186eec1e44e03704d66c9ec6314ac149d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:26:29 +0200 Subject: [PATCH 41/83] Update CHANGELOG.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3442440b..731dadb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Set html files as optional in fusionreport [#380](https://github.com/nf-core/rnafusion/pull/380) - Provide gene count file by default when running STAR_FOR_STARFUSION [#385](https://github.com/nf-core/rnafusion/pull/385) - Fix fusion-report issue with MACOXS directories [#386](https://github.com/nf-core/rnafusion/pull/386) -- The fusion lists is updated to contain to branches, one in case no fusions are detected and one for if fusions are detected, that will be used to feed to fusioninspector, megafusion, arriba visualisation [#388](https://github.com/nf-core/rnafusion/pull/388) +- The fusion lists is updated to contain two branches, one in case no fusions are detected and one for if fusions are detected, that will be used to feed to fusioninspector, megafusion, arriba visualisation [#388](https://github.com/nf-core/rnafusion/pull/388) ### Removed From 96cc533c5fc95baea653499f56f2ce6290eb512c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 13:42:17 +0200 Subject: [PATCH 42/83] remove sorting and indexing of star_for_arriba bam, changing filenames --- conf/modules.config | 5 ++++- subworkflows/local/arriba_workflow.nf | 18 ++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 4bee29b3..a13d8b10 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -210,7 +210,7 @@ process { } withName: SAMTOOLS_SORT_FOR_ARRIBA { - ext.prefix = { "${meta.id}_sorted" } + ext.prefix = { "${meta.id}_star_for_arriba_sorted" } publishDir = [ path: { "${params.outdir}/samtools_sort_for_arriba" }, mode: params.publish_dir_mode, @@ -229,6 +229,7 @@ process { withName: SAMTOOLS_VIEW_FOR_ARRIBA { ext.args = { "--output-fmt cram" } + ext.prefix = { "${meta.id}_star_for_arriba" } publishDir = [ path: { "${params.outdir}/cram_arriba" }, mode: params.publish_dir_mode, @@ -248,6 +249,7 @@ process { withName: SAMTOOLS_VIEW_FOR_SQUID_CRAM { ext.args = { "--output-fmt cram" } + ext.prefix = { "${meta.id}_star_for_squid_sorted" } publishDir = [ path: { "${params.outdir}/cram_squid" }, mode: params.publish_dir_mode, @@ -267,6 +269,7 @@ process { withName: SAMTOOLS_VIEW_FOR_STARFUSION { ext.args = { "--output-fmt cram" } + ext.prefix = { "${meta.id}_star_for_starfusion_sorted" } publishDir = [ path: { "${params.outdir}/cram_starfusion" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 9f770190..114e64ba 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -23,16 +23,7 @@ workflow ARRIBA_WORKFLOW { STAR_FOR_ARRIBA( reads, ch_starindex_ref, ch_gtf, params.star_ignore_sjdbgtf, '', params.seq_center ?: '') ch_versions = ch_versions.mix(STAR_FOR_ARRIBA.out.versions) - SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions) - - SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions) - - bam_indexed = SAMTOOLS_SORT_FOR_ARRIBA.out.bam.join(SAMTOOLS_INDEX_FOR_ARRIBA.out.bai) - if (params.arriba_fusions) { - // [meta, reads], fusions -> [meta, fusions] ch_arriba_fusions = reads.combine( Channel.value( file( params.arriba_fusions, checkIfExists: true ) ) ) .map { meta, reads, fusions -> [ meta, fusions ] } ch_arriba_fusion_fail = ch_dummy_file @@ -45,9 +36,16 @@ workflow ARRIBA_WORKFLOW { } if (params.cram.contains('arriba') ){ + // SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam) + // ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions) + + // SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam) + // ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions) + + bam_indexed = SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] } + SAMTOOLS_VIEW_FOR_ARRIBA(bam_indexed, ch_fasta, []) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) - } From 2bf946a05344a2e7f1ede4eba374d74cb9bfb945 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 15:46:11 +0200 Subject: [PATCH 43/83] add filename changes --- conf/modules.config | 5 +++-- modules/local/fusionreport/detect/main.nf | 1 + subworkflows/local/arriba_workflow.nf | 9 +-------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a13d8b10..6ff57e26 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -36,7 +36,8 @@ process { } withName: ARRIBA_VISUALISATION { - ext.when = { !params.fusioninspector_only && (params.starfusion || params.all) } + ext.when = { !params.fusioninspector_only && (params.starfusion || params.all) } + ext.prefix = { "${meta.id}_combined_fusions_arriba_visualisation" } publishDir = [ path: { "${params.outdir}/arriba_visualisation" }, mode: params.publish_dir_mode, @@ -269,7 +270,7 @@ process { withName: SAMTOOLS_VIEW_FOR_STARFUSION { ext.args = { "--output-fmt cram" } - ext.prefix = { "${meta.id}_star_for_starfusion_sorted" } + ext.prefix = { "${meta.id}.star_for_starfusion.Aligned.sortedByCoord.out" } publishDir = [ path: { "${params.outdir}/cram_starfusion" }, mode: params.publish_dir_mode, diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 0b18c34a..3d5853a7 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -37,6 +37,7 @@ process FUSIONREPORT { mv fusion_list.tsv ${prefix}.fusionreport.tsv mv fusion_list_filtered.tsv ${prefix}.fusionreport_filtered.tsv + mv index.html ${prefix}_fusionreport_index.html [ ! -f fusions.csv ] || mv fusions.csv ${prefix}.fusions.csv [ ! -f fusions.json ] || mv fusions.json ${prefix}.fusions.json diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 114e64ba..3255d6d9 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -36,15 +36,8 @@ workflow ARRIBA_WORKFLOW { } if (params.cram.contains('arriba') ){ - // SAMTOOLS_SORT_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam) - // ch_versions = ch_versions.mix(SAMTOOLS_SORT_FOR_ARRIBA.out.versions) - // SAMTOOLS_INDEX_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam) - // ch_versions = ch_versions.mix(SAMTOOLS_INDEX_FOR_ARRIBA.out.versions) - - bam_indexed = SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] } - - SAMTOOLS_VIEW_FOR_ARRIBA(bam_indexed, ch_fasta, []) + SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) } From 00b97e84e72d37677b0e3f6681d18d2223cdf3fa Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 16:47:08 +0200 Subject: [PATCH 44/83] remove trimmed fastqc report from multiqc --- workflows/rnafusion.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/rnafusion.nf b/workflows/rnafusion.nf index 1fbaee3e..6f498e11 100644 --- a/workflows/rnafusion.nf +++ b/workflows/rnafusion.nf @@ -288,7 +288,6 @@ workflow RNAFUSION { ch_multiqc_files = ch_multiqc_files.mix(STARFUSION_WORKFLOW.out.star_stats.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.rnaseq_metrics.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_WORKFLOW.out.duplicate_metrics.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TRIM_WORKFLOW.out.ch_reports.ifEmpty([])) From 08e48316f6707b6661412a274ede2c4eec072e63 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 16:49:02 +0200 Subject: [PATCH 45/83] remove channels needed from the trim workflow to the multiqc report --- subworkflows/local/trim_workflow.nf | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/subworkflows/local/trim_workflow.nf b/subworkflows/local/trim_workflow.nf index 01baeec7..bf3781f8 100644 --- a/subworkflows/local/trim_workflow.nf +++ b/subworkflows/local/trim_workflow.nf @@ -10,7 +10,6 @@ workflow TRIM_WORKFLOW { main: ch_versions = Channel.empty() - ch_reports = Channel.empty() if (params.trim) { @@ -21,7 +20,6 @@ workflow TRIM_WORKFLOW { ch_reads_all = reads ch_reads_fusioncatcher = REFORMAT.out.reads_out - ch_reports = FASTQC_FOR_TRIM.out.zip.collect{it[1]}.ifEmpty([]) } else if (params.fastp_trim) { FASTP(reads, params.adapter_fasta, false, false) @@ -32,11 +30,7 @@ workflow TRIM_WORKFLOW { ch_reads_all = FASTP.out.reads ch_reads_fusioncatcher = ch_reads_all - ch_reports = ch_reports.mix( - FASTQC_FOR_FASTP.out.zip.collect{it[1]}.ifEmpty([]), - FASTP.out.json.collect{meta, json -> json}, - FASTP.out.html.collect{meta, html -> html} - ) + } else { ch_reads_all = reads @@ -46,7 +40,6 @@ workflow TRIM_WORKFLOW { emit: ch_reads_all ch_reads_fusioncatcher - ch_reports versions = ch_versions.ifEmpty(null) } From 7cc05672c4489d4ec2c8d09f395d6d380dacbdfb Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 16:51:27 +0200 Subject: [PATCH 46/83] fix arriba cram from bam used in arriba --- subworkflows/local/arriba_workflow.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 3255d6d9..5bbd7ea2 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -37,7 +37,7 @@ workflow ARRIBA_WORKFLOW { if (params.cram.contains('arriba') ){ - SAMTOOLS_VIEW_FOR_ARRIBA(SAMTOOLS_SORT_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) + SAMTOOLS_VIEW_FOR_ARRIBA(STAR_FOR_ARRIBA.out.bam.map { meta, bam -> [ meta, bam, [] ] }, ch_fasta, []) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_FOR_ARRIBA.out.versions ) } From 4ff060eb227e10de39e67f495337138b10f1d4d8 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 16:57:50 +0200 Subject: [PATCH 47/83] remove specification for unused modules --- conf/modules.config | 19 +------------------ subworkflows/local/arriba_workflow.nf | 2 -- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 6ff57e26..29d28a9f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -186,14 +186,6 @@ process { ] } - withName: SAMTOOLS_INDEX_FOR_ARRIBA { - publishDir = [ - path: { "${params.outdir}/star_for_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: SAMTOOLS_INDEX_FOR_STARFUSION { publishDir = [ path: { "${params.outdir}/star_for_starfusion" }, @@ -202,7 +194,7 @@ process { ] } - withName: SAMTOOLS_FAIDX { + withName: SAMTOOLS_FAIDX { publishDir = [ path: { "${params.genomes_base}/ensembl" }, mode: params.publish_dir_mode, @@ -210,15 +202,6 @@ process { ] } - withName: SAMTOOLS_SORT_FOR_ARRIBA { - ext.prefix = { "${meta.id}_star_for_arriba_sorted" } - publishDir = [ - path: { "${params.outdir}/samtools_sort_for_arriba" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: SAMTOOLS_SORT_FOR_SQUID_CHIMERIC { ext.prefix = { "${meta.id}_chimeric_sorted" } publishDir = [ diff --git a/subworkflows/local/arriba_workflow.nf b/subworkflows/local/arriba_workflow.nf index 5bbd7ea2..36c3924f 100644 --- a/subworkflows/local/arriba_workflow.nf +++ b/subworkflows/local/arriba_workflow.nf @@ -1,6 +1,4 @@ include { ARRIBA } from '../../modules/nf-core/arriba/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_FOR_ARRIBA} from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_FOR_ARRIBA } from '../../modules/nf-core/samtools/sort/main' include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_FOR_ARRIBA} from '../../modules/nf-core/samtools/view/main' include { STAR_ALIGN as STAR_FOR_ARRIBA } from '../../modules/nf-core/star/align/main' From d61601a53f00b58fad920e8b4c826883601d732d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 6 Sep 2023 16:58:59 +0200 Subject: [PATCH 48/83] change regex to emit fusionreport index --- modules/local/fusionreport/detect/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 3d5853a7..e3ea5149 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -15,7 +15,7 @@ process FUSIONREPORT { path "versions.yml" , emit: versions tuple val(meta), path("*fusionreport.tsv") , emit: fusion_list tuple val(meta), path("*fusionreport_filtered.tsv") , emit: fusion_list_filtered - tuple val(meta), path("index.html") , emit: report + tuple val(meta), path("*index.html") , emit: report tuple val(meta), path("*_*.html") , optional:true, emit: html tuple val(meta), path("*.csv") , optional:true, emit: csv tuple val(meta), path("*.json") , optional:true, emit: json From cae8374a9c5754d21a1fdb542cffded3d728cd12 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:21:10 +0200 Subject: [PATCH 49/83] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e57f2ea6..854e8bba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +- Removed trimmed fastqc report from multiqc [#394](https://github.com/nf-core/rnafusion/pull/394) + ## v2.3.0 = [2022/04/24] ### Added From 060650fc7b442cbe51705102e0a7b5a19f4c1b67 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:31:15 +0200 Subject: [PATCH 50/83] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e57f2ea6..854e8bba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +- Removed trimmed fastqc report from multiqc [#394](https://github.com/nf-core/rnafusion/pull/394) + ## v2.3.0 = [2022/04/24] ### Added From 9ce149c305c3742029fb2c3f9c265682c36e1461 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:44:54 +0200 Subject: [PATCH 51/83] reverse squid change --- conf/modules.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 29d28a9f..911fe292 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -233,7 +233,6 @@ process { withName: SAMTOOLS_VIEW_FOR_SQUID_CRAM { ext.args = { "--output-fmt cram" } - ext.prefix = { "${meta.id}_star_for_squid_sorted" } publishDir = [ path: { "${params.outdir}/cram_squid" }, mode: params.publish_dir_mode, From 57337c237b28f49622e269c8fcf27cb4529d90a4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:48:42 +0200 Subject: [PATCH 52/83] update changelog --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 854e8bba..056aa71e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -- Removed trimmed fastqc report from multiqc [#394](https://github.com/nf-core/rnafusion/pull/394) +- `samtools sort` and `samtools index` for `arriba` workflow were dispensable and were removed [#395](https://github.com/nf-core/rnafusion/pull/395) ## v2.3.0 = [2022/04/24] @@ -39,6 +39,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Arriba` visualisation now runs for FusionInspector (combined tools) results, not only `Arriba` results - Updated metro map with trimming options and placed `Arriba` visualisation after `FusionInspector` - Exit with error when using squid in combination with any ensembl version different from 102 +- Renaming [#395](https://github.com/nf-core/rnafusion/pull/395) + - `Arriba` visualisation pdf from meta.id to meta.id_combined_fusions_arriba_visualisation + - cram file from output bam of `STAR_FOR_ARRIBA`: meta.id to meta.id_star_for_arriba + - cram file from output bam of `STAR_FOR_STARFUSION`: meta.id to meta.id.star_for_starfusion.Aligned.sortedByCoord.out + - `fusion-report` index.html file to meta.id_fusionreport_index.html ### Fixed From 0b02de31fabde245f1c83b9f93e4150cba8d94fc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 11 Sep 2023 12:18:11 +0200 Subject: [PATCH 53/83] update intro and usage documentation --- README.md | 122 ++++++++++---------- bin/get_rrna_transcripts.py | 1 - docs/usage.md | 223 +++++++++++++++--------------------- 3 files changed, 153 insertions(+), 193 deletions(-) diff --git a/README.md b/README.md index 3f667dea..17559918 100644 --- a/README.md +++ b/README.md @@ -12,24 +12,7 @@ ## Introduction -**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing analysis pipeline with curated list of tools for detecting and visualizing fusion genes. - -The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! - -> **IMPORTANT: conda is not supported currently.** Run with singularity or docker. - -> GRCh38 is the only supported reference - -| Tool | Version | -| --------------------------------------------------------- | :------: | -| [Arriba](https://github.com/suhrig/arriba) | `2.3.0` | -| [FusionCatcher](https://github.com/ndaniel/fusioncatcher) | `1.33` | -| [Pizzly](https://github.com/pmelsted/pizzly) | `0.37.3` | -| [Squid](https://github.com/Kingsford-Group/squid) | `1.5` | -| [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) | `1.10.1` | -| [StringTie](https://github.com/gpertea/stringtie) | `2.2.1` | - -> Single-end reads are to be use as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. +**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results). @@ -39,54 +22,52 @@ In rnafusion the full-sized test includes reference building and fusion detectio ![nf-core/rnafusion metro map](docs/images/nf-core-rnafusion_metro_map.png) -#### Build references +### Build references -`--build_references` triggers a parallel workflow to build all references +`--build_references` triggers a parallel workflow to build references, which is a prerequisite to running the pipeline: 1. Download ensembl fasta and gtf files -2. Create STAR index -3. Download arriba references -4. Download fusioncatcher references -5. Download pizzly references (kallisto index) -6. Download and build STAR-fusion references -7. Download fusion-report DBs +2. Create [STAR](https://github.com/alexdobin/STAR) index +3. Download [Arriba](https://github.com/suhrig/arriba) references +4. Download [FusionCatcher](https://github.com/ndaniel/fusioncatcher) references +5. Download [Pizzly](https://github.com/pmelsted/pizzly) references ([kallisto](https://pachterlab.github.io/kallisto/manual) index) +6. Download and build [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) references +7. Download [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) DBs #### Main workflow 1. Input samplesheet check -2. Concatenate fastq files per sample -3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -4. Arriba subworkflow - - [STAR](https://github.com/alexdobin/STAR) alignment - - [Samtool](https://github.com/samtools/samtools) sort - - [Samtool](https://github.com/samtools/samtools) index - - [Arriba](https://github.com/suhrig/arriba) fusion detection -5. Pizzly subworkflow - - [Kallisto](https://pachterlab.github.io/kallisto/) quantification - - [Pizzly](https://github.com/pmelsted/pizzly) fusion detection -6. Squid subworkflow - - [STAR](https://github.com/alexdobin/STAR) alignment - - [Samtools view](http://www.htslib.org/): convert sam output from STAR to bam - - [Samtools sort](http://www.htslib.org/): bam output from STAR - - [SQUID](https://github.com/Kingsford-Group/squid) fusion detection - - [SQUID](https://github.com/Kingsford-Group/squid) annotate -7. STAR-fusion subworkflow - - [STAR](https://github.com/alexdobin/STAR) alignment - - [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) fusion detection -8. Fusioncatcher subworkflow - - [FusionCatcher](https://github.com/ndaniel/fusioncatcher) fusion detection -9. Fusion-report subworkflow - - Merge all fusions detected by the different tools - - [Fusion-report](https://github.com/matq007/fusion-report) -10. FusionInspector subworkflow +2. Concatenate fastq files per sample ([cat](http://www.linfo.org/cat.html)) +3. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) +4. Optional trimming with [fastp](https://github.com/OpenGene/fastp) +5. Arriba subworkflow + - [STAR](https://github.com/alexdobin/STAR) alignment + - [Arriba](https://github.com/suhrig/arriba) fusion detection +6. Pizzly subworkflow + - [Kallisto](https://pachterlab.github.io/kallisto/) quantification + - [Pizzly](https://github.com/pmelsted/pizzly) fusion detection +7. Squid subworkflow + - [STAR](https://github.com/alexdobin/STAR) alignment + - [Samtools view](http://www.htslib.org/): convert sam output from STAR to bam + - [Samtools sort](http://www.htslib.org/): bam output from STAR + - [SQUID](https://github.com/Kingsford-Group/squid) fusion detection + - [SQUID](https://github.com/Kingsford-Group/squid) annotate +8. STAR-fusion subworkflow + - [STAR](https://github.com/alexdobin/STAR) alignment + - [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) fusion detection +9. Fusioncatcher subworkflow + - [FusionCatcher](https://github.com/ndaniel/fusioncatcher) fusion detection +10. StringTie subworkflow + - [StringTie](https://ccb.jhu.edu/software/stringtie/) +11. Fusion-report + - Merge all fusions detected by the selected tools with [Fusion-report](https://github.com/Clinical-Genomics/fusion-report) +12. Post-processing and analysis of data - [FusionInspector](https://github.com/FusionInspector/FusionInspector) - [Arriba](https://github.com/suhrig/arriba) visualisation -11. Stringtie subworkflow - - [StringTie](https://ccb.jhu.edu/software/stringtie/index.shtml) -12. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) -13. QC for mapped reads ([`QualiMap: BAM QC`](https://kokonech.github.io/qualimap/HG00096.chr20_bamqc/qualimapReport.html)) -14. Index mapped reads ([samtools index](http://www.htslib.org/)) -15. Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-) and ([`picard MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) + - QC for mapped reads ([`QualiMap: BAM QC`](https://kokonech.github.io/qualimap/HG00096.chr20_bamqc/qualimapReport.html)) + - Collect metrics ([`picard CollectRnaSeqMetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360037057492-CollectRnaSeqMetrics-Picard-) and ([`picard MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) +13. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +14. Compress bam files to cram with [samtools view](http://www.htslib.org/) ## Usage @@ -95,23 +76,36 @@ In rnafusion the full-sized test includes reference building and fusion detectio > to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) > with `-profile test` before running the workflow on actual data. -```console -nextflow run nf-core/rnafusion --input samplesheet.csv --outdir --genome GRCh38 --all -profile -``` +As the reference building is computationally heavy (> 24h on HPC), it is recommended to test the pipeline with the `-stub` parameter (creation of empty files): + +First build the references: ```bash -nextflow run nf-core/rnafusion --input samplesheet.csv --outdir --genome GRCh37 -profile +nextflow run nf-core/rnafusion \ + -profile \ + -profile test \ + --outdir \ + --build_references \ + -stub ``` -> Note that paths need to be absolute and that runs with conda are not supported. +Then perform the analysis: ```bash nextflow run nf-core/rnafusion \ -profile \ - --input samplesheet.csv \ - --outdir + -profile test \ + --outdir \ + -stub ``` +> **Notes:** +> +> - conda is not supported currently, run with singularity or docker +> - Paths need to be absolute +> - GRCh38 is the only supported reference +> - Single-end reads are to be use as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. + > **Warning:** > Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those > provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; diff --git a/bin/get_rrna_transcripts.py b/bin/get_rrna_transcripts.py index 46812caf..670d5f06 100755 --- a/bin/get_rrna_transcripts.py +++ b/bin/get_rrna_transcripts.py @@ -8,7 +8,6 @@ def get_rrna_intervals(file_in, file_out): """ - Get the commented out header Get lines containing ``#`` or ``gene_type rRNA`` or ```` or ``gene_type rRNA_pseudogene`` or ``gene_type MT_rRNA`` Create output file diff --git a/docs/usage.md b/docs/usage.md index 48bb9e10..9df6d24e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -4,31 +4,27 @@ > _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ -## Introduction +## Pipeline summary The pipeline is divided into two parts: 1. Download and build references - specified with `--build_references` parameter - required only once before running the pipeline - - **Important**: rerun with each new release + - **Important**: has to be run with each new release 2. Detecting fusions - - Supported tools: `Arriba`, `FusionCatcher`, `pizzly`, `SQUID`, `STAR-Fusion` and `StringTie` - - QC: `Fastqc` and `MultiQC` - - Fusion visualization: `Arriba` (only fusion detected with Arriba), `fusion-report` and `FusionInspector` + - Supported tools: `Arriba`, `FusionCatcher`, `pizzly`, `SQUID`, `STAR-Fusion`, and `StringTie` + - QC: `Fastqc`, `MultiQC`, and `Qualimap rnaseq` + - Fusions visualization: `Arriba`, `fusion-report` and `FusionInspector`, VCF file creation based on `MegaFusion` -### 1. Download and build references +## Download and build references The rnafusion pipeline needs references for the fusion detection tools, so downloading these is a **requirement**. -Whilst it is possible to download and build each reference manually, it is advised to download references with the rnafusion pipeline. -First register for a free account at COSMIC at [https://cancer.sanger.ac.uk/cosmic/register](https://cancer.sanger.ac.uk/cosmic/register) using your university email. The account is **only activated upon** clicking the link in the registration email. - -Download the references as shown below including your COSMIC credentials. - -> Note that this step takes about 24 hours to complete on HPC. - -> Do not provide a samplesheet via the `input` parameter, otherwise the pipeline will run the analysis directly after downloading the references (except if that is what you want). +> **IMPORTANT** +> +> - Note that this step takes about 24 hours to complete on HPC. +> - Do not provide a samplesheet via the `input` parameter, otherwise the pipeline will run the analysis directly after downloading the references (except if that is what you want). ```bash nextflow run nf-core/rnafusion \ @@ -48,7 +44,15 @@ nextflow run nf-core/rnafusion \ --outdir ``` -#### Using QIAGEN download insead of SANGER (non-academic usage) for the COSMIC database +### Downloading the cosmic database with SANGER or QUIAGEN + +#### For academic users + +First register for a free account at COSMIC at [https://cancer.sanger.ac.uk/cosmic/register](https://cancer.sanger.ac.uk/cosmic/register) using a university email. The account is **only activated upon** clicking the link in the registration email. + +#### For non-academic users + +Use credentials from QIAGEN and add `--qiagen` ```bash nextflow run nf-core/rnafusion \ @@ -58,23 +62,13 @@ nextflow run nf-core/rnafusion \ --outdir --qiagen ``` -#### References directory tree +#### STAR-Fusion references downloaded vs built -```text -references/ -|-- arriba -|-- ensembl -|-- fusion_report_db -|-- fusioncatcher -| `-- human_v102 -|-- pizzly -|-- star -`-- starfusion -``` +By default STAR-Fusion references are **built**. You can also download them from [CTAT](https://github.com/NCIP/Trinity_CTAT/wiki) by using the flag `--starfusion_build FALSE` for both reference building and fusion detection. This allows more flexibility for different organisms but **be aware that STAR-Fusion reference download is not recommended as not fully tested!** #### Issues with building references -If process `FUSIONREPORT_DOWNLOAD` times out, it could be due to network restriction (e.g. if trying to run on HPC). As this process is lightweight in compute, storage and time, running on local machines with the following options might solve the issue: +If process `FUSIONREPORT_DOWNLOAD` times out, it could be due to network restriction (for example if trying to run on HPC). As this process is lightweight in cpu, memory and time, running on local machines with the following options might solve the issue: ```bash nextflow run nf-core/rnafusion \ @@ -85,7 +79,7 @@ nextflow run nf-core/rnafusion \ --outdir ``` -Adjustments for compute requirements can be done by feeding a custom configuration with `-c /PATH/TO/CUSTOM/CONFIG`. +Adjustments for cpu and memory requirements can be done by feeding a custom configuration with `-c /PATH/TO/CUSTOM/CONFIG`. Where the custom configuration could look like (adaptation to local machine necessary): ```text @@ -100,17 +94,36 @@ process { The four `fusion-report` files: `cosmic.db`, `fusiongdb.db`, `fusiongdb2.db`, `mitelman.db` should then be copied into the HPC `/references/fusion_report_db`. -#### Non-human references +## Running the pipeline -Non-human references, not supported by default, can be built manually and fed to rnafusion using the parameter `--_ref`. +### Samplesheet input -#### STAR-Fusion references downloaded vs built +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. The pipeline will detect whether a sample is single- or paired-end from the samplesheet - the `fastq_2` column is empty for single-end. The samplesheet has to be a comma-separated file (.csv) but can have as many columns as you desire. There is a strict requirement for the first 4 columns to match those defined in the table below with the header row included. +A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. -By default STAR-Fusion references are **built**. You can also download them from [CTAT](https://github.com/NCIP/Trinity_CTAT/wiki) by using the flag `--starfusion_build FALSE` for both reference building and fusion detection. This allows more flexibility for different organisms but **be aware that STAR-Fusion reference download is not recommended as not fully tested!** +```console +sample,fastq_1,fastq_2,strandedness +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,forward +CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz,forward +CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz,forward +TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz,,forward +TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz,,forward +TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,forward +TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,forward +``` -### 2. Detecting fusions +As you can see above for multiple runs of the same sample, the `sample` name has to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. -This step can either be run using all fusion detection tools or specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `fusioncatcher`, `pizzly`, `squid`, `starfusion`, `stringtie`) use the `--all` parameter: +| Column | Description | +| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `strandedness` | Strandedness: forward or reverse. | + +### Starting commands + +The pipeline can either be run using all fusion detection tools or specifying individual tools. Visualisation tools will be run on all fusions detected. To run all tools (`arriba`, `fusioncatcher`, `pizzly`, `squid`, `starfusion`, `stringtie`) use the `--all` parameter: ```bash nextflow run nf-core/rnafusion \ @@ -120,11 +133,7 @@ nextflow run nf-core/rnafusion \ --outdir ``` -> **IMPORTANT: Either `--all` or `--`** is necessary to run detection tools - -`--genomes_base` should be the path to the directory containing the folder `references/` that was built in step 1 `build_references`. - -Alternatively, to run only a specific detection tool use: `--tool`: +To run only a specific detection tool use: `--tool`: ```bash nextflow run nf-core/rnafusion \ @@ -134,11 +143,48 @@ nextflow run nf-core/rnafusion \ --outdir ``` +> **IMPORTANT: Either `--all` or `--`** is necessary to run detection tools + +`--genomes_base` should be the path to the directory containing the folder `references/` that was built with `--build_references`. + +Note that the pipeline will create the following files in your working directory: + +```bash +work # Directory containing the nextflow working files + # Finished results in specified location (defined with --outdir) +.nextflow_log # Log file from Nextflow +# Other nextflow hidden files, eg. history of pipeline runs and old logs. +``` + +If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. + +Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. + +> ⚠️ Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). + +The above pipeline run specified with a params file in yaml format: + +```bash +nextflow run nf-core/rnafusion -profile docker -params-file params.yaml +``` + +with `params.yaml` containing: + +```yaml +input: './samplesheet.csv' +outdir: './results/' +<...> +``` + +You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). + +### Options + #### Trimming There are 2 options to trim -1. fastp +1. Fastp In this case all tools use the trimmed reads. Quality and adapter trimming by default. In addition, tail trimming and adapter_fastq specification are possible. Example usage: ```bash @@ -152,7 +198,7 @@ nextflow run nf-core/rnafusion \ --adapter_fastq (optional) ``` -2. hard trimming +2. Hard trimming In this case, only reads fed to fusioncatcher are trimmed. This is a harsh workaround in case of high read-through. The recommended trimming is thus the fastp_trim one. The trimming is done at 75 bp from the tails. Example usage: ```bash @@ -199,7 +245,7 @@ GENE3--GENE4 #### Running FusionInspector only -FusionInspector can be run standalone with: +FusionInspector can be run as a standalone with: ```bash nextflow run nf-core/rnafusion \ @@ -227,7 +273,7 @@ nextflow run nf-core/rnafusion \ --outdir ``` -This will skip all QC-related processes. +This will skip all QC-related processes (metrics collection, `Qualimap`) #### Skipping visualisation @@ -246,83 +292,6 @@ This will skip all visualisation processes, including `fusion-report`, `FusionIn It is possible to give the output of each tool manually using the argument: `--_fusions PATH/TO/FUSION/FILE`: this feature need more testing, don't hesitate to open an issue if you encounter problems. -## Samplesheet input - -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use the `--input` parameter to specify its location. The pipeline will detect whether a sample is single- or paired-end from the samplesheet - the `fastq_2` column is empty for single-end. The samplesheet has to be a comma-separated file (.csv) but can have as many columns as you desire. There is a strict requirement for the first 4 columns to match those defined in the table below with the header row included. -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. - -```console -sample,fastq_1,fastq_2,strandedness -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,forward -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz,forward -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz,forward -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz,,forward -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz,,forward -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,forward -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,forward -``` - -| Column | Description | -| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `strandedness` | Strandedness: forward or reverse. | - -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. - -As you can see above for multiple runs of the same sample, the `sample` name has to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: - -```bash -sample,fastq_1,fastq_2,strandedness -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,forward -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,forward -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,forward -``` - -## Running the pipeline - -The typical command for running the pipeline is as follows. - -```bash -nextflow run nf-core/rnafusion --input ./samplesheet.csv --outdir ./results -profile docker -``` - -This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. - -Note that the pipeline will create the following files in your working directory: - -```bash -work # Directory containing the nextflow working files - # Finished results in specified location (defined with --outdir) -.nextflow_log # Log file from Nextflow -# Other nextflow hidden files, eg. history of pipeline runs and old logs. -``` - -If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. - -Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. - -> ⚠️ Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). - -The above pipeline run specified with a params file in yaml format: - -```bash -nextflow run nf-core/rnafusion -profile docker -params-file params.yaml -``` - -with `params.yaml` containing: - -```yaml -input: './samplesheet.csv' -outdir: './results/' -<...> -``` - -You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). - -### Options - #### Set different `--limitSjdbInsertNsj` parameter There are two parameters to increase the `--limitSjdbInsertNsj` parameter if necessary: @@ -330,6 +299,11 @@ There are two parameters to increase the `--limitSjdbInsertNsj` parameter if nec - `--fusioncatcher_limitSjdbInsertNsj`, default: 2000000 - `--fusioninspector_limitSjdbInsertNsj`, default: 1000000 +Use the parameter `--cram` to compress the BAM files to CRAM for specific tools. Options: arriba, squid, starfusion. Leave no space between options: + +- `--cram arriba,squid,starfusion`, default: [] +- `--cram arriba` + ### 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: @@ -338,13 +312,6 @@ When you run the above command, Nextflow automatically pulls the pipeline code f nextflow pull nf-core/rnafusion ``` -#### Compress to CRAM file - -Use the parameter `--cram` to compress the BAM files to CRAM for specific tools. Options: arriba, squid, starfusion. Leave no space between options: - -- `--cram arriba,squid,starfusion`, default: [] -- `--cram arriba` - ### Reproducibility It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. From 23945d30b6908ef1620d058bf90bad2500cd3a94 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:34:36 +0200 Subject: [PATCH 54/83] update citations --- CITATIONS.md | 37 +++++++++++++++++++++++++++++------- README.md | 24 +++++++++++------------ assets/samplesheet.csv | 2 -- assets/samplesheet_valid.csv | 2 -- 4 files changed, 42 insertions(+), 23 deletions(-) delete mode 100644 assets/samplesheet.csv delete mode 100644 assets/samplesheet_valid.csv diff --git a/CITATIONS.md b/CITATIONS.md index dca1640e..42e5e50c 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,34 +10,57 @@ ## Pipeline tools -- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) +- [Arriba](https://github.com/suhrig/arriba) - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. Available online https://www.bioinformatics.babraham.ac.uk/projects/fastqc/. + > Uhrig S, Ellermann J, Walther T, Burkhardt P, Fröhlich M, Hutter B, Toprak UH, Neumann O, Stenzinger A, Scholl C, Fröhling S, Brors B. Accurate and efficient detection of gene fusions from RNA sequencing data. Genome Research. 2021 Mar 31;448-460. doi: 10.1101/gr.257246.119. Epub 2021 Jan 13. PubMed PMID: 33441414. -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +- [BEDOPS](https://bedops.readthedocs.io/en/latest/index.html) - convert2bed - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + > Neph S, Scott Kuehn M, Reynolds AP, Haugen E, Thurman RE, Johnson AK, Rynes E, Maurano MT, Vierstra J, Thomas S, Sandstrom R, Humbert R, Stamatoyannopoulos JA. BEDOPS: high-performance genomic feature operations. Bioinformatics. 2012 May, 28 (14): 1919-1920. doi: 10.1093/bioinformatics/bts277, PubMed PMID: PMID: 22576172. -- [Arriba](https://github.com/suhrig/arriba) +- [FastP](https://academic.oup.com/bioinformatics/article/34/17/i884/5093234) - > Uhrig S, Ellermann J, Walther T, Burkhardt P, Fröhlich M, Hutter B, Toprak UH, Neumann O, Stenzinger A, Scholl C, Fröhling S, Brors B. Accurate and efficient detection of gene fusions from RNA sequencing data. - > Genome Research. 2021 Mar 31;448-460. doi: 10.1101/gr.257246.119. Epub 2021 Jan 13. PubMed PMID: 33441414; PubMed Central PMCID: PMC7919457. + > Shifu Chen, Yanqing Zhou, Yaru Chen, Jia Gu. fastp: an ultra-fast all-in-one FASTQ preprocessor. Bioinformatics. 2018 Sept 34:17 (i884–i890), doi: 10.1093/bioinformatics/bty560. PubMed PMID: 30423086. PubMed Central PMCID: PMC6129281 + +- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + + > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. Available online https://www.bioinformatics.babraham.ac.uk/projects/fastqc/. - [FusionCatcher](https://github.com/ndaniel/fusioncatcher) > Nicorici D, Satalan M, Edgren H, Kangaspeska S, Murumagi A, Kallioniemi O, Virtanen S, Kilkku O. FusionCatcher – a tool for finding somatic fusion genes in paired-end RNA-sequencing data. BioRxiv, 2014 Nov. doi: 10.1101/011650. +- [FusionInspector](https://github.com/FusionInspector/FusionInspector) + + > Haas BJ, Dobin A, Ghandi M, Van Arsdale A, Tickle T, Robinson JT, Gillani R, Kasif S, Regev A. Targeted in silico characterization of fusion transcripts in tumor and normal tissues via FusionInspector. Cell Reports Methods. 2023 May 3:5, doi: 10.1016/j.crmeth.2023.100467, PMID: 37323575 + - [Fusion-report](https://github.com/matq007/fusion-report) > Proks M, Genomic Profiling of a Comprehensive Nation-wide Collection of Childhood Solid Tumors, Master Thesis, Supervisors: Grøntved L, Díaz de Ståhl T, Nistér M, Ewels P, Garcia MU, Juhos S, University of Southern Denmark, 2019, unpublished. +- [GATK4](https://gatk.broadinstitute.org/hc/en-us) + + > Van der Auwera GA. Somatic variation discovery with GATK4. Proceedings of the American Association for Cancer Research Annual Meeting 2017. 2017 Apr 1-5. Cancer Res 2017;77(13 Suppl) doi:10.1158/1538-7445.AM2017-3590 + - [Kallisto](https://pachterlab.github.io/kallisto/) > Bray NL, Pimentel H, Melsted P, Pachter L. Near-optimal probabilistic RNA-seq quantification. Nature Biotechnology 2016 Apr. 34, 525–527. doi:10.1038/nbt.3519. PMID: 27043002. +- [MegaFusion](https://github.com/J35P312/MegaFusion) + +- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + +- [picard-tools](http://broadinstitute.github.io/picard) + - [Pizzly](https://github.com/pmelsted/pizzly) Melsted P, Hateley S, Joseph IC, Pimentel H, Bray N, Pachter L. Fusion detection and quantification by pseudoalignment. BioRxiv, 2017 Jul. doi: 10.1101/166322. +- [Qualimap 2](https://pubmed.ncbi.nlm.nih.gov/26428292/) + + > Okonechnikov K, Conesa A, García-Alcalde F. Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data Bioinformatics. 2016 Jan 15;32(2):292-4. doi: 10.1093/bioinformatics/btv566. Epub 2015 Oct 1. PubMed PMID: 26428292; PubMed Central PMCID: PMC4708105. + - [SAMtools](https://pubmed.ncbi.nlm.nih.gov/19505943/) > Li H, Handsaker B, Wysoker A, Fennell T, Ruan J, Homer N, Marth G, Abecasis G, Durbin R; 1000 Genome Project Data Processing Subgroup. The Sequence Alignment/Map format and SAMtools. Bioinformatics. 2009 Aug 15;25(16):2078-9. doi: 10.1093/bioinformatics/btp352. Epub 2009 Jun 8. PubMed PMID: 19505943; PubMed Central PMCID: PMC2723002. diff --git a/README.md b/README.md index 17559918..30f6e82b 100644 --- a/README.md +++ b/README.md @@ -41,22 +41,22 @@ In rnafusion the full-sized test includes reference building and fusion detectio 3. Reads quality control ([FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) 4. Optional trimming with [fastp](https://github.com/OpenGene/fastp) 5. Arriba subworkflow - - [STAR](https://github.com/alexdobin/STAR) alignment - - [Arriba](https://github.com/suhrig/arriba) fusion detection + - [STAR](https://github.com/alexdobin/STAR) alignment + - [Arriba](https://github.com/suhrig/arriba) fusion detection 6. Pizzly subworkflow - - [Kallisto](https://pachterlab.github.io/kallisto/) quantification - - [Pizzly](https://github.com/pmelsted/pizzly) fusion detection + - [Kallisto](https://pachterlab.github.io/kallisto/) quantification + - [Pizzly](https://github.com/pmelsted/pizzly) fusion detection 7. Squid subworkflow - - [STAR](https://github.com/alexdobin/STAR) alignment - - [Samtools view](http://www.htslib.org/): convert sam output from STAR to bam - - [Samtools sort](http://www.htslib.org/): bam output from STAR - - [SQUID](https://github.com/Kingsford-Group/squid) fusion detection - - [SQUID](https://github.com/Kingsford-Group/squid) annotate + - [STAR](https://github.com/alexdobin/STAR) alignment + - [Samtools view](http://www.htslib.org/): convert sam output from STAR to bam + - [Samtools sort](http://www.htslib.org/): bam output from STAR + - [SQUID](https://github.com/Kingsford-Group/squid) fusion detection + - [SQUID](https://github.com/Kingsford-Group/squid) annotate 8. STAR-fusion subworkflow - - [STAR](https://github.com/alexdobin/STAR) alignment - - [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) fusion detection + - [STAR](https://github.com/alexdobin/STAR) alignment + - [STAR-Fusion](https://github.com/STAR-Fusion/STAR-Fusion) fusion detection 9. Fusioncatcher subworkflow - - [FusionCatcher](https://github.com/ndaniel/fusioncatcher) fusion detection + - [FusionCatcher](https://github.com/ndaniel/fusioncatcher) fusion detection 10. StringTie subworkflow - [StringTie](https://ccb.jhu.edu/software/stringtie/) 11. Fusion-report diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index 4f9acc40..00000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,2 +0,0 @@ -sample,fastq_1,fastq_2,strandedness -test_rnafusion,https://github.com/nf-core/test-datasets/raw/d6cd12c9a69c148ef986d156d110f741df482b04/testdata/human/reads_1.fq.gz,https://github.com/nf-core/test-datasets/raw/d6cd12c9a69c148ef986d156d110f741df482b04/testdata/human/reads_2.fq.gz,forward diff --git a/assets/samplesheet_valid.csv b/assets/samplesheet_valid.csv deleted file mode 100644 index 4ac8f7b1..00000000 --- a/assets/samplesheet_valid.csv +++ /dev/null @@ -1,2 +0,0 @@ -sample,fastq_1,fastq_2,strandedness -test,https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_1.fq.gz,https://github.com/nf-core/test-datasets/raw/rnafusion/testdata/human/reads_2.fq.gz,forward From 92a777cc9c943130d4a747f0841edaf00efd39b2 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:34:57 +0200 Subject: [PATCH 55/83] correct copy-paste error --- modules/local/convert2bed/meta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/convert2bed/meta.yml b/modules/local/convert2bed/meta.yml index e578330b..31ff3649 100644 --- a/modules/local/convert2bed/meta.yml +++ b/modules/local/convert2bed/meta.yml @@ -4,7 +4,7 @@ description: convert from GTF to BED format tools: - convert2bed: description: convert from GTF to BED format - homepage: https://pachterlab.github.io/kallisto/ + homepage: https://github.com/bedops/bedops documentation: https://bedops.readthedocs.io/en/latest/index.html tool_dev_url: https://github.com/bedops/bedops doi: "" From 5de8ee2dcc60b6ed4c23781a9b6ebbc0cc066d5c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:35:52 +0200 Subject: [PATCH 56/83] first steps in output update --- docs/output.md | 258 ++++++++++++++++++++++++++++--------------------- 1 file changed, 150 insertions(+), 108 deletions(-) diff --git a/docs/output.md b/docs/output.md index b7afedf1..8b4ad44d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,7 +12,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Download and build references](#references) - Build references needed to run the rest of the pipeline - [STAR](#star) - Alignment for arriba, squid and STAR-fusion -- [Cat](#cat) - Concatenated fastq files per sample ID +- [Cat](#cat) - Concatenate fastq files per sample ID - [Arriba](#arriba) - Arriba fusion detection - [Pizzly](#pizzly) - Pizzly fusion detection - [Squid](#squid) - Squid fusion detection @@ -20,21 +20,23 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [StringTie](#stringtie) - StringTie assembly - [FusionCatcher](#fusioncatcher) - Fusion catcher fusion detection - [Samtools](#samtools) - SAM/BAM file manipulation -- [Fusion-report](#fusion-report) - Summary of the findings of each tool and comparison to COSMIC, Mitelman and FusionGBD databases -- [FusionInspector](#fusionInspector) - IGV-based visualisation tool for fusions filtered by fusion-report +- [Fusion-report](#fusion-report) - Summary of the findings of each tool and comparison to COSMIC, Mitelman, FusionGBD and FusionGDB2 databases +- [FusionInspector](#fusionInspector) - Supervised analysis of fusion predictions from fusion-report, recover and re-score evidence for such predictions - [Arriba visualisation](#arriba-visualisation) - Arriba visualisation report for FusionInspector fusions -- [Qualimap](#qualimap) - Quality control of alignment -- [Picard](#picard) - Collect metrics +- [Qualimap](#qualimap) - Quality control of alignments +- [Picard](#picard) - Collect QC metrics - [FastQC](#fastqc) - Raw read quality control -- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [MultiQC](#multiqc) - Aggregate reports describing QC results from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -### Download and build references +## Download and build references
    -Output files +Output reference files and folder structure + +### References directory structure -- `genomes_base/` +- `references/` - `arriba` - `blacklist_hg38_GRCh38_v2.1.0.tsv.gz` - `protein_domains_hg38_GRCh38_v2.1.0.gff3` @@ -64,13 +66,132 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
    +## Main pipeline workflow + +> If no argument is specified here, the tool was used with default parameters. + +### Directory structure + +```text +{outdir} +├── arriba +├── arriba_visualisation +├── cram_arriba +├── cram_starfusion +├── cram_squid +├── fastp +├── fastqc +├── fusioncatcher +├── fusioninspector +├── fusionreport +├── kallisto_quant +├── megafusion +├── multiqc +├── picard +├── pizzly +├── pipeline_info +├── pizzly +├── qualimap +├── samtools_sort_for_arriba +├── squid +├── star_for_arriba +├── star_for_starfusion +├── star_for_squid +├── starfusion +└── work +.nextflow.log +``` + +### Arriba + +[Arriba](https://arriba.readthedocs.io/en/latest/) is used for i) detect gene fusions and ii) create a PDF report for the fusions found (visualisation): + +#### Detection + +
    +Output files + +- `arriba/` + - `.arriba.fusions.tsv` - contains the identified fusions + - `.arriba.fusions.discarded.tsv` + +
    + +#### Visualisation + +
    +Output files + +- `arriba_visualisation/` + - `.pdf` + +
    + +### Cat + +
    +Output files + +- `cat/` + - `_1.merged.fastq.gz` + - `_2.merged.fastq.gz` + +
    + +If multiple libraries or runs have been provided for the same sample in the input samplesheet (e.g. to increase sequencing depth) then these will be merged at the very beginning of the pipeline in order to have consistent sample naming throughout the pipeline. Please refer to the [usage](https://nf-co.re/rnafusion/usage#samplesheet-input) documentation to see how to specify these samples in the input samplesheet. + +### FastP + +### Kallisto + +
    +Output files + +- `kallisto` + - `.kallisto_quant.fusions.txt` + +
    + +### Pizzly + +Pizzly uses the following arguments: + +```bash +-k 31 \ +--align-score 2 \ +--insert-size 400 \ +--cache index.cache.txt +``` + +
    +Output files + +- `pizzly` + - `.pizzly.txt` - contains the identified fusions + - `.pizzly.unfiltered.json` + +
    + +### Squid + +Squid is run in two steps: i) fusion detection and ii) fusion annotation but the output is in a common `squid` directory + +
    +Output files + +- `squid` + - `.squid.fusions_sv.txt` - contains the identified fusions + - `.squid.fusions.annotated.txt`- contains the identified fusions annotated + +
    + ### STAR STAR is used to align to genome reference -STAR is run 3 times: +STAR is run for 3 tools: -For arriba with the parameters: +For `arriba` with the parameters: ```bash --readFilesCommand zcat \ @@ -91,7 +212,7 @@ For arriba with the parameters: --chimMultimapNmax 50 ``` -For squid with the parameters: +For `squid` with the parameters: ```bash --twopassMode Basic \ @@ -105,7 +226,7 @@ For squid with the parameters: --readFilesCommand zcat ``` -For STAR-fusion with the parameters: +For `STAR-fusion` with the parameters: ```bash --twopassMode Basic \ @@ -132,112 +253,33 @@ For STAR-fusion with the parameters: --chimOutType Junctions ``` -> STAR_FOR_STARFUSION uses `${params.ensembl_ref}/Homo_sapiens.GRCh38.${params.ensembl_version}.chr.gtf` whereas STAR_FOR_ARRIBA and STAR_FOR_SQUID use `${params.ensembl_ref}/Homo_sapiens.GRCh38.${params.ensembl_version}.gtf` - -
    -Output files - -- `star_for_` -_ **Common** -_ `.Log.final.out` -_ `.Log.progress.out` -_ `.SJ.out.tab` -_ **For arriba:** -_ `.Aligned.out.bam` -_ **For squid:** -_ `.Aligned.sortedByCoord.out.bam` -_ `.Chimeric.out.sam` -_ `.unmapped_1.fastq.gz` -_ `.unmapped_2.fastq.gz` -_ **For starfusion:** -_ `.Aligned.sortedByCoord.out.bam` -_ `.Chimeric.out.junction` -
    - -### Cat - -Cat is used to concatenate fastq files belonging to the same sample. - -
    -Output files - -- `cat` - - `_1.merged.fastq.gz` - - `_2.merged.fastq.gz` - -
    - -### Arriba - -Arriba is used for i) detect fusion and ii) output a PDF report for the fusions found (visualisation): - -#### Detection - -
    -Output files - -- `arriba` - - `.arriba.fusions.tsv` - contains the identified fusions - - `.arriba.fusions.discarded.tsv` - -
    - -#### Visualisation - -
    -Output files - -- `arriba_visualisation` - - `.pdf` - -
    - -### Pizzly - -The first step of the pizzly workflow is to run `kallisto quant`: - -#### Kallisto +> STAR_FOR_STARFUSION uses `${params.ensembl}/Homo_sapiens.GRCh38.${params.ensembl_version}.chr.gtf` whereas STAR_FOR_ARRIBA and STAR_FOR_SQUID use `${params.ensembl_ref}/Homo_sapiens.GRCh38.${params.ensembl_version}.gtf`
    Output files -- `kallisto` - - `.kallisto_quant.fusions.txt` - -
    - -Pizzly refines kallisto output. +**Common** -#### Pizzly - -Pizzly uses the following arguments: - -```bash --k 31 \ ---align-score 2 \ ---insert-size 400 \ ---cache index.cache.txt -``` - -
    -Output files +- `star_for_` +- `.Log.final.out` +- `.Log.progress.out` +- `.SJ.out.tab` -- `pizzly` - - `.pizzly.txt` - contains the identified fusions - - `.pizzly.unfiltered.json` +**For arriba:** -
    +- `.Aligned.out.bam` -### Squid +**For squid:** -Squid is run in two steps: i) fusion detection and ii) fusion annotation but the output is in a common `squid` directory. +- `.Aligned.sortedByCoord.out.bam` +- `.Chimeric.out.sam` +- `.unmapped_1.fastq.gz` +- `.unmapped_2.fastq.gz` -
    -Output files + **For starfusion:** -- `squid` - - `.squid.fusions_sv.txt` - contains the identified fusions - - `.squid.fusions.annotated.txt`- contains the identified fusions annotatedvi +- `.Aligned.sortedByCoord.out.bam` +- `.Chimeric.out.junction`
    From d7f36fe7f746140cba5aa2d2be193ed5f564d78f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 10:41:39 +0200 Subject: [PATCH 57/83] update meta descriptions --- modules/local/fusionreport/detect/meta.yml | 2 +- modules/local/megafusion/meta.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/fusionreport/detect/meta.yml b/modules/local/fusionreport/detect/meta.yml index f3d5cd88..7b9de84c 100644 --- a/modules/local/fusionreport/detect/meta.yml +++ b/modules/local/fusionreport/detect/meta.yml @@ -4,7 +4,7 @@ keywords: - sort tools: - fusionreport: - description: fusionreport + description: Tool for parsing outputs from fusion detection tools homepage: https://github.com/matq007/fusion-report documentation: https://matq007.github.io/fusion-report/#/ doi: "10.1101/011650" diff --git a/modules/local/megafusion/meta.yml b/modules/local/megafusion/meta.yml index a25cd74c..31343c7e 100644 --- a/modules/local/megafusion/meta.yml +++ b/modules/local/megafusion/meta.yml @@ -4,7 +4,7 @@ keywords: - sort tools: - fusionreport: - description: megafusion + description: Converts RNA fusion files to SV VCF and collects statistics and metrics in a VCF file. homepage: Adapted from https://github.com/J35P312/MegaFusion documentation: https://github.com/J35P312/MegaFusion doi: "" From b1ca2c450e407e1919455ff10281475263a7bb09 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 10:41:50 +0200 Subject: [PATCH 58/83] refine output --- docs/output.md | 369 ++++++++++++++++++++++++++++--------------------- 1 file changed, 208 insertions(+), 161 deletions(-) diff --git a/docs/output.md b/docs/output.md index 8b4ad44d..64b8923f 100644 --- a/docs/output.md +++ b/docs/output.md @@ -102,6 +102,8 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d .nextflow.log ``` +If no parameter are specified, the default is applied. + ### Arriba [Arriba](https://arriba.readthedocs.io/en/latest/) is used for i) detect gene fusions and ii) create a PDF report for the fusions found (visualisation): @@ -112,8 +114,8 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Output files - `arriba/` - - `.arriba.fusions.tsv` - contains the identified fusions - - `.arriba.fusions.discarded.tsv` + - `.arriba.fusions.tsv` - contains the identified fusions + - `.arriba.fusions.discarded.tsv` @@ -123,7 +125,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Output files - `arriba_visualisation/` - - `.pdf` + - `.pdf` @@ -133,14 +135,97 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Output files - `cat/` - - `_1.merged.fastq.gz` - - `_2.merged.fastq.gz` + - `_1.merged.fastq.gz` + - `_2.merged.fastq.gz` If multiple libraries or runs have been provided for the same sample in the input samplesheet (e.g. to increase sequencing depth) then these will be merged at the very beginning of the pipeline in order to have consistent sample naming throughout the pipeline. Please refer to the [usage](https://nf-co.re/rnafusion/usage#samplesheet-input) documentation to see how to specify these samples in the input samplesheet. -### FastP +### Fastp + +If `--trim_fastp` is selected, [fastp](https://github.com/OpenGene/fastp) will filter low quality reads as well as bases at the 5' and 3' ends, trim adapters (automatically detected, but input with parameter `--adapter_fasta` is possible). 3' trimming is also possible via parameter `--trim_tail`. + +
    +Output files + +- `fastp` + - `_1.fastp.fastq.gz` + - `_2.fastp.fastq.gz` + - `.fastp.html` + - `.fastp.json` + - `.fastp.log` + +
    + +### FastQC + +
    +Output files + +- `fastqc/` + - `*_fastqc.html`: FastQC report containing quality metrics. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +
    + +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). + +![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) + +![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) + +![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) + +> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. + +### FusionCatcher + +
    +Output files + +- `fusioncatcher` + - `.fusioncatcher.fusion-genes.txt` + - `.fusioncatcher.summary.txt` + - `.fusioncatcher.log` + +
    + +[FusionCatcher](https://github.com/ndaniel/fusioncatcher) searches for novel/known somatic fusion genes translocations, and chimeras in RNA-seq data. Possibility to use parameter `--fusioncatcher_limitSjdbInsertNsj` to modify limitSjdbInsertNsj. + +### FusionInspector + +
    +Output files + +- `fusioninspector` + - `.fusion_inspector_web.html` - visualisation report described in details [here](https://github.com/FusionInspector/FusionInspector/wiki/FusionInspector-Visualizations) + - `FusionInspector.log` + - `.FusionInspector.fusions.abridged.tsv` + +
    + +[FusionInspector](https://github.com/FusionInspector/FusionInspector/tree/master) performs a validation of fusion transcript predictions. Possibility to use `--fusioninspector_limitSjdbInsertNsj` to set limitSjdbInsertNsj to anything other than the default 1000000. + +### Fusion-report + +
    +Output files + +- `fusionreport` + - + - `.fusionreport.tsv` + - `.fusionreport_filtered.tsv` + - `_fusionreport_index.html` - general report for all filtered fusions + - `.fusions.csv` - index in csv format + - `_.html` - specific report for each filtered fusion + +
    + +[Fusion-report](https://github.com/matq007/fusion-report) is a tool for parsing outputs from fusion detection tools. +The score is explained [on the original fusion-report github page](https://matq007.github.io/fusion-report/#/score). + +`--fusionreport_filter` can be used to filter the output of fusion-report to fusions identified by at least 2 different tools. ### Kallisto @@ -148,11 +233,55 @@ If multiple libraries or runs have been provided for the same sample in the inpu Output files - `kallisto` - - `.kallisto_quant.fusions.txt` + - `.kallisto_quant.fusions.txt` -### Pizzly +Quantifying abundances of transcripts from bulk and single-cell RNA-Seq data, or more generally of target sequences using high-throughput sequencing reads. + +### Megafusion + +
    +Output files + +- `megafusion` + - `.vcf` - contains the fusions in vcf format with collected statistics. + +
    + +[Megafusion](https://github.com/J35P312/MegaFusion) converts RNA fusion files to SV VCF and collects statistics and metrics in a VCF file. + +### MultiQC + +
    +Output files + +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + +
    + +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. + +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + +### Picard + +
    +Output files + +Picard CollectRnaMetrics and picard MarkDuplicates share the same outpur directory. + +- `picard` + - `.MarkDuplicates.metrics.txt` - metrics from CollectRnaMetrics + - `_rna_metrics.txt` - metrics from MarkDuplicates + - `.bam` - BAM file with marked duplicates + +
    + +#### Pizzly Pizzly uses the following arguments: @@ -172,6 +301,58 @@ Pizzly uses the following arguments: +### Qualimap + +
    +Output files + +- `qualimap` + - `qualimapReport.html` - HTML report + - `rnaseq_qc_results.txt` - TXT results + - `css` - dir for html style + - `images_qualimapReport`- dir for html images + - `raw_data_qualimapReport` - dir for html raw data + +
    + +### Samtools + +#### Samtools view + +Samtools view is used to convert the chimeric SAM output from STAR_FOR_SQUID to BAM + +
    +Output files + +- `samtools_view_for_squid` + - `_chimeric.bam` - sorted BAM file + +
    + +#### Samtools sort + +Samtools sort is used to sort BAM files from STAR_FOR_STARFUSION (for arriba visualisation) and the chimeric BAM from STAR_FOR_SQUID + +
    +Output files + +- `samtools_sort_for_` + - `(_chimeric)_sorted.bam` - sorted BAM file + +
    + +#### Samtools index + +Samtools index is used to index BAM files from STAR_FOR_ARRIBA (for arriba visualisation) and STAR_FOR_STARFUSION (for QC) + +
    +Output files + +- `samtools_for_` + - `.(Aligned.sortedByCoord).out.bam.bai` - + +
    + ### Squid Squid is run in two steps: i) fusion detection and ii) fusion annotation but the output is in a common `squid` directory @@ -180,8 +361,8 @@ Squid is run in two steps: i) fusion detection and ii) fusion annotation but the Output files - `squid` - - `.squid.fusions_sv.txt` - contains the identified fusions - - `.squid.fusions.annotated.txt`- contains the identified fusions annotated + - `.squid.fusions_sv.txt` - contains the identified fusions + - `.squid.fusions.annotated.txt`- contains the identified fusions annotated @@ -250,7 +431,8 @@ For `STAR-fusion` with the parameters: --alignInsertionFlush Right \ --alignSplicedMateMapLminOverLmate 0 \ --alignSplicedMateMapLmin 30 \ ---chimOutType Junctions +--chimOutType Junctions \ +--quantMode GeneCounts ``` > STAR_FOR_STARFUSION uses `${params.ensembl}/Homo_sapiens.GRCh38.${params.ensembl_version}.chr.gtf` whereas STAR_FOR_ARRIBA and STAR_FOR_SQUID use `${params.ensembl_ref}/Homo_sapiens.GRCh38.${params.ensembl_version}.gtf` @@ -261,36 +443,38 @@ For `STAR-fusion` with the parameters: **Common** - `star_for_` -- `.Log.final.out` -- `.Log.progress.out` -- `.SJ.out.tab` +- `.Log.final.out` +- `.Log.progress.out` +- `.SJ.out.tab` **For arriba:** -- `.Aligned.out.bam` +- `.Aligned.out.bam` **For squid:** -- `.Aligned.sortedByCoord.out.bam` -- `.Chimeric.out.sam` -- `.unmapped_1.fastq.gz` -- `.unmapped_2.fastq.gz` +- `.Aligned.sortedByCoord.out.bam` +- `.Chimeric.out.sam` +- `.unmapped_1.fastq.gz` +- `.unmapped_2.fastq.gz` **For starfusion:** -- `.Aligned.sortedByCoord.out.bam` -- `.Chimeric.out.junction` +- `.Aligned.sortedByCoord.out.bam` +- `.Chimeric.out.junction` +The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, params.read_length default is 100. + ### STAR-fusion
    Output files - `starfusion` - - `.starfusion.fusion_predictions.tsv` - contains the identified fusions - - `.starfusion.abridged.tsv` + - `.starfusion.fusion_predictions.tsv` - contains the identified fusions + - `.starfusion.abridged.tsv` - `- contains the identified fusions.starfusion.abridged.coding_effect.tsv`
    @@ -300,149 +484,12 @@ For `STAR-fusion` with the parameters:
    Output files -- `stringtie//stringtie.merged.gtf` - merged gtf from annotation and stringtie output gtfs -
    - -### FusionCatcher - -
    -Output files - -- `fusioncatcher` -_ `.fusioncatcher.fusion-genes.txt` -_ `.fusioncatcher.summary.txt` \* `.fusioncatcher.log` -
    - -### Samtools - -#### Samtools view - -Samtools view is used to convert the chimeric SAM output from STAR_FOR_SQUID to BAM - -
    -Output files - -- `samtools_view_for_squid` - - `_chimeric.bam` - sorted BAM file - -
    - -#### Samtools sort - -Samtools sort is used to sort BAM files from STAR_FOR_STARFUSION (for arriba visualisation) and the chimeric BAM from STAR_FOR_SQUID - -
    -Output files - -- `samtools_sort_for_` - - `(_chimeric)_sorted.bam` - sorted BAM file - -
    - -#### Samtools index - -Samtools index is used to index BAM files from STAR_FOR_ARRIBA (for arriba visualisation) and STAR_FOR_STARFUSION (for QC) - -
    -Output files - -- `samtools_for_` - - `.(Aligned.sortedByCoord).out.bam.bai` - - +- `stringtie//stringtie.merged.gtf` - merged gtf from annotation and stringtie output gtfs
    -### Fusion-report -
    -Output files -- `fusionreport` - - - - `.fusionreport.tsv` - - `.fusionreport_filtered.tsv` - - `index.html` - general report for all filtered fusions - - `.html` - specific report for each filtered fusion -
    - -The score is explained [on the original fusion-report github page](https://matq007.github.io/fusion-report/#/score). - -### FusionInspector - -
    -Output files - -- `fusioninspector` - - `.fusion_inspector_web.html` - visualisation report described in details [here](https://github.com/FusionInspector/FusionInspector/wiki/FusionInspector-Visualizations) - - `FusionInspector.log` - - `.FusionInspector.fusions.abridged.tsv` - -
    - -### Qualimap - -
    -Output files - -- `qualimap` - - `qualimapReport.html` - HTML report - - `rnaseq_qc_results.txt` - TXT results - - `css` - dir for html style - - `images_qualimapReport`- dir for html images - - `raw_data_qualimapReport` - dir for html raw data - -
    - -### Picard - -Picard CollectRnaMetrics and picard MarkDuplicates share the same outpur directory. - -
    -Output files - -- `picard` - - `.MarkDuplicates.metrics.txt` - metrics from CollectRnaMetrics - - `_rna_metrics.txt` - metrics from MarkDuplicates - - `.bam` - BAM file with marked duplicates - -
    - -### FastQC - -
    -Output files - -- `fastqc/` - - `*_fastqc.html`: FastQC report containing quality metrics. - - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. - -
    - -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). - -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. - -### MultiQC - -
    -Output files - -- `multiqc/` - - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - - `multiqc_plots/`: directory containing static images from the report in various formats. - -
    - -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. - -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . ### Pipeline information From 124c7f0b1e1031e6a1233cc74162b64eb7347546 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 11:02:31 +0200 Subject: [PATCH 59/83] prettify --- docs/output.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index 64b8923f..799e400b 100644 --- a/docs/output.md +++ b/docs/output.md @@ -487,10 +487,6 @@ The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, par - `stringtie//stringtie.merged.gtf` - merged gtf from annotation and stringtie output gtfs - - - - ### Pipeline information
    From f76bd87c27dc31793e6bafbd41ef7f26db6d50de Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:22:35 +0200 Subject: [PATCH 60/83] Update docs/output.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 799e400b..4ab09184 100644 --- a/docs/output.md +++ b/docs/output.md @@ -272,7 +272,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ
    Output files -Picard CollectRnaMetrics and picard MarkDuplicates share the same outpur directory. +Picard CollectRnaMetrics and picard MarkDuplicates share the same output directory. - `picard` - `.MarkDuplicates.metrics.txt` - metrics from CollectRnaMetrics From 02d1cf17975e6ac2019cefa2f1f28f99b50e0cd4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:22:47 +0200 Subject: [PATCH 61/83] Update docs/output.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 4ab09184..12a9eb44 100644 --- a/docs/output.md +++ b/docs/output.md @@ -102,7 +102,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d .nextflow.log ``` -If no parameter are specified, the default is applied. +If no parameters are specified, the default is applied. ### Arriba From 6f8ca3b0859744454e3ac8149f4200404a38bce3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:23:07 +0200 Subject: [PATCH 62/83] Update docs/output.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 12a9eb44..bd611b97 100644 --- a/docs/output.md +++ b/docs/output.md @@ -355,7 +355,7 @@ Samtools index is used to index BAM files from STAR_FOR_ARRIBA (for arriba visua ### Squid -Squid is run in two steps: i) fusion detection and ii) fusion annotation but the output is in a common `squid` directory +Squid is run in two steps: i) fusion detection and ii) fusion annotation, but the output is in a shared `squid` directory
    Output files From 9ef4faea86460b07d6f8e92dc4e9aa680fbe808f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:23:15 +0200 Subject: [PATCH 63/83] Update README.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30f6e82b..f4ee6bee 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ nextflow run nf-core/rnafusion \ > **Notes:** > > - conda is not supported currently, run with singularity or docker -> - Paths need to be absolute +> - Paths need to be absolute. > - GRCh38 is the only supported reference > - Single-end reads are to be use as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. From 58302fdd7dd77a0daa11896e8f64e7a4ebbebdbc Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:23:23 +0200 Subject: [PATCH 64/83] Update README.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4ee6bee..c0ed0b81 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ In rnafusion the full-sized test includes reference building and fusion detectio As the reference building is computationally heavy (> 24h on HPC), it is recommended to test the pipeline with the `-stub` parameter (creation of empty files): -First build the references: +First, build the references: ```bash nextflow run nf-core/rnafusion \ From b9ffba9186829679b99a6348683f809c86defeba Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:23:30 +0200 Subject: [PATCH 65/83] Update README.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0ed0b81..c2ce77ea 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ nextflow run nf-core/rnafusion \ > **Notes:** > -> - conda is not supported currently, run with singularity or docker +> - Conda is not currently supported; run with singularity or docker. > - Paths need to be absolute. > - GRCh38 is the only supported reference > - Single-end reads are to be use as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. From 2bee0ece1103efdd86aacef609562a14febcce0f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:23:37 +0200 Subject: [PATCH 66/83] Update README.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2ce77ea..1954c52a 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ nextflow run nf-core/rnafusion \ > > - Conda is not currently supported; run with singularity or docker. > - Paths need to be absolute. -> - GRCh38 is the only supported reference +> - GRCh38 is the only supported reference. > - Single-end reads are to be use as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. > **Warning:** From 18b250a3d5cd0a68ac54641d8c708988bf34ca4e Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:23:48 +0200 Subject: [PATCH 67/83] Update README.md Co-authored-by: Peter Pruisscher <57712924+peterpru@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1954c52a..cc9d97e3 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ nextflow run nf-core/rnafusion \ > - Conda is not currently supported; run with singularity or docker. > - Paths need to be absolute. > - GRCh38 is the only supported reference. -> - Single-end reads are to be use as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. +> - Single-end reads are to be used as last-resort. Paired-end reads are recommended. FusionCatcher cannot be used with single-end reads shorter than 130 bp. > **Warning:** > Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those From e639142012ce4fda6f29c3107d84f1cbe78dc960 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:47:33 +0200 Subject: [PATCH 68/83] Update CHANGELOG.md Co-authored-by: Eva C <29628428+fevac@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b48c16e..21d68689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,7 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Arriba` visualisation now runs for FusionInspector (combined tools) results, not only `Arriba` results - Updated metro map with trimming options and placed `Arriba` visualisation after `FusionInspector` - Exit with error when using squid in combination with any ensembl version different from 102 -- Renaming [#395](https://github.com/nf-core/rnafusion/pull/395) +- Renamed output files [#395](https://github.com/nf-core/rnafusion/pull/395) - `Arriba` visualisation pdf from meta.id to meta.id_combined_fusions_arriba_visualisation - cram file from output bam of `STAR_FOR_ARRIBA`: meta.id to meta.id_star_for_arriba - cram file from output bam of `STAR_FOR_STARFUSION`: meta.id to meta.id.star_for_starfusion.Aligned.sortedByCoord.out From e4a28baf27ed101eefee8fefa2b3c6a567535246 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:56:23 +0200 Subject: [PATCH 69/83] add output info in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30f6e82b..961bd87d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ## Introduction -**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. +**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 5 fusion callers tools are created, and are also aggregated, most notably in a pdf visualiation document, a vcf data collection file and html and tsv reports. On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results). From 3395388d96d13cac1fba84f7b36e137041f802bf Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:58:21 +0200 Subject: [PATCH 70/83] small typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1f8a9ee0..a6f3e750 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ ## Introduction -**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 5 fusion callers tools are created, and are also aggregated, most notably in a pdf visualiation document, a vcf data collection file and html and tsv reports. +**nf-core/rnafusion** is a bioinformatics best-practice analysis pipeline for RNA sequencing consisting of several tools designed for detecting and visualizing fusion genes. Results from up to 5 fusion callers tools are created, and are also aggregated, most notably in a pdf visualiation document, a vcf data collection file, and html and tsv reports. -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results). +On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/rnafusion/results). In rnafusion the full-sized test includes reference building and fusion detection. The test dataset is taken from [here](https://github.com/nf-core/test-datasets/tree/rnafusion/testdata/human). From 061589ba23d622538dc2f7d2c82461982ee1168f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:12:22 +0200 Subject: [PATCH 71/83] add missing fusionreport stub and changelog update for previous PR --- CHANGELOG.md | 1 + modules/local/fusionreport/detect/main.nf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21d68689..fa68a69e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use institutional configs by default [#381](https://github.com/nf-core/rnafusion/pull/381) - Remove redundant indexing in starfusion and qc workflows [#387](https://github.com/nf-core/rnafusion/pull/387) - Output bai files in same directory as bam files [#387](https://github.com/nf-core/rnafusion/pull/387) +- Update and review documentation [#396](https://github.com/nf-core/rnafusion/pull/396) ### Fixed diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index e3ea5149..20db8c2f 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -53,7 +53,7 @@ process FUSIONREPORT { """ touch ${prefix}.fusionreport_filtered.tsv touch ${prefix}.fusionreport.tsv - touch index.html + touch ${prefix}_fusionreport_index.html touch AAA_BBB.html touch ${prefix}.fusions.csv touch ${prefix}.fusions.json From b4e2461f843674d15e696cea54d534aa5b5a5825 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:21:50 +0200 Subject: [PATCH 72/83] update megafusion output to _fusion_data.vcf --- CHANGELOG.md | 1 + conf/modules.config | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa68a69e..f26e61d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - cram file from output bam of `STAR_FOR_ARRIBA`: meta.id to meta.id_star_for_arriba - cram file from output bam of `STAR_FOR_STARFUSION`: meta.id to meta.id.star_for_starfusion.Aligned.sortedByCoord.out - `fusion-report` index.html file to meta.id_fusionreport_index.html + - meta.id.vcf output from `MEGAFUSION` to meta.id_fusion_data.vcf ### Fixed diff --git a/conf/modules.config b/conf/modules.config index 911fe292..b4dc96d6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -143,6 +143,7 @@ process { } withName: MEGAFUSION { ext.when = {!params.fusioninspector_only} + ext.prefix = { "${meta.id}_fusion_data" } } From 91f65d0c8a5f8f3a068052ccf59a81c923f4d2e1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:25:16 +0200 Subject: [PATCH 73/83] prettify --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f26e61d6..f94b2031 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - cram file from output bam of `STAR_FOR_ARRIBA`: meta.id to meta.id_star_for_arriba - cram file from output bam of `STAR_FOR_STARFUSION`: meta.id to meta.id.star_for_starfusion.Aligned.sortedByCoord.out - `fusion-report` index.html file to meta.id_fusionreport_index.html - - meta.id.vcf output from `MEGAFUSION` to meta.id_fusion_data.vcf + - meta.id.vcf output from `MEGAFUSION` to meta.id_fusion_data.vcf ### Fixed From c715953599fa43f4beaea3b7e5bc5518df44010f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:28:19 +0200 Subject: [PATCH 74/83] update modules from nf-core, update picard collectrnametrics container --- modules.json | 4 +-- .../local/picard/collectrnaseqmetrics/main.nf | 6 ++-- modules/nf-core/fastqc/tests/main.nf.test | 32 +++++++++++++++++++ modules/nf-core/picard/markduplicates/main.nf | 4 +++ 4 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 modules/nf-core/fastqc/tests/main.nf.test diff --git a/modules.json b/modules.json index 38ba9c33..162a71b5 100644 --- a/modules.json +++ b/modules.json @@ -32,7 +32,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "bd8092b67b5103bdd52e300f75889442275c3117", + "git_sha": "9a4517e720bc812e95b56d23d15a1653b6db4f53", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { @@ -62,7 +62,7 @@ }, "picard/markduplicates": { "branch": "master", - "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", + "git_sha": "2ee934606f1fdf7fc1cb05d6e8abc13bec8ab448", "installed_by": ["modules"] }, "qualimap/rnaseq": { diff --git a/modules/local/picard/collectrnaseqmetrics/main.nf b/modules/local/picard/collectrnaseqmetrics/main.nf index 5651c6c1..af0b8958 100644 --- a/modules/local/picard/collectrnaseqmetrics/main.nf +++ b/modules/local/picard/collectrnaseqmetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTRNASEQMETRICS { tag "$meta.id" label 'process_medium' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0 r::r-base" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test new file mode 100644 index 00000000..3961de60 --- /dev/null +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -0,0 +1,32 @@ +nextflow_process { + + name "Test Process FASTQC" + script "modules/nf-core/fastqc/main.nf" + process "FASTQC" + tag "fastqc" + + test("Single-Read") { + + when { + process { + """ + input[0] = [ + [ id: 'test', single_end:true ], + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + ] + """ + } + } + + then { + assert process.success + assert process.out.html.get(0).get(1) ==~ ".*/test_fastqc.html" + assert path(process.out.html.get(0).get(1)).getText().contains("File typeConventional base calls") + assert process.out.zip.get(0).get(1) ==~ ".*/test_fastqc.zip" + } + + } + +} diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index facd7efb..ebfa0864 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -30,6 +30,9 @@ process PICARD_MARKDUPLICATES { } else { avail_mem = (task.memory.mega*0.8).intValue() } + + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ picard \\ -Xmx${avail_mem}M \\ @@ -48,6 +51,7 @@ process PICARD_MARKDUPLICATES { stub: def prefix = task.ext.prefix ?: "${meta.id}" + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ touch ${prefix}.bam touch ${prefix}.bam.bai From 5ee433c70a93ca98034ea5d72c118eabb65c7909 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:34:33 +0200 Subject: [PATCH 75/83] update changelog with picard update --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f94b2031..b61486da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove redundant indexing in starfusion and qc workflows [#387](https://github.com/nf-core/rnafusion/pull/387) - Output bai files in same directory as bam files [#387](https://github.com/nf-core/rnafusion/pull/387) - Update and review documentation [#396](https://github.com/nf-core/rnafusion/pull/396) +- Update picard container for `PICARD_COLLECTRNASEQMETRICS` to 3.0.0 [#395](https://github.com/nf-core/rnafusion/pull/395) ### Fixed From fcde1cc563ff1780f2848bf24b611520610cfe35 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:58:32 +0200 Subject: [PATCH 76/83] update version number and changelog release formatting --- CHANGELOG.md | 20 ++++++++++---------- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b61486da..0be1dba3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.4.0dev +## v2.4.0 - [2023/09/18] ### Added @@ -28,7 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `samtools sort` and `samtools index` for `arriba` workflow were dispensable and were removed [#395](https://github.com/nf-core/rnafusion/pull/395) - Removed trimmed fastqc report from multiqc [#394](https://github.com/nf-core/rnafusion/pull/394) -## v2.3.0 = [2022/04/24] +## v2.3.0 - [2023/04/24] ### Added @@ -57,7 +57,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -## v2.2.0 - [2022/03/13] +## v2.2.0 - [2023/03/13] ### Added @@ -94,7 +94,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - FUSIONINSPECTOR_DEV process as the option fusioninspector_limitSjdbInsertNsj is part of the main starfusion release -## [2.1.0] nfcore/rnafusion - 2022/07/12 +## v2.1.0 - [2022/07/12] ### Added @@ -128,7 +128,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -## [2.0.0] nfcore/rnafusion - 2022/05/19 +## v2.0.0 - [2022/05/19] Update to DSL2 and newer software/reference versions @@ -270,7 +270,7 @@ to - GRCh37 support. Subdirectory with params.genome are removed - Running with conda -## v1.3.0dev nfcore/rnafusion - 2020/07/15 +## v1.3.0 - [2020/07/15] - Using official STAR-Fusion container [#160](https://github.com/nf-core/rnafusion/issues/160) @@ -301,7 +301,7 @@ to --- -## [1.1.0] nfcore/rnafusion - 2020/02/10 +## v1.1.0 - [2020/02/10] - Fusion gene detection tools: - `Arriba v1.1.0` @@ -349,7 +349,7 @@ to --- -## [1.0.2] nfcore/rnafusion - 2019/05/13 +## v1.0.2 - [2019/05/13] ### Changed @@ -363,7 +363,7 @@ to --- -## [1.0.1] nfcore/rnafusion - 2019/04/06 +## v1.0.1 - [2019/04/06] ### Added @@ -391,7 +391,7 @@ to --- -## [1.0] nfcore/rnafusion - 2018/02/14 +## v1.0 - [2018/02/14] Version 1.0 marks the first production release of this pipeline under the nf-core flag. The pipeline includes additional help scripts to download references for fusion tools and Singularity images. diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index f02eb657..5e0f10e0 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnafusion + This report has been generated by the nf-core/rnafusion analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-rnafusion-methods-description": order: -1000 diff --git a/nextflow.config b/nextflow.config index 107eba8a..3a416e89 100644 --- a/nextflow.config +++ b/nextflow.config @@ -295,7 +295,7 @@ manifest { description = """Nextflow rnafusion analysis pipeline, part of the nf-core community.""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.4.0dev' + version = '2.4.0' doi = '' } From 16b702e04e73d690366a4543d72a1caac6bea416 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:19:38 +0200 Subject: [PATCH 77/83] add descriptions of report files in tower.yml and correct output documentation --- docs/output.md | 14 +++++++------- tower.yml | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/docs/output.md b/docs/output.md index bd611b97..fea293a2 100644 --- a/docs/output.md +++ b/docs/output.md @@ -125,7 +125,7 @@ If no parameters are specified, the default is applied. Output files - `arriba_visualisation/` - - `.pdf` + - `_combined_fusions_arriba_visualisation.pdf`
    @@ -149,7 +149,7 @@ If `--trim_fastp` is selected, [fastp](https://github.com/OpenGene/fastp) will f
    Output files -- `fastp` +- `fastp/` - `_1.fastp.fastq.gz` - `_2.fastp.fastq.gz` - `.fastp.html` @@ -245,7 +245,7 @@ Quantifying abundances of transcripts from bulk and single-cell RNA-Seq data, or Output files - `megafusion` - - `.vcf` - contains the fusions in vcf format with collected statistics. + - `_fusion_data.vcf` - contains the fusions in vcf format with collected statistics.
    @@ -275,8 +275,8 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ Picard CollectRnaMetrics and picard MarkDuplicates share the same output directory. - `picard` - - `.MarkDuplicates.metrics.txt` - metrics from CollectRnaMetrics - - `_rna_metrics.txt` - metrics from MarkDuplicates + - `.MarkDuplicates.metrics.txt` - metrics from MarkDuplicates + - `_rna_metrics.txt` - metrics from CollectRnaMetrics - `.bam` - BAM file with marked duplicates
    @@ -462,6 +462,7 @@ For `STAR-fusion` with the parameters: - `.Aligned.sortedByCoord.out.bam` - `.Chimeric.out.junction` +- `.ReadsPerGene.out.tab`
    @@ -474,8 +475,7 @@ The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, par - `starfusion` - `.starfusion.fusion_predictions.tsv` - contains the identified fusions - - `.starfusion.abridged.tsv` - - `- contains the identified fusions.starfusion.abridged.coding_effect.tsv` + - `.starfusion.abridged.tsv`- contains the identified fusions.- `starfusion.abridged.coding_effect.tsv` diff --git a/tower.yml b/tower.yml index 787aedfe..5813f5d3 100644 --- a/tower.yml +++ b/tower.yml @@ -1,5 +1,35 @@ reports: multiqc_report.html: display: "MultiQC HTML report" - samplesheet.csv: - display: "Auto-created samplesheet with collated metadata and FASTQ paths" + "**/arriba/*.arriba.fusions.tsv": + display: "Arriba identified fusion TSV report" + "**/arriba_visualisation/*_combined_fusions_arriba_visualisation.pdf": + display: "PDF visualisation of the transcripts involved in predicted fusions" + "**/fastp/*fastp.html": + display: "Post fastp trimming HTML report" + "**/fusioncatcher/*.fusioncatcher.fusion-genes.txt": + display: "FusionCatcher identified fusion TXT report" + "**/fusioninspector/*.FusionInspector.fusions.abridged.tsv": + display: "FusionInspector TSV report" + "**/fusionreport/*/*_fusionreport_index.html": + display: "Fusion-report HTML report" + "**/megafusion/*_fusion_data.vcf": + display: "Collected statistics on each fusion fed to FusionInspector in VCF format" + "**/picard/*.MarkDuplicates.metrics.txt": + display: "Picard: Metrics from CollectRnaMetrics" + "**/picard/*_rna_metrics.txt": + display: "Picard: Metrics from MarkDuplicates" + "**/pizzly/*.pizzly.txt": + display: "Pizzly identified fusion TXT report" + "**/qualimap/qualimapReport.html": + display: "Qualimap HTML report from STAR_FOR_STARFUSION alignment" + "**/qualimap/rnaseq_qc_results.txt": + display: "Qualimap QC results from STAR_FOR_STARFUSION alignment in TXT format" + "**/squid/*.squid.fusions.annotated.txt": + display: "Squid identified fusion TXT report" + "**/star_for_starfusion/*ReadsPerGene.out.tab": + display: "Number of reads per gene" + "**/starfusion/*.starfusion.fusion_predictions.tsv": + display: "STAR-Fusion identified fusion TSV report" + "**/stringtie/*/*stringtie.merged.gtf": + display: "Merged GTFs from StringTie with annotations" From b6d7498707ae86ba1a02260b96e1ed3153959fad Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:32:27 +0200 Subject: [PATCH 78/83] Update docs/output.md Co-authored-by: Vadym --- docs/output.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index fea293a2..be65328d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -475,7 +475,8 @@ The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, par - `starfusion` - `.starfusion.fusion_predictions.tsv` - contains the identified fusions - - `.starfusion.abridged.tsv`- contains the identified fusions.- `starfusion.abridged.coding_effect.tsv` + - `.starfusion.abridged.tsv`- contains the identified fusions + - `starfusion.abridged.coding_effect.tsv` From 0b74b7fdd406a71c777cb7b5d2dee2cf681f44b1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:34:16 +0200 Subject: [PATCH 79/83] fix formatting --- docs/output.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index fea293a2..4144891b 100644 --- a/docs/output.md +++ b/docs/output.md @@ -475,7 +475,8 @@ The STAR index is generated with `--sjdbOverhang ${params.read_length - 1}`, par - `starfusion` - `.starfusion.fusion_predictions.tsv` - contains the identified fusions - - `.starfusion.abridged.tsv`- contains the identified fusions.- `starfusion.abridged.coding_effect.tsv` + - `.starfusion.abridged.tsv` - contains the identified fusions abridged + - `starfusion.abridged.coding_effect.tsv` From f876680cd43623f2db9933f9819ca4380c34c0d0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 18 Sep 2023 10:56:44 +0200 Subject: [PATCH 80/83] Update fusionreport to 2.1.5p4 to fix 403 error in downloading databases --- CHANGELOG.md | 1 + modules/local/fusionreport/detect/main.nf | 2 +- modules/local/fusionreport/download/main.nf | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0be1dba3..3d5b6e65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Provide gene count file by default when running STAR_FOR_STARFUSION [#385](https://github.com/nf-core/rnafusion/pull/385) - Fix fusion-report issue with MACOXS directories [#386](https://github.com/nf-core/rnafusion/pull/386) - The fusion lists is updated to contain two branches, one in case no fusions are detected and one for if fusions are detected, that will be used to feed to fusioninspector, megafusion, arriba visualisation [#388](https://github.com/nf-core/rnafusion/pull/388) +- Update fusionreport to 2.1.5p4 to fix 403 error in downloading databases ### Removed diff --git a/modules/local/fusionreport/detect/main.nf b/modules/local/fusionreport/detect/main.nf index 20db8c2f..38809803 100644 --- a/modules/local/fusionreport/detect/main.nf +++ b/modules/local/fusionreport/detect/main.nf @@ -4,7 +4,7 @@ process FUSIONREPORT { // Note: 2.7X indices incompatible with AWS iGenomes. conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.5p2.1" + container "docker.io/clinicalgenomics/fusion-report:2.1.5p4" input: diff --git a/modules/local/fusionreport/download/main.nf b/modules/local/fusionreport/download/main.nf index c54910a1..3ab1bc03 100644 --- a/modules/local/fusionreport/download/main.nf +++ b/modules/local/fusionreport/download/main.nf @@ -4,7 +4,7 @@ process FUSIONREPORT_DOWNLOAD { // Note: 2.7X indices incompatible with AWS iGenomes. conda "bioconda::star=2.7.9a" - container "docker.io/clinicalgenomics/fusion-report:2.1.5p3" + container "docker.io/clinicalgenomics/fusion-report:2.1.5p4" input: val(username) From 62f78bee79ef7eb80672314acad1fe6ab771daa4 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:35:58 +0200 Subject: [PATCH 81/83] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d5b6e65..a07af52b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Provide gene count file by default when running STAR_FOR_STARFUSION [#385](https://github.com/nf-core/rnafusion/pull/385) - Fix fusion-report issue with MACOXS directories [#386](https://github.com/nf-core/rnafusion/pull/386) - The fusion lists is updated to contain two branches, one in case no fusions are detected and one for if fusions are detected, that will be used to feed to fusioninspector, megafusion, arriba visualisation [#388](https://github.com/nf-core/rnafusion/pull/388) -- Update fusionreport to 2.1.5p4 to fix 403 error in downloading databases +- Update fusionreport to 2.1.5p4 to fix 403 error in downloading databases [#403](https://github.com/nf-core/rnafusion/pull/403) ### Removed From f3a09cd2ddb67880b1b5a7439f318cc3c408b4da Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Wed, 20 Sep 2023 10:22:02 +0200 Subject: [PATCH 82/83] change release date, uncomment institutional config again (issue with merging) --- CHANGELOG.md | 2 +- conf/igenomes.config | 440 ------------------------------------------- nextflow.config | 10 +- 3 files changed, 6 insertions(+), 446 deletions(-) delete mode 100644 conf/igenomes.config diff --git a/CHANGELOG.md b/CHANGELOG.md index a07af52b..f216b4bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.4.0 - [2023/09/18] +## v2.4.0 - [2023/09/20] ### Added diff --git a/conf/igenomes.config b/conf/igenomes.config deleted file mode 100644 index 3f114377..00000000 --- a/conf/igenomes.config +++ /dev/null @@ -1,440 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for iGenomes paths -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines reference genomes using iGenome paths. - Can be used by any config that customises the base path using: - $params.igenomes_base / --igenomes_base ----------------------------------------------------------------------------------------- -*/ - -params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'CHM13' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" - bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" - gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" - mito_name = "chrM" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" - } - 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" - } - 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" - } - 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_5.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" - } - 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" - } - } -} diff --git a/nextflow.config b/nextflow.config index 3a416e89..994e96e3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -140,11 +140,11 @@ try { // Load nf-core/rnafusion custom profiles from different institutions. // Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! -// try { -// includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" -// } catch (Exception e) { -// System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") -// } +try { + includeConfig "${params.custom_config_base}/pipeline/rnafusion.config" +} catch (Exception e) { + System.err.println("WARNING: Could not load nf-core/config/rnafusion profiles: ${params.custom_config_base}/pipeline/rnafusion.config") +} profiles { debug { dumpHashes = true From 3d24c125cdcb0a7b96a94bedb06b491626de894c Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 22 Sep 2023 08:53:41 +0200 Subject: [PATCH 83/83] correct entry in changelog attributed to wrong release --- CHANGELOG.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f216b4bc..4c9ff036 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.4.0 - [2023/09/20] +## v2.4.0 - [2023/09/22] ### Added @@ -14,6 +14,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Output bai files in same directory as bam files [#387](https://github.com/nf-core/rnafusion/pull/387) - Update and review documentation [#396](https://github.com/nf-core/rnafusion/pull/396) - Update picard container for `PICARD_COLLECTRNASEQMETRICS` to 3.0.0 [#395](https://github.com/nf-core/rnafusion/pull/395) +- Renamed output files [#395](https://github.com/nf-core/rnafusion/pull/395) + - `Arriba` visualisation pdf from meta.id to meta.id_combined_fusions_arriba_visualisation + - cram file from output bam of `STAR_FOR_ARRIBA`: meta.id to meta.id_star_for_arriba + - cram file from output bam of `STAR_FOR_STARFUSION`: meta.id to meta.id.star_for_starfusion.Aligned.sortedByCoord.out + - `fusion-report` index.html file to meta.id_fusionreport_index.html + - meta.id.vcf output from `MEGAFUSION` to meta.id_fusion_data.vcf ### Fixed @@ -44,12 +50,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Arriba` visualisation now runs for FusionInspector (combined tools) results, not only `Arriba` results - Updated metro map with trimming options and placed `Arriba` visualisation after `FusionInspector` - Exit with error when using squid in combination with any ensembl version different from 102 -- Renamed output files [#395](https://github.com/nf-core/rnafusion/pull/395) - - `Arriba` visualisation pdf from meta.id to meta.id_combined_fusions_arriba_visualisation - - cram file from output bam of `STAR_FOR_ARRIBA`: meta.id to meta.id_star_for_arriba - - cram file from output bam of `STAR_FOR_STARFUSION`: meta.id to meta.id.star_for_starfusion.Aligned.sortedByCoord.out - - `fusion-report` index.html file to meta.id_fusionreport_index.html - - meta.id.vcf output from `MEGAFUSION` to meta.id_fusion_data.vcf ### Fixed