This commit is contained in:
Sviatoslav Sidorov 2021-07-06 22:58:28 +03:00
commit 2c421b7a43
990 changed files with 21091 additions and 32497 deletions

75
.github/workflows/nf-core-linting.yml vendored Normal file
View file

@ -0,0 +1,75 @@
name: nf-core linting
# This workflow is triggered on pushes and PRs to the repository.
# It runs the `nf-core lint` tests to ensure that the module code meets the nf-core guidelines
on: [push, pull_request]
jobs:
changes:
name: Check for changes
runs-on: ubuntu-latest
outputs:
# Expose matched filters as job 'modules' output variable
modules: ${{ steps.filter.outputs.changes }}
steps:
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2
id: filter
with:
filters: "tests/config/pytest_software.yml"
lint:
runs-on: ubuntu-20.04
env:
NXF_VER: 21.04.0
name: ${{ matrix.tags }}
needs: changes
if: needs.changes.outputs.modules != '[]'
strategy:
fail-fast: false
matrix:
tags: ["${{ fromJson(needs.changes.outputs.modules) }}"]
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.x"
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Install pip
run: python -m pip install --upgrade pip
# FIXME: Remove this when nf-core modules lint stabilizes and install stable release
- name: Install nf-core tools development version
run: python -m pip install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev
- name: Install Nextflow
env:
CAPSULE_LOG: none
run: |
wget -qO- get.nextflow.io | bash
sudo mv nextflow /usr/local/bin/
- name: Lint ${{ matrix.tags }}
run: nf-core modules lint ${{ matrix.tags }}
- uses: actions/cache@v2
with:
path: /usr/local/bin/nextflow
key: ${{ runner.os }}
restore-keys: |
${{ runner.os }}

View file

@ -10,6 +10,7 @@ jobs:
modules: ${{ steps.filter.outputs.changes }} modules: ${{ steps.filter.outputs.changes }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: dorny/paths-filter@v2 - uses: dorny/paths-filter@v2
id: filter id: filter
with: with:
@ -17,29 +18,41 @@ jobs:
test: test:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
name: ${{ matrix.tags }} ${{ matrix.profile }} ${{ matrix.nxf_version }} name: ${{ matrix.tags }} ${{ matrix.profile }} ${{ matrix.nxf_version }}
needs: changes needs: changes
if: needs.changes.outputs.modules != '[]' if: needs.changes.outputs.modules != '[]'
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
nxf_version: ['20.11.0-edge', '21.03.0-edge'] nxf_version: ['21.04.0']
tags: ['${{ fromJson(needs.changes.outputs.modules) }}'] tags: ['${{ fromJson(needs.changes.outputs.modules) }}']
profile: ['docker', 'singularity', 'conda'] profile: ['docker', 'singularity', 'conda']
env: env:
NXF_ANSI_LOG: false NXF_ANSI_LOG: false
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: "3.x" python-version: "3.x"
- uses: actions/cache@v2 - uses: actions/cache@v2
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: | restore-keys: |
${{ runner.os }}-pip- ${{ runner.os }}-pip-
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Install Python dependencies
run: python -m pip install --upgrade pip pytest-workflow
- uses: actions/cache@v2 - uses: actions/cache@v2
with: with:
path: /usr/local/bin/nextflow path: /usr/local/bin/nextflow
@ -50,17 +63,11 @@ jobs:
- name: Install Nextflow - name: Install Nextflow
env: env:
NXF_VER: ${{ matrix.nxf_version }} NXF_VER: ${{ matrix.nxf_version }}
CAPSULE_LOG: none
run: | run: |
wget -qO- get.nextflow.io | bash wget -qO- get.nextflow.io | bash
sudo mv nextflow /usr/local/bin/ sudo mv nextflow /usr/local/bin/
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Install dependencies
run: python -m pip install --upgrade pip pytest-workflow
- name: Set up Singularity - name: Set up Singularity
if: matrix.profile == 'singularity' if: matrix.profile == 'singularity'
uses: eWaterCycle/setup-singularity@v5 uses: eWaterCycle/setup-singularity@v5
@ -74,6 +81,7 @@ jobs:
auto-update-conda: true auto-update-conda: true
channels: conda-forge,bioconda,defaults channels: conda-forge,bioconda,defaults
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
- name: Conda clean - name: Conda clean
if: matrix.profile == 'conda' if: matrix.profile == 'conda'
run: conda clean -a run: conda clean -a

2
.gitignore vendored
View file

@ -5,3 +5,5 @@ test_output/
output/ output/
.DS_Store .DS_Store
*.code-workspace *.code-workspace
.screenrc
.*.sw?

View file

@ -1,6 +1,6 @@
# ![nf-core/modules](docs/images/nfcore-modules_logo.png) # ![nf-core/modules](docs/images/nfcore-modules_logo.png)
[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A520.11.0--edge-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) [![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.04.0-23aa62.svg?labelColor=000000)](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 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 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/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)
@ -27,7 +27,6 @@ A repository for hosting [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl
- [Uploading to `nf-core/modules`](#uploading-to-nf-coremodules) - [Uploading to `nf-core/modules`](#uploading-to-nf-coremodules)
- [Guidelines](#guidelines) - [Guidelines](#guidelines)
- [Terminology](#terminology) - [Terminology](#terminology)
- [Nextflow edge releases](#nextflow-edge-releases)
- [Help](#help) - [Help](#help)
- [Citation](#citation) - [Citation](#citation)
@ -167,10 +166,22 @@ If the module doesn't exist on `nf-core/modules`:
We have implemented a number of commands in the `nf-core/tools` package to make it incredibly easy for you to create and contribute your own modules to nf-core/modules. We have implemented a number of commands in the `nf-core/tools` package to make it incredibly easy for you to create and contribute your own modules to nf-core/modules.
1. Install the latest version of [`nf-core/tools`](https://github.com/nf-core/tools#installation) (`>=1.13`) 1. Install the latest version of [`nf-core/tools`](https://github.com/nf-core/tools#installation) (`>=1.13`)
2. Install [`nextflow`](https://nf-co.re/usage/installation) (`>=20.11.0-edge`; see [Nextflow edge releases](#nextflow-edge-releases)) 2. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`)
3. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Conda`](https://conda.io/miniconda.html) 3. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Conda`](https://conda.io/miniconda.html)
4. [Fork and clone this repo locally](#uploading-to-nf-coremodules) 4. [Fork and clone this repo locally](#uploading-to-nf-coremodules)
5. Create a module using the [nf-core DSL2 module template](https://github.com/nf-core/tools/blob/master/nf_core/module-template/software/main.nf): 5. Set up git by adding a new remote of the nf-core git repo called `upstream`
```bash
git remote add upstream https://github.com/nf-core/modules.git
```
Make a new branch for your module and check it out
```bash
git checkout -b fastqc
```
6. Create a module using the [nf-core DSL2 module template](https://github.com/nf-core/tools/blob/master/nf_core/module-template/software/main.nf):
```console ```console
$ nf-core modules create . --tool fastqc --author @joebloggs --label process_low --meta $ nf-core modules create . --tool fastqc --author @joebloggs --label process_low --meta
@ -218,7 +229,7 @@ We have implemented a number of commands in the `nf-core/tools` package to make
`md5sum` checks are the preferable choice of test to determine file changes, however, this may not be possible for all outputs generated by some tools e.g. if they include time stamps or command-related headers. Please do your best to avoid just checking for the file being present e.g. it may still be possible to check that the file contains the appropriate text snippets. `md5sum` checks are the preferable choice of test to determine file changes, however, this may not be possible for all outputs generated by some tools e.g. if they include time stamps or command-related headers. Please do your best to avoid just checking for the file being present e.g. it may still be possible to check that the file contains the appropriate text snippets.
6. Create a yaml file containing information required for module unit testing 7. Create a yaml file containing information required for module unit testing
```console ```console
$ nf-core modules create-test-yml $ nf-core modules create-test-yml
@ -251,7 +262,7 @@ We have implemented a number of commands in the `nf-core/tools` package to make
> NB: See docs for [running tests manually](#running-tests-manually) if you would like to run the tests manually. > NB: See docs for [running tests manually](#running-tests-manually) if you would like to run the tests manually.
7. Lint the module locally to check that it adheres to nf-core guidelines before submission 8. Lint the module locally to check that it adheres to nf-core guidelines before submission
```console ```console
$ nf-core modules lint . --tool fastqc $ nf-core modules lint . --tool fastqc
@ -294,23 +305,52 @@ We have implemented a number of commands in the `nf-core/tools` package to make
╰──────────────────────╯ ╰──────────────────────╯
``` ```
9. Once ready, the code can be pushed and a pull request (PR) created
On a regular basis you can pull upstream changes into this branch and it is recommended to do so before pushing and creating a pull request - see below. Rather than merging changes directly from upstream the rebase strategy is recommended so that your changes are applied on top of the latest master branch from the nf-core repo. This can be performed as follows
```bash
git pull --rebase upstream master
```
Once you are ready you can push the code and create a PR
```bash
git push -u origin fastqc
```
Once the PR has been accepted you should delete the branch and checkout master again.
```bash
git checkout master
git branch -d fastqc
```
In case there are commits on the local branch that didn't make it into the PR (usually commits made after the PR), git will warn about this and not delete the branch. If you are sure you want to delete, use the following command
```bash
git branch -D fastqc
```
### Test data ### Test data
In order to test that each module added to `nf-core/modules` is actually working and to be able to track any changes to results files between module updates we have set-up a number of Github Actions CI tests to run each module on a minimal test dataset using Docker, Singularity and Conda. In order to test that each module added to `nf-core/modules` is actually working and to be able to track any changes to results files between module updates we have set-up a number of Github Actions CI tests to run each module on a minimal test dataset using Docker, Singularity and Conda.
- All test data for `nf-core/modules` MUST be added to [`tests/data/`](tests/data/) and organised by filename extension. - All test data for `nf-core/modules` MUST be added to the `modules` branch of [`nf-core/test-datasets`](https://github.com/nf-core/test-datasets/tree/modules/data) and organised by filename extension.
- In order to keep the size of this repository as minimal as possible, pre-existing files from [`tests/data/`](tests/data/) MUST be reused if at all possible. - In order to keep the size of this repository as minimal as possible, pre-existing files from [`nf-core/test-datasets`](https://github.com/nf-core/test-datasets/tree/modules/data) MUST be reused if at all possible.
- Test files MUST be kept as tiny as possible. - Test files MUST be kept as tiny as possible.
- If the appropriate test data doesn't exist in the `modules` branch of [`nf-core/test-datasets`](https://github.com/nf-core/test-datasets/tree/modules/data) please contact us on the [nf-core Slack `#modules` channel](https://nfcore.slack.com/channels/modules) (you can join with [this invite](https://nf-co.re/join/slack)) to discuss possible options.
### Running tests manually ### Running tests manually
As outlined in the [nf-core modules create](#nf-core-modules-create) section we have made it quite trivial to create an initial yaml file (via the `nf-core modules create-test-yml` command) containing a listing of all of the module output files and their associated md5sums. However, md5sum checks may not be appropriate for all output files if for example they contain timestamps. This is why it is a good idea to re-run the tests locally with `pytest-workflow` before you create your pull request adding the module. If your files do indeed have timestamps or other issues that prevent you from using the md5sum check, then you can edit the `test.yml` file to instead check that the file contains some specific content or as a last resort, if it exists. The different test options are listed in the [pytest-workflow docs](https://pytest-workflow.readthedocs.io/en/stable/#test-options). As outlined in the [nf-core modules create](#nf-core-modules-create) section we have made it quite trivial to create an initial yaml file (via the `nf-core modules create-test-yml` command) containing a listing of all of the module output files and their associated md5sums. However, md5sum checks may not be appropriate for all output files if for example they contain timestamps. This is why it is a good idea to re-run the tests locally with `pytest-workflow` before you create your pull request adding the module. If your files do indeed have timestamps or other issues that prevent you from using the md5sum check, then you can edit the `test.yml` file to instead check that the file contains some specific content or as a last resort, if it exists. The different test options are listed in the [pytest-workflow docs](https://pytest-workflow.readthedocs.io/en/stable/#test-options).
Please follow the steps below to run the tests locally: Please follow the steps below to run the tests locally:
1. Install [`nextflow`](https://nf-co.re/usage/installation) 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`)
2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Conda`](https://conda.io/miniconda.html) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Conda`](https://conda.io/miniconda.html)
@ -322,21 +362,21 @@ Please follow the steps below to run the tests locally:
```console ```console
cd /path/to/git/clone/of/nf-core/modules/ cd /path/to/git/clone/of/nf-core/modules/
PROFILE=docker pytest --tag fastqc_single_end --symlink --keep-workflow-wd PROFILE=docker pytest --tag fastqc --symlink --keep-workflow-wd
``` ```
- Typical command with Singularity: - Typical command with Singularity:
```console ```console
cd /path/to/git/clone/of/nf-core/modules/ cd /path/to/git/clone/of/nf-core/modules/
TMPDIR=~ PROFILE=singularity pytest --tag fastqc_single_end --symlink --keep-workflow-wd TMPDIR=~ PROFILE=singularity pytest --tag fastqc --symlink --keep-workflow-wd
``` ```
- Typical command with Conda: - Typical command with Conda:
```console ```console
cd /path/to/git/clone/of/nf-core/modules/ cd /path/to/git/clone/of/nf-core/modules/
PROFILE=conda pytest --tag fastqc_single_end --symlink --keep-workflow-wd PROFILE=conda pytest --tag fastqc --symlink --keep-workflow-wd
``` ```
- See [docs on running pytest-workflow](https://pytest-workflow.readthedocs.io/en/stable/#running-pytest-workflow) for more info. - See [docs on running pytest-workflow](https://pytest-workflow.readthedocs.io/en/stable/#running-pytest-workflow) for more info.
@ -488,25 +528,6 @@ The features offered by Nextflow DSL2 can be used in various ways depending on t
- *Workflow*: What DSL1 users would consider an end-to-end pipeline. For example, from one or more inputs to a series of outputs. This can either be implemented using a large monolithic script as with DSL1, or by using a combination of DSL2 individual modules and sub-workflows. - *Workflow*: What DSL1 users would consider an end-to-end pipeline. For example, from one or more inputs to a series of outputs. This can either be implemented using a large monolithic script as with DSL1, or by using a combination of DSL2 individual modules and sub-workflows.
## Nextflow edge releases
Stable releases will be becoming more infrequent as Nextflow shifts its development model to becoming more dynamic via the usage of plugins. This will allow functionality to be added as an extension to the core codebase with a release cycle that could potentially be independent to that of Nextflow itself. As a result of the reduction in stable releases, some pipelines may be required to use Nextflow `edge` releases in order to be able to exploit cutting "edge" features e.g. version 3.0 of the nf-core/rnaseq pipeline requires Nextflow `>=20.11.0-edge` in order to be able to directly download Singularity containers over `http` (see [nf-core/rnaseq#496](https://github.com/nf-core/rnaseq/issues/496)).
There are a number of ways you can install Nextflow `edge` releases, the main difference with stable releases being that you have to `export` the version you would like to install before issuing the appropriate installation/execution commands as highlighted below.
- If you would like to download and install a Nextflow `edge` release from scratch with minimal fuss:
```bash
export NXF_VER="20.11.0-edge"
wget -qO- get.nextflow.io | bash
sudo mv nextflow /usr/local/bin/
nextflow run nf-core/rnaseq -profile test,docker -r 3.0
```
> Note if you don't have `sudo` privileges required for the last command above then you can move the `nextflow` binary to somewhere else and export that directory to `$PATH` instead. One way of doing that on Linux would be to add `export PATH=$PATH:/path/to/nextflow/binary/` to your `~/.bashrc` file so that it is available every time you login to your system.
- Manually download and install Nextflow from the available [assets](https://github.com/nextflow-io/nextflow/releases) on Github. See [Nextflow installation docs](https://www.nextflow.io/docs/latest/getstarted.html#installation).
## Help ## Help
For further information or help, don't hesitate to get in touch on [Slack `#modules` channel](https://nfcore.slack.com/channels/modules) (you can join with [this invite](https://nf-co.re/join/slack)). For further information or help, don't hesitate to get in touch on [Slack `#modules` channel](https://nfcore.slack.com/channels/modules) (you can join with [this invite](https://nf-co.re/join/slack)).
@ -541,5 +562,5 @@ nextflow run /path/to/pipeline/ -c /path/to/custom_module.conf
> files + singularity containers + institutional configs + modules in one go for you, to make this process easier. > files + singularity containers + institutional configs + modules in one go for you, to make this process easier.
# New test data created for the module- sequenzautils/bam2seqz # New test data created for the module- sequenzautils/bam2seqz
The new test data is an output from another module- sequenzautils/bcwiggle- (which uses sarscov2 genome fasta file as an input). The new test data is an output from another module- sequenzautils/bcwiggle- (which uses sarscov2 genome fasta file as an input).
--> -->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

View file

@ -1,450 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1280"
height="640"
viewBox="0 0 338.66666 169.33333"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="social_preview_image_modules.svg"
inkscape:export-filename="social_preview_image.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<defs
id="defs2">
<clipPath
id="d">
<path
inkscape:connector-curvature="0"
id="path9"
d="M 0,266 H 1022 V 0 H 0 Z" />
</clipPath>
<clipPath
id="c">
<path
inkscape:connector-curvature="0"
id="path12"
d="m 280.17,136.33 -21.5,-21.584 h 61 v 21.584 z" />
</clipPath>
<linearGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(47.34875,36.9925,-36.9925,47.34875,344.325,162.1875)"
x2="1"
id="a">
<stop
id="stop15"
offset="0"
stop-color="#0c542a" />
<stop
id="stop17"
offset=".21472"
stop-color="#0c542a" />
<stop
id="stop19"
offset=".57995"
stop-color="#25af64" />
<stop
id="stop21"
offset=".84663"
stop-color="#25af64" />
<stop
id="stop23"
offset="1"
stop-color="#25af64" />
</linearGradient>
<clipPath
id="b">
<path
inkscape:connector-curvature="0"
id="path26"
d="M 0,266 H 1022 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath202"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path204"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath158"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path160"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath86"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path88"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath94"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path96"
d="M 804.509,211 H 968.795 V 114.019 H 804.509 Z" />
</clipPath>
<clipPath
id="clipPath110"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path112"
d="M 804.597,506 H 968.883 V 409.019 H 804.597 Z" />
</clipPath>
<clipPath
id="clipPath126"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path128"
d="M 133.598,209 H 297.883 V 112.019 H 133.598 Z" />
</clipPath>
<clipPath
id="clipPath142"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path144"
d="M 133.686,504 H 297.972 V 407.019 H 133.686 Z" />
</clipPath>
<clipPath
id="clipPath54"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path56-6"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath30"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath202-3"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path204-6"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath158-7"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path160-5"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath86-3"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path88-5"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath94-6"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path96-2"
d="M 804.509,211 H 968.795 V 114.019 H 804.509 Z" />
</clipPath>
<clipPath
id="clipPath110-9"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path112-1"
d="M 804.597,506 H 968.883 V 409.019 H 804.597 Z" />
</clipPath>
<clipPath
id="clipPath126-2"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path128-7"
d="M 133.598,209 H 297.883 V 112.019 H 133.598 Z" />
</clipPath>
<clipPath
id="clipPath142-0"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path144-9"
d="M 133.686,504 H 297.972 V 407.019 H 133.686 Z" />
</clipPath>
<clipPath
id="clipPath54-3"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path56-60"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath30-6"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32-2"
d="M 0,600 H 1500 V 0 H 0 Z" />
</clipPath>
<linearGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(47.34875,36.9925,-36.9925,47.34875,344.325,162.1875)"
x2="1"
id="a-3">
<stop
id="stop15-61"
offset="0"
stop-color="#0c542a" />
<stop
id="stop17-29"
offset=".21472"
stop-color="#0c542a" />
<stop
id="stop19-3"
offset=".57995"
stop-color="#25af64" />
<stop
id="stop21-19"
offset=".84663"
stop-color="#25af64" />
<stop
id="stop23-4"
offset="1"
stop-color="#25af64" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(14.322136,11.189559,-11.189559,14.322136,103.39117,-43.22521)"
x2="1"
id="f">
<stop
id="stop12"
offset="0"
stop-color="#0c542a" />
<stop
id="stop14"
offset=".21472"
stop-color="#0c542a" />
<stop
id="stop16"
offset=".57995"
stop-color="#25af64" />
<stop
id="stop18"
offset=".84663"
stop-color="#25af64" />
<stop
id="stop20"
offset="1"
stop-color="#25af64" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="239.76779"
inkscape:cy="266.99956"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1012"
inkscape:window-x="1920"
inkscape:window-y="759"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
units="px" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(31.749994,-15.785728)">
<flowRoot
xml:space="preserve"
id="flowRoot308"
style="font-style:normal;font-weight:normal;font-size:37.33333206px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-34.517006,20.683034)"><flowRegion
id="flowRegion310"
style="font-size:37.33333206px;text-align:center;text-anchor:middle"><rect
id="rect312"
width="1031.3657"
height="101.01524"
x="135.36044"
y="417.76645"
style="font-size:37.33333206px;text-align:center;text-anchor:middle" /></flowRegion><flowPara
style="font-size:32px;text-align:center;text-anchor:middle"
id="flowPara903">Repository to host tool-specific module files for</flowPara><flowPara
style="font-size:32px;text-align:center;text-anchor:middle"
id="flowPara905">the Nextflow DSL2 community!</flowPara></flowRoot> <g
id="g603"
transform="matrix(0.44611981,0,0,0.44611981,44.334855,81.689003)">
<flowRoot
xml:space="preserve"
id="flowRoot1021"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(1.9231376,0,0,1.9231376,-514.12361,-525.99533)"><flowRegion
id="flowRegion1023"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold'"><rect
id="rect1025"
width="275.99985"
height="102.85306"
x="274.76151"
y="267.25372"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold'" /></flowRegion><flowPara
id="flowPara1027"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold'">modules</flowPara><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold'"
id="flowPara982" /></flowRoot> </g>
<g
id="g551"
transform="matrix(0.44611981,0,0,0.44611981,44.677261,81.689003)">
<path
style="fill:#24af63;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path24"
d="m 401.03289,-44.148517 v 1.35913 c -0.0378,0 -0.0378,0 -0.0755,0.03775 l -0.67956,-0.566304 c -1.51015,-1.283623 -3.13355,-2.416231 -4.94572,-3.322317 -0.30203,-0.151014 -0.60406,-0.339782 -0.94384,-0.415289 -0.0378,-0.03775 -0.0755,-0.07551 -0.11326,-0.07551 -0.67957,-0.264275 -1.35913,-0.490796 -2.07645,-0.679564 -1.5479,-0.339783 -3.0958,-0.377536 -4.64369,-0.07551 -2.00094,0.41529 -3.77536,1.283623 -5.47428,2.416231 -1.66115,1.132607 -3.1713,2.453983 -4.56818,3.850866 -0.26428,0.264276 -0.26428,0.264276 -0.41529,-0.07551 -0.75507,-1.547897 -1.58565,-3.058041 -2.605,-4.454924 -0.79282,-1.057101 -1.66116,-2.038694 -2.79376,-2.718259 -1.13261,-0.717318 -2.37848,-0.981594 -3.69986,-0.641811 -1.6234,0.377536 -2.94478,1.359129 -4.19065,2.41623 -0.75507,0.566304 -1.43463,1.245869 -2.1142,1.88768 -0.64181,0.566304 -1.24587,1.132608 -1.88768,1.698912 -0.11326,0.11326 -0.18877,0.11326 -0.30203,0 -0.64181,-0.679565 -1.32137,-1.283623 -2.1142,-1.698912 -1.17036,-0.641811 -2.37847,-0.717319 -3.62434,-0.302029 -1.0571,0.339782 -1.96319,0.906086 -2.90703,1.510144 -0.37754,0.226521 -0.71732,0.490797 -1.09485,0.679565 v -0.07551 c 0.0378,-0.07551 0.0378,-0.151014 0.0378,-0.226521 0.0755,-1.661158 0.18877,-3.36007 0.45304,-5.021228 0.37754,-2.30297 0.94384,-4.530432 1.96319,-6.60688 0.75507,-1.547897 1.77442,-2.982534 3.05804,-4.152895 1.69891,-1.547898 3.69985,-2.529491 5.88956,-3.133549 2.37848,-0.679565 4.79471,-0.981593 7.24869,-1.094854 0.9816,-0.03775 1.92544,-0.07551 2.90703,-0.113261 0.4908,0.188768 0.98159,0.302029 1.47239,0.453043 0.71732,0.226522 1.43464,0.453043 2.15195,0.641811 0.37754,0.151015 0.71732,0.264276 1.09486,0.41529 1.39688,0.490797 2.75601,1.132608 3.92637,2.076448 0.30203,0.226521 0.60406,0.490796 0.90609,0.755072 -0.0755,-0.226522 -0.15102,-0.41529 -0.22652,-0.641811 -0.52855,-1.396884 -1.32138,-2.529491 -2.605,-3.322317 -0.52855,-0.339782 -1.09485,-0.566304 -1.66116,-0.868333 0.0378,0 0.11326,0 0.15102,-0.03775 1.69891,-0.302029 3.43557,-0.453043 5.17224,-0.528551 1.47239,-0.07551 2.98253,-0.03775 4.45492,0.113261 1.73667,0.188768 3.43558,0.528551 5.05898,1.132608 2.41623,0.906086 4.49268,2.302969 6.11609,4.341664 1.39688,1.774419 2.30297,3.813113 2.86927,6.002821 0.5663,2.151955 0.79283,4.379418 0.86833,6.60688 -0.0378,0.792825 -0.0378,1.623404 -0.0378,2.453983 z"
class="st0" />
<path
style="fill:#ecdc86;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path26-8"
d="m 401.03289,-46.640254 h 0.0378 v 2.491737 h -0.0378 z"
class="st4" />
<path
style="fill:#a0918f;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path28"
d="m 387.25283,-82.468416 v 0.03775 h -1.69891 v -0.03775 z"
class="st5" />
<path
style="fill:#24af63;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path30"
d="m 388.34768,-11.340642 c 0.94384,-0.377536 1.84993,-0.868332 2.75601,-1.359129 1.0571,-0.641811 2.0387,-1.321376 3.02029,-2.038694 0.83058,-0.604058 1.62341,-1.245869 2.41623,-1.925434 l 1.35913,-1.132608 c 0.0755,-0.07551 0.0755,-0.03775 0.11326,0.03775 0.15102,0.604058 0.26428,1.245869 0.41529,1.88768 0.18877,0.868333 0.30203,1.736665 0.41529,2.604998 0.11326,1.019347 0.15102,2.000941 0.0755,3.020288 -0.0755,1.2458683 -0.30203,2.491737 -0.75507,3.6620985 -0.26428,0.7173183 -0.60406,1.396883 -1.01935,2.0386942 -0.52855,0.8305791 -1.13261,1.585651 -1.88768,2.2274621 -0.86833,0.7928255 -1.84993,1.47239026 -2.90703,2.0386942 -1.39688,0.79282552 -2.90702,1.3591295 -4.45492,1.8121726 -1.47239,0.4530432 -2.98254,0.7550719 -4.49268,1.0193471 -0.41529,0.075507 -0.83058,0.1510144 -1.24587,0.1510144 -0.86833,-0.037754 -1.73666,-0.2265216 -2.56724,-0.5285504 -1.24587,-0.4907967 -2.34073,-1.24586863 -3.58659,-1.81217257 -0.67957,-0.30202876 -1.35913,-0.52855034 -2.07645,-0.56630394 -0.94384,-0.0755072 -1.73667,0.26427518 -2.41623,0.90608631 l -1.47239,1.4723902 c -0.83058,0.8305792 -1.81218,1.3968831 -2.98254,1.5856511 -0.79282,0.1132608 -1.54789,0.075507 -2.34072,-0.037754 -1.09485,-0.1510144 -2.15195,-0.4152896 -3.1713,-0.7173183 -1.51015,-0.4907968 -2.90703,-1.1703615 -4.19065,-2.15195502 -1.20812,-0.9060863 -2.15196,-2.03869418 -2.94478,-3.32231648 -0.79283,-1.3213758 -1.24587,-2.7182589 -1.58565,-4.1906491 -0.15102,-0.6418112 -0.22652,-1.3213759 -0.30203,-1.963187 -0.11326,-0.9438399 -0.15102,-1.8499259 -0.11326,-2.7937659 0.0378,-1.321376 0.15101,-2.604998 0.33978,-3.926374 0.15101,0.151015 0.30203,0.264275 0.41529,0.377536 0.83058,0.755072 1.77442,1.434637 2.75601,2.038694 1.09486,0.641811 2.30297,1.170362 3.54884,1.510144 0.83058,0.226522 1.69891,0.377536 2.56724,0.41529 0.71732,0.07551 1.43464,0.07551 2.15196,0.03775 0.83058,-0.03775 1.69891,-0.11326 2.52949,-0.339782 0.11326,0 0.22652,0 0.30203,-0.03775 0.75507,-0.151014 1.51014,-0.339782 2.26522,-0.566304 0.86833,-0.264275 1.69891,-0.52855 2.52949,-0.830579 0.79282,-0.302028 1.6234,-0.641811 2.41623,-0.981593 0.22652,-0.113261 0.37753,-0.07551 0.5663,0.07551 1.32138,1.019347 2.75601,1.88768 4.30391,2.529491 1.73667,0.679565 3.51108,1.019347 5.36101,0.868333 1.35913,-0.264276 2.64275,-0.604058 3.88862,-1.094855 z"
class="st0" />
<path
style="fill:#ecdc86;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path32-3"
d="m 388.34768,-11.340642 c -1.24587,0.490797 -2.52949,0.830579 -3.85087,0.94384 -1.84992,0.151015 -3.62434,-0.188768 -5.36101,-0.868332 -1.54789,-0.604058 -2.98253,-1.472391 -4.30391,-2.529491 -0.18876,-0.151015 -0.33978,-0.188768 -0.5663,-0.07551 -0.79283,0.339783 -1.58565,0.679565 -2.41623,0.981594 -0.83058,0.302029 -1.66116,0.604057 -2.52949,0.830579 -0.75507,0.226522 -1.51014,0.377536 -2.26522,0.566304 -0.11326,0.03775 -0.22652,0.03775 -0.30203,0.03775 0.26428,-0.302029 0.52855,-0.604058 0.79283,-0.906087 1.0571,-1.208115 1.81217,-2.604998 2.22746,-4.190649 0.60406,-2.114201 1.20812,-4.266156 1.73667,-6.418111 0.37753,-1.585651 0.67956,-3.171302 0.90608,-4.794707 0.15102,-1.170361 0.37754,-5.625286 0.30203,-6.682386 -0.18877,-3.24681 -0.90608,-6.342605 -2.22746,-9.325139 -0.79283,-1.774419 -2.15195,-2.982534 -4.03963,-3.47333 -0.83058,-0.226522 -1.66116,-0.151015 -2.45399,0.11326 -0.0755,0.03775 -0.11326,0.07551 -0.18877,0.03775 1.24587,-1.057101 2.52949,-2.038694 4.19065,-2.41623 1.32138,-0.302029 2.56725,-0.07551 3.69986,0.641811 1.1326,0.717318 2.00094,1.661158 2.79376,2.718259 1.01935,1.396883 1.84993,2.907027 2.605,4.454924 0.15101,0.339783 0.15101,0.339783 0.41529,0.07551 1.39688,-1.434636 2.90703,-2.756012 4.56818,-3.850866 1.66116,-1.132608 3.47334,-2.000941 5.47428,-2.416231 1.54789,-0.302028 3.09579,-0.264275 4.64369,0.07551 0.71732,0.151014 1.39688,0.377536 2.07645,0.679564 0.0378,0.03775 0.11326,0.03775 0.11326,0.07551 -2.00094,0.03775 -3.69986,0.792825 -5.24775,1.963187 -0.75508,0.566303 -1.43464,1.208115 -1.96319,2.00094 -0.41529,0.641811 -0.79283,1.35913 -1.09485,2.076448 -0.67957,1.434637 -1.24587,2.94478 -1.66116,4.492678 -0.33978,1.321376 -0.56631,2.680505 -0.67957,4.039635 -0.0755,1.0571 -0.11326,2.114201 -0.0755,3.171302 0.0377,1.283622 0.18876,2.567244 0.33978,3.88862 0.26427,2.151955 0.64181,4.30391 1.01934,6.455865 0.18877,1.170361 0.33979,2.378477 0.56631,3.586592 0.26427,1.736665 1.24587,3.020287 2.64275,4.001881 0,-0.03775 0.0755,0 0.11326,0.03775 z"
class="st4" />
<path
style="fill:#3f2b29;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path34-7"
d="m 385.55392,-82.430663 h 1.69891 c 1.35913,0.07551 2.71826,0.302029 4.00188,0.755072 1.01935,0.339782 1.24587,1.019347 0.64181,1.88768 -0.41529,0.604057 -1.01935,1.057101 -1.66116,1.47239 -0.79282,0.52855 -1.66116,0.981594 -2.605,1.321376 -0.94384,0.377536 -1.84992,0 -2.45398,-0.94384 -0.18877,-0.302029 -0.33978,-0.604058 -0.41529,-0.94384 -0.0378,-0.113261 -0.0755,-0.151014 -0.18877,-0.151014 -2.1142,-0.377536 -4.00188,0.113261 -5.54978,1.623404 -1.28362,1.208115 -2.03869,2.756013 -2.56724,4.417171 -0.4908,1.510144 -0.71732,3.020288 -0.79283,4.605939 -0.0755,1.396883 0.0378,2.793766 0.22652,4.152895 0.0378,0.226522 0.11327,0.453044 0.11327,0.717319 0.0378,0.302028 -0.0755,0.566304 -0.30203,0.717318 -0.26428,0.188768 -0.56631,0.151014 -0.86834,0.151014 -0.71731,-0.226521 -1.43463,-0.453043 -2.15195,-0.641811 v -0.490796 c 0,-0.755072 0,-1.472391 0.0378,-2.227463 0.15102,-2.907027 0.60406,-5.7763 1.73667,-8.494559 0.83058,-2.038694 2.03869,-3.813113 3.7376,-5.209996 1.39689,-1.170361 2.98254,-1.925433 4.75696,-2.340723 0.90608,-0.226522 1.73666,-0.339782 2.605,-0.377536 z"
class="st6" />
<path
style="fill:#396e35;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path36"
d="m 374.86965,-62.685532 c 0.30203,0 0.60406,0.03775 0.86833,-0.151015 0.26428,-0.188768 0.33978,-0.453043 0.30203,-0.717318 -0.0378,-0.226521 -0.0755,-0.490797 -0.11326,-0.717318 0.15101,0 0.26427,-0.03775 0.41529,-0.03775 0.52855,0.302029 1.09485,0.566304 1.66116,0.868333 1.28362,0.792825 2.07644,1.925433 2.60499,3.322316 0.0755,0.226522 0.15102,0.41529 0.22653,0.641811 -0.30203,-0.264275 -0.60406,-0.52855 -0.90609,-0.755071 -1.20812,-0.906087 -2.52949,-1.547898 -3.92637,-2.076448 -0.41529,-0.113261 -0.75508,-0.226522 -1.13261,-0.377536 z"
class="st7" />
<path
style="fill:#396e35;stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path38-9"
d="m 372.71769,-63.81814 v 0.490797 c -0.49079,-0.151015 -0.98159,-0.264275 -1.47239,-0.453043 0.52855,-0.03775 1.01935,-0.03775 1.47239,-0.03775 z"
class="st7" />
</g>
<g
id="g596"
transform="matrix(0.44611981,0,0,0.44611981,44.677261,81.689003)">
<path
d="m 150.58729,-13.861192 q -5.8632,0 -10.61714,-2.29774 -4.75394,-2.29774 -7.60631,-6.89322 -2.77314,-4.674713 -2.77314,-11.330235 0,-10.696376 5.70474,-16.163413 5.70473,-5.546269 15.21262,-5.546269 3.32776,0 6.73476,0.713092 3.40699,0.633859 6.02166,1.822345 v 10.141749 q -3.24853,-1.426183 -5.78397,-2.139275 -2.53543,-0.792324 -5.07087,-0.792324 -5.22934,0 -8.16094,2.61467 -2.9316,2.535437 -2.9316,8.002474 0,6.100896 2.6939,9.032495 2.77314,2.931599 8.95327,2.931599 4.67471,0 10.37944,-3.169296 v 10.062516 q -2.85236,1.505416 -5.94243,2.218508 -3.01083,0.792324 -6.81399,0.792324 z"
style="font-weight:bold;font-size:medium;line-height:0%;font-family:'Maven Pro';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path569"
inkscape:connector-curvature="0" />
<path
d="m 189.64516,-13.702727 q -10.14175,0 -15.21262,-5.387804 -5.07088,-5.387805 -5.07088,-16.004948 0,-11.092538 4.99164,-16.163413 5.07088,-5.070874 15.29186,-5.070874 10.22098,0 15.37109,5.229339 5.15011,5.150107 5.15011,16.004948 0,10.458679 -5.30858,15.925715 -5.30857,5.467037 -15.21262,5.467037 z m 0,-9.428657 q 4.35778,0 6.57629,-3.010832 2.21851,-3.090064 2.21851,-8.953263 0,-6.417826 -2.21851,-9.111728 -2.13927,-2.773134 -6.57629,-2.773134 -4.59548,0 -6.65552,2.773134 -1.98081,2.693902 -1.98081,9.111728 0,6.100896 2.06004,9.032495 2.13927,2.9316 6.57629,2.9316 z"
style="font-weight:bold;font-size:medium;line-height:0%;font-family:'Maven Pro';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path571"
inkscape:connector-curvature="0" />
<path
d="m 218.31492,-50.783497 q 1.18848,-1.030021 4.12008,-2.29774 3.01084,-1.267719 6.65553,-2.139275 3.72392,-0.950789 7.13091,-0.950789 6.57629,0 9.11173,1.98081 v 8.636333 q -3.1693,-0.713091 -9.11173,-0.713091 -3.72392,0 -6.10089,0.396162 v 30.979874 h -11.80563 z"
style="font-weight:bold;font-size:medium;line-height:0%;font-family:'Maven Pro';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path573"
inkscape:connector-curvature="0" />
<path
d="m 268.56064,-56.329766 q 18.77809,0 18.54039,24.482816 H 260.6374 q 1.50542,8.319403 11.17177,8.319403 2.9316,0 5.70474,-0.792324 2.85236,-0.871556 6.02166,-2.218507 v 10.141749 q -6.49706,2.693902 -14.57876,2.693902 -6.1009,0 -10.69638,-2.456205 -4.59548,-2.535437 -7.13092,-7.21015 -2.53543,-4.674712 -2.53543,-11.013305 0,-10.458679 5.1501,-16.163413 5.22934,-5.783966 14.81646,-5.783966 z m -0.47539,9.032495 q -6.33859,0 -7.52708,7.923242 h 14.81646 q -0.55462,-4.278551 -2.29774,-6.100896 -1.66388,-1.822346 -4.99164,-1.822346 z"
style="font-weight:bold;font-size:medium;line-height:0%;font-family:'Maven Pro';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path575"
inkscape:connector-curvature="0" />
<path
d="m 318.12052,-74.790919 h 8.47787 l -29.15753,67.6644822 h -8.39863 z"
style="font-weight:bold;font-size:medium;line-height:0%;font-family:'Maven Pro';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path577"
inkscape:connector-curvature="0" />
</g>
<g
id="g589"
transform="matrix(0.44611981,0,0,0.44611981,44.677261,81.689003)">
<path
d="m 15.436598,-51.575821 q 3.090064,-1.663881 9.428657,-3.090064 6.338593,-1.426184 11.330235,-1.426184 8.477868,0 12.756419,3.327762 4.27855,3.327761 4.27855,10.934073 v 26.939021 h -11.80563 v -24.562049 q 0,-6.89322 -7.764776,-6.89322 -1.743113,0 -3.565459,0.396162 -1.822345,0.396162 -2.852367,0.950789 v 30.108318 H 15.436598 Z"
style="font-weight:bold;font-size:79.23241425px;line-height:0%;font-family:'Maven Pro';fill:#24af63;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path559"
inkscape:connector-curvature="0" />
<path
d="m 66.729683,-45.95032 h -5.863199 v -9.032495 h 5.942431 v -0.950789 q 0.07923,-9.032495 4.120086,-12.518721 4.120085,-3.565459 11.17177,-3.565459 1.267719,0 2.773134,0.237697 1.505416,0.237697 2.456205,0.554627 v 10.379446 q -0.871556,-0.871556 -1.743113,-1.267718 -0.871556,-0.475395 -2.218507,-0.475395 -2.218508,0 -3.486227,1.188486 -1.267718,1.188487 -1.267718,4.040854 v 2.376972 h 8.715565 v 9.032495 h -8.794798 v 31.059107 H 66.729683 Z"
style="font-weight:bold;font-size:79.23241425px;line-height:0%;font-family:'Maven Pro';fill:#24af63;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path561"
inkscape:connector-curvature="0" />
<path
d="m 96.008535,-43.256418 h 24.165885 v 8.160939 H 96.008535 Z"
style="font-weight:bold;font-size:79.23241425px;line-height:0%;font-family:'Maven Pro';fill:#24af63;fill-opacity:1;stroke:none;stroke-width:0.37753597"
id="path563"
inkscape:connector-curvature="0" />
<path
style="display:inline;fill:url(#f);stroke-width:0.37753597"
inkscape:connector-curvature="0"
id="path67"
d="m 105.17203,-43.255454 -8.129199,8.160957 h 23.064239 v -8.160957 z" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

45
software/abacas/main.nf Normal file
View file

@ -0,0 +1,45 @@
// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process ABACAS {
tag "$meta.id"
label 'process_medium'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::abacas=1.3.1" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/abacas:1.3.1--pl526_0"
} else {
container "quay.io/biocontainers/abacas:1.3.1--pl526_0"
}
input:
tuple val(meta), path(scaffold)
path fasta
output:
tuple val(meta), path('*.abacas*'), emit: results
path '*.version.txt' , emit: version
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
"""
abacas.pl \\
-r $fasta \\
-q $scaffold \\
$options.args \\
-o ${prefix}.abacas
mv nucmer.delta ${prefix}.abacas.nucmer.delta
mv nucmer.filtered.delta ${prefix}.abacas.nucmer.filtered.delta
mv nucmer.tiling ${prefix}.abacas.nucmer.tiling
mv unused_contigs.out ${prefix}.abacas.unused.contigs.out
echo \$(abacas.pl -v 2>&1) | sed 's/^.*ABACAS.//; s/ .*\$//' > ${software}.version.txt
"""
}

58
software/abacas/meta.yml Normal file
View file

@ -0,0 +1,58 @@
name: abacas
description: contiguate draft genome assembly
keywords:
- genome
- assembly
- contiguate
tools:
- abacas:
description: |
ABACAS is intended to rapidly contiguate (align, order, orientate),
visualize and design primers to close gaps on shotgun assembled
contigs based on a reference sequence.
homepage: http://abacas.sourceforge.net/documentation.html
documentation: http://abacas.sourceforge.net/documentation.html
tool_dev_url: None
doi: "10.1093/bioinformatics/btp347"
licence: ['GPL v2-or-later']
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- scaffold:
type: file
description: Fasta file containing scaffold
pattern: "*.{fasta,fa}"
- fasta:
type: file
description: FASTA reference file
pattern: "*.{fasta,fa}"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- results:
type: files
description: |
List containing abacas output files
[ 'test.abacas.bin', 'test.abacas.fasta', 'test.abacas.gaps',
'test.abacas.gaps.tab', 'test.abacas.nucmer.delta',
'test.abacas.nucmer.filtered.delta', 'test.abacas.nucmer.tiling',
'test.abacas.tab', 'test.abacas.unused.contigs.out',
'test.abacas.MULTIFASTA.fa' ]
pattern: "*.{abacas}*"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
authors:
- "@joseespinosa"
- "@drpatelh"

View file

@ -1,49 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: '' options.args3 = args.args3 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: '' options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files options.publish_files = args.publish_files
options.suffix = args.suffix ?: '' options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -8,7 +8,7 @@ process ADAPTERREMOVAL {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::adapterremoval=2.3.2" : null) conda (params.enable_conda ? "bioconda::adapterremoval=2.3.2" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: '' options.args3 = args.args3 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: '' options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files options.publish_files = args.publish_files
options.suffix = args.suffix ?: '' options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process ALLELECOUNTER {
label 'process_low' label 'process_low'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::cancerit-allelecount=4.2.1" : null) conda (params.enable_conda ? "bioconda::cancerit-allelecount=4.2.1" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

View file

@ -0,0 +1,41 @@
// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process ARTIC_GUPPYPLEX {
tag "$meta.id"
label 'process_high'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::artic=1.2.1" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/artic:1.2.1--py_0"
} else {
container "quay.io/biocontainers/artic:1.2.1--py_0"
}
input:
tuple val(meta), path(fastq_dir)
output:
tuple val(meta), path("*.fastq.gz"), emit: fastq
path "*.version.txt" , emit: version
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
"""
artic \\
guppyplex \\
$options.args \\
--directory $fastq_dir \\
--output ${prefix}.fastq
pigz -p $task.cpus *.fastq
echo \$(artic --version 2>&1) | sed 's/^.*artic //; s/ .*\$//' > ${software}.version.txt
"""
}

View file

@ -0,0 +1,44 @@
name: artic_guppyplex
description: Aggregates fastq files with demultiplexed reads
keywords:
- artic
- aggregate
- demultiplexed reads
tools:
- artic:
description: ARTIC pipeline - a bioinformatics pipeline for working with virus sequencing data sequenced with nanopore
homepage: https://artic.readthedocs.io/en/latest/
documentation: https://artic.readthedocs.io/en/latest/
tool_dev_url: https://github.com/artic-network/fieldbioinformatics
doi: ""
licence: ['MIT']
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- fastq_dir:
type: directory
description: Directory containing the fastq files with demultiplexed reads
pattern: "*"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- fastq:
type: file
description: Aggregated FastQ files
pattern: "*.{fastq.gz}"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
authors:
- "@joseespinosa"
- "@drpatelh"

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

View file

@ -0,0 +1,73 @@
// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process ARTIC_MINION {
tag "$meta.id"
label 'process_high'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::artic=1.2.1" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/artic:1.2.1--py_0"
} else {
container "quay.io/biocontainers/artic:1.2.1--py_0"
}
input:
tuple val(meta), path(fastq)
path fast5_dir
path sequencing_summary
path ("primer-schemes/${scheme}/V${scheme_version}/${scheme}.reference.fasta")
path ("primer-schemes/${scheme}/V${scheme_version}/${scheme}.scheme.bed")
path medaka_model
val scheme
val scheme_version
output:
tuple val(meta), path("${prefix}.*") , emit: results
tuple val(meta), path("${prefix}.sorted.bam") , emit: bam
tuple val(meta), path("${prefix}.sorted.bam.bai") , emit: bai
tuple val(meta), path("${prefix}.trimmed.rg.sorted.bam") , emit: bam_trimmed
tuple val(meta), path("${prefix}.trimmed.rg.sorted.bam.bai") , emit: bai_trimmed
tuple val(meta), path("${prefix}.primertrimmed.rg.sorted.bam") , emit: bam_primertrimmed
tuple val(meta), path("${prefix}.primertrimmed.rg.sorted.bam.bai"), emit: bai_primertrimmed
tuple val(meta), path("${prefix}.consensus.fasta") , emit: fasta
tuple val(meta), path("${prefix}.pass.vcf.gz") , emit: vcf
tuple val(meta), path("${prefix}.pass.vcf.gz.tbi") , emit: tbi
tuple val(meta), path("*.json"), optional:true , emit: json
path "*.version.txt" , emit: version
script:
def software = getSoftwareName(task.process)
prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
def version = scheme_version.toString().toLowerCase().replaceAll('v','')
def fast5 = params.fast5_dir ? "--fast5-directory $fast5_dir" : ""
def summary = params.sequencing_summary ? "--sequencing-summary $sequencing_summary" : ""
def model = ""
if (options.args.tokenize().contains('--medaka')) {
fast5 = ""
summary = ""
model = file(params.artic_minion_medaka_model).exists() ? "--medaka-model ./$medaka_model" : "--medaka-model $params.artic_minion_medaka_model"
}
"""
artic \\
minion \\
$options.args \\
--threads $task.cpus \\
--read-file $fastq \\
--scheme-directory ./primer-schemes \\
--scheme-version $version \\
$model \\
$fast5 \\
$summary \\
$scheme \\
$prefix
echo \$(artic --version 2>&1) | sed 's/^.*artic //; s/ .*\$//' > ${software}.version.txt
"""
}

View file

@ -0,0 +1,113 @@
name: artic_minion
description: |
Run the alignment/variant-call/consensus logic of the artic pipeline
keywords:
- artic
- aggregate
- demultiplexed reads
tools:
- artic:
description: ARTIC pipeline - a bioinformatics pipeline for working with virus sequencing data sequenced with nanopore
homepage: https://artic.readthedocs.io/en/latest/
documentation: https://artic.readthedocs.io/en/latest/
tool_dev_url: https://github.com/artic-network/fieldbioinformatics
doi: ""
licence: ['MIT']
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- fastq:
type: file
description: FastQ file containing reads
pattern: "*.{fastq.gz}"
- fast5_dir:
type: directory
description: Directory containing MinION FAST5 files
pattern: "*"
- sequencing_summary:
type: file
description: Path to Guppy sequencing summary
pattern: "*.{txt}"
- primer_scheme_fasta:
type: file
description: |
Sequence of the reference genome used in the scheme in FASTA format
pattern: "*.{reference.fasta}"
- primer_scheme_bed:
type: file
description: |
bed files containing coordinates of each primer in the scheme,
relative to the reference genome
pattern: "*.{scheme.bed}"
- medaka_model:
type: file
description: |
Medaka model to use (if option --medaka is set)
pattern: "*.*"
- scheme:
type: value
description: Name of the primer scheme
- scheme_version:
type: value
description: Version of the primer scheme
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- results:
type:
description: Aggregated FastQ files
pattern: "*.fastq.gz"
- bam:
type: file
description: BAM file
pattern: "*.{sorted.bam}"
- bai:
type: file
description: BAM index file
pattern: "*.{sorted.bai}"
- bam_trimmed:
type: file
description: BAM file with the primers left on
pattern: "*.{trimmed.rg.sorted.bam}"
- bai_trimmed:
type: file
description: BAM index file of bam_trimmed
pattern: "*.{sorted.bai}"
- bam_primertrimmed:
type: file
description: BAM containing reads after primer-binding site trimming
pattern: "*.{trimmed.rg.sorted.bam}"
- bai_primertrimmed:
type: file
description: BAM index file of bam_primertrimmed
pattern: "*.{primertrimmed.rg.sorted.bam.bai}"
- fasta:
type: file
description: FAST file with consensus sequence
pattern: "*.{consensus.fasta}"
- vcf:
type: file
description: VCF file containing detected variants passing quality filter
pattern: "*.{pass.vcf.gz}"
- tbi:
type: file
description: VCF index
pattern: "*.{pass.vcf.gz.tbi}"
- json:
type: file
description: JSON file for MultiQC
pattern: "*.json"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
authors:
- "@joseespinosa"
- "@drpatelh"

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BANDAGE_IMAGE {
label 'process_low' label 'process_low'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? 'bioconda::bandage=0.8.1' : null) conda (params.enable_conda ? 'bioconda::bandage=0.8.1' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

View file

@ -0,0 +1,47 @@
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process BBMAP_BBDUK {
tag "$meta.id"
label 'process_medium'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bbmap=38.90" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/bbmap:38.90--he522d1c_1"
} else {
container "quay.io/biocontainers/bbmap:38.90--he522d1c_1"
}
input:
tuple val(meta), path(reads)
path contaminants
output:
tuple val(meta), path('*.fastq.gz'), emit: reads
tuple val(meta), path('*.log') , emit: log
path '*.version.txt' , emit: version
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
def raw = meta.single_end ? "in=${reads[0]}" : "in1=${reads[0]} in2=${reads[1]}"
def trimmed = meta.single_end ? "out=${prefix}.fastq.gz" : "out1=${prefix}_1.fastq.gz out2=${prefix}_2.fastq.gz"
def contaminants_fa = contaminants ? "ref=$contaminants" : ''
"""
maxmem=\$(echo \"$task.memory\"| sed 's/ GB/g/g')
bbduk.sh \\
-Xmx\$maxmem \\
$raw \\
$trimmed \\
threads=$task.cpus \\
$options.args \\
$contaminants_fa \\
&> ${prefix}.bbduk.log
echo \$(bbversion.sh) > ${software}.version.txt
"""
}

View file

@ -0,0 +1,52 @@
name: bbmap_bbduk
description: Adapter and quality trimming of sequencing reads
keywords:
- trimming
- adapter trimming
- quality trimming
tools:
- bbmap:
description: BBMap is a short read aligner, as well as various other bioinformatic tools.
homepage: https://jgi.doe.gov/data-and-tools/bbtools/bb-tools-user-guide/
documentation: https://jgi.doe.gov/data-and-tools/bbtools/bb-tools-user-guide/
tool_dev_url: None
doi: ""
licence: ['UC-LBL license (see package)']
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- reads:
type: file
description: |
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
- contaminants:
type: file
description: |
Reference files containing adapter and/or contaminant sequences for sequence kmer matching
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- reads:
type: file
description: The trimmed/modified fastq reads
pattern: "*fastq.gz"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
- log:
type: file
description: Bbduk log file
pattern: "*bbduk.log"
authors:
- "@MGordon09"

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BCFTOOLS_CONSENSUS {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? 'bioconda::bcftools=1.11' : null) conda (params.enable_conda ? 'bioconda::bcftools=1.11' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BCFTOOLS_FILTER {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) conda (params.enable_conda ? "bioconda::bcftools=1.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BCFTOOLS_ISEC {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) conda (params.enable_conda ? "bioconda::bcftools=1.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BCFTOOLS_MERGE {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) conda (params.enable_conda ? "bioconda::bcftools=1.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,50 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: '' options.args3 = args.args3 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: '' options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files options.publish_files = args.publish_files
options.suffix = args.suffix ?: '' options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BCFTOOLS_MPILEUP {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) conda (params.enable_conda ? "bioconda::bcftools=1.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BCFTOOLS_STATS {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) conda (params.enable_conda ? "bioconda::bcftools=1.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

View file

@ -0,0 +1,40 @@
// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process BEDTOOLS_BAMTOBED {
tag "$meta.id"
label 'process_medium'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0"
} else {
container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0"
}
input:
tuple val(meta), path(bam)
output:
tuple val(meta), path("*.bed"), emit: bed
path "*.version.txt" , emit: version
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
"""
bedtools \\
bamtobed \\
$options.args \\
-i $bam \\
| bedtools sort > ${prefix}.bed
bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt
"""
}

View file

@ -0,0 +1,37 @@
name: bedtools_bamtobed
description: Converts a bam file to a bed12 file.
keywords:
- bam
- bed
tools:
- bedtools:
description: |
A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types.
documentation: https://bedtools.readthedocs.io/en/latest/content/tools/complement.html
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- bam:
type: file
description: Input BAM file
pattern: "*.{bam}"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- bed:
type: file
description: Bed file containing genomic intervals.
pattern: "*.{bed}"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
authors:
- "@yuukiiwa"
- "@drpatelh"

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_COMPLEMENT {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_GENOMECOV {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_GETFASTA {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_INTERSECT {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_MASKFASTA {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_MERGE {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_SLOP {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BEDTOOLS_SORT {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BISMARK_ALIGN {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BISMARK_DEDUPLICATE {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BISMARK_GENOMEPREPARATION {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BISMARK_METHYLATIONEXTRACTOR {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BISMARK_REPORT {
label 'process_low' label 'process_low'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -8,7 +8,7 @@ process BISMARK_SUMMARY {
label 'process_low' label 'process_low'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BLAST_BLASTN {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? 'bioconda::blast=2.10.1' : null) conda (params.enable_conda ? 'bioconda::blast=2.10.1' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BLAST_MAKEBLASTDB {
label 'process_medium' label 'process_medium'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? 'bioconda::blast=2.10.1' : null) conda (params.enable_conda ? 'bioconda::blast=2.10.1' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BOWTIE_ALIGN {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? 'bioconda::bowtie=1.3.0 bioconda::samtools=1.11' : null) conda (params.enable_conda ? 'bioconda::bowtie=1.3.0 bioconda::samtools=1.11' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
@ -29,6 +29,7 @@ process BOWTIE_ALIGN {
tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq
script: script:
def split_cpus = Math.floor(task.cpus/2)
def software = getSoftwareName(task.process) def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
def unaligned = params.save_unaligned ? "--un ${prefix}.unmapped.fastq" : '' def unaligned = params.save_unaligned ? "--un ${prefix}.unmapped.fastq" : ''
@ -36,7 +37,7 @@ process BOWTIE_ALIGN {
""" """
INDEX=`find -L ./ -name "*.3.ebwt" | sed 's/.3.ebwt//'` INDEX=`find -L ./ -name "*.3.ebwt" | sed 's/.3.ebwt//'`
bowtie \\ bowtie \\
--threads $task.cpus \\ --threads ${split_cpus} \\
--sam \\ --sam \\
-x \$INDEX \\ -x \$INDEX \\
-q \\ -q \\
@ -44,7 +45,7 @@ process BOWTIE_ALIGN {
$options.args \\ $options.args \\
$endedness \\ $endedness \\
2> ${prefix}.out \\ 2> ${prefix}.out \\
| samtools view $options.args2 -@ $task.cpus -bS -o ${prefix}.bam - | samtools view $options.args2 -@ ${split_cpus} -bS -o ${prefix}.bam -
if [ -f ${prefix}.unmapped.fastq ]; then if [ -f ${prefix}.unmapped.fastq ]; then
gzip ${prefix}.unmapped.fastq gzip ${prefix}.unmapped.fastq

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BOWTIE_BUILD {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? 'bioconda::bowtie=1.3.0' : null) conda (params.enable_conda ? 'bioconda::bowtie=1.3.0' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BOWTIE2_ALIGN {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2 bioconda::samtools=1.11 conda-forge::pigz=2.3.4' : null) conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2 bioconda::samtools=1.11 conda-forge::pigz=2.3.4' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
@ -29,8 +29,9 @@ process BOWTIE2_ALIGN {
tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq
script: script:
def software = getSoftwareName(task.process) def split_cpus = Math.floor(task.cpus/2)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
if (meta.single_end) { if (meta.single_end) {
def unaligned = params.save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' def unaligned = params.save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : ''
""" """
@ -38,11 +39,11 @@ process BOWTIE2_ALIGN {
bowtie2 \\ bowtie2 \\
-x \$INDEX \\ -x \$INDEX \\
-U $reads \\ -U $reads \\
--threads $task.cpus \\ --threads ${split_cpus} \\
$unaligned \\ $unaligned \\
$options.args \\ $options.args \\
2> ${prefix}.bowtie2.log \\ 2> ${prefix}.bowtie2.log \\
| samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - | samtools view -@ ${split_cpus} $options.args2 -bhS -o ${prefix}.bam -
echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt
""" """
@ -54,11 +55,11 @@ process BOWTIE2_ALIGN {
-x \$INDEX \\ -x \$INDEX \\
-1 ${reads[0]} \\ -1 ${reads[0]} \\
-2 ${reads[1]} \\ -2 ${reads[1]} \\
--threads $task.cpus \\ --threads ${split_cpus} \\
$unaligned \\ $unaligned \\
$options.args \\ $options.args \\
2> ${prefix}.bowtie2.log \\ 2> ${prefix}.bowtie2.log \\
| samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - | samtools view -@ ${split_cpus} $options.args2 -bhS -o ${prefix}.bam -
if [ -f ${prefix}.unmapped.fastq.1.gz ]; then if [ -f ${prefix}.unmapped.fastq.1.gz ]; then
mv ${prefix}.unmapped.fastq.1.gz ${prefix}.unmapped_1.fastq.gz mv ${prefix}.unmapped.fastq.1.gz ${prefix}.unmapped_1.fastq.gz

View file

@ -1,49 +1,57 @@
//
// Utility functions used in nf-core DSL2 module files
//
/* //
* ----------------------------------------------------- // Extract name of software tool from process name using $task.process
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/*
* Extract name of software tool from process name using $task.process
*/
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BOWTIE2_BUILD {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2' : null) conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2' : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BWA_INDEX {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::bwa=0.7.17" : null) conda (params.enable_conda ? "bioconda::bwa=0.7.17" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BWA_MEM {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bwa=0.7.17 bioconda::samtools=1.12" : null) conda (params.enable_conda ? "bioconda::bwa=0.7.17 bioconda::samtools=1.12" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
@ -27,6 +27,7 @@ process BWA_MEM {
path "*.version.txt" , emit: version path "*.version.txt" , emit: version
script: script:
def split_cpus = Math.floor(task.cpus/2)
def software = getSoftwareName(task.process) def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
def read_group = meta.read_group ? "-R ${meta.read_group}" : "" def read_group = meta.read_group ? "-R ${meta.read_group}" : ""
@ -36,10 +37,10 @@ process BWA_MEM {
bwa mem \\ bwa mem \\
$options.args \\ $options.args \\
$read_group \\ $read_group \\
-t $task.cpus \\ -t ${split_cpus} \\
\$INDEX \\ \$INDEX \\
$reads \\ $reads \\
| samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam -
echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//' > ${software}.version.txt echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//' > ${software}.version.txt
""" """

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BWAMEM2_INDEX {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null) conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BWAMEM2_MEM {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
@ -27,6 +27,7 @@ process BWAMEM2_MEM {
path "*.version.txt" , emit: version path "*.version.txt" , emit: version
script: script:
def split_cpus = Math.floor(task.cpus/2)
def software = getSoftwareName(task.process) def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
def read_group = meta.read_group ? "-R ${meta.read_group}" : "" def read_group = meta.read_group ? "-R ${meta.read_group}" : ""
@ -36,10 +37,10 @@ process BWAMEM2_MEM {
bwa-mem2 mem \\ bwa-mem2 mem \\
$options.args \\ $options.args \\
$read_group \\ $read_group \\
-t $task.cpus \\ -t ${split_cpus} \\
\$INDEX \\ \$INDEX \\
$reads \\ $reads \\
| samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam -
echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt
""" """

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BWAMETH_ALIGN {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::bwameth=0.2.2" : null) conda (params.enable_conda ? "bioconda::bwameth=0.2.2" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
@ -27,6 +27,7 @@ process BWAMETH_ALIGN {
path "*.version.txt" , emit: version path "*.version.txt" , emit: version
script: script:
def split_cpus = Math.floor(task.cpus/2)
def software = getSoftwareName(task.process) def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
def read_group = meta.read_group ? "-R ${meta.read_group}" : "" def read_group = meta.read_group ? "-R ${meta.read_group}" : ""
@ -36,10 +37,10 @@ process BWAMETH_ALIGN {
bwameth.py \\ bwameth.py \\
$options.args \\ $options.args \\
$read_group \\ $read_group \\
-t $task.cpus \\ -t ${split_cpus} \\
--reference \$INDEX \\ --reference \$INDEX \\
$reads \\ $reads \\
| samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam -
echo \$(bwameth.py --version 2>&1) | cut -f2 -d" " > ${software}.version.txt echo \$(bwameth.py --version 2>&1) | cut -f2 -d" " > ${software}.version.txt
""" """

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process BWAMETH_INDEX {
label 'process_high' label 'process_high'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::bwameth=0.2.2" : null) conda (params.enable_conda ? "bioconda::bwameth=0.2.2" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -9,7 +9,7 @@ process CAT_FASTQ {
label 'process_low' label 'process_low'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "conda-forge::sed=4.7" : null) conda (params.enable_conda ? "conda-forge::sed=4.7" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {

View file

@ -1,48 +1,57 @@
/* //
* ----------------------------------------------------- // Utility functions used in nf-core DSL2 module files
* Utility functions used in nf-core DSL2 module files //
* -----------------------------------------------------
*/
/* //
* Extract name of software tool from process name using $task.process // Extract name of software tool from process name using $task.process
*/ //
def getSoftwareName(task_process) { def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
} }
/* //
* Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
*/ //
def initOptions(Map args) { def initOptions(Map args) {
def Map options = [:] def Map options = [:]
options.args = args.args ?: '' options.args = args.args ?: ''
options.args2 = args.args2 ?: '' options.args2 = args.args2 ?: ''
options.publish_by_id = args.publish_by_id ?: false options.args3 = args.args3 ?: ''
options.publish_dir = args.publish_dir ?: '' options.publish_by_meta = args.publish_by_meta ?: []
options.publish_files = args.publish_files options.publish_dir = args.publish_dir ?: ''
options.suffix = args.suffix ?: '' options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options return options
} }
/* //
* Tidy up and join elements of a list to return a path string // Tidy up and join elements of a list to return a path string
*/ //
def getPathFromList(path_list) { def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/') return paths.join('/')
} }
/* //
* Function to save/publish module results // Function to save/publish module results
*/ //
def saveFiles(Map args) { def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) { if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options) def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ] def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_id) { if (ioptions.publish_by_meta) {
path_list.add(args.publish_id) def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
} }
if (ioptions.publish_files instanceof Map) { if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) { for (ext in ioptions.publish_files) {

View file

@ -2,14 +2,14 @@
include { initOptions; saveFiles; getSoftwareName } from './functions' include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:] params.options = [:]
def options = initOptions(params.options) options = initOptions(params.options)
process CNVKIT { process CNVKIT {
tag "$meta.id" tag "$meta.id"
label 'process_low' label 'process_low'
publishDir "${params.outdir}", publishDir "${params.outdir}",
mode: params.publish_dir_mode, mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::cnvkit=0.9.8" : null) conda (params.enable_conda ? "bioconda::cnvkit=0.9.8" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
@ -20,8 +20,8 @@ process CNVKIT {
input: input:
tuple val(meta), path(tumourbam), path(normalbam) tuple val(meta), path(tumourbam), path(normalbam)
path fasta path fasta
path targetfile path targetfile
output: output:
tuple val(meta), path("*.bed"), emit: bed tuple val(meta), path("*.bed"), emit: bed
@ -32,15 +32,15 @@ process CNVKIT {
script: script:
def software = getSoftwareName(task.process) def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}"
""" """
cnvkit.py batch \\ cnvkit.py \\
batch \\
$tumourbam \\ $tumourbam \\
--normal $normalbam\\ --normal $normalbam\\
--fasta $fasta \\ --fasta $fasta \\
--targets $targetfile \\ --targets $targetfile \\
$options.args $options.args
cnvkit.py version | sed -e "s/cnvkit v//g" > ${software}.version.txt echo \$(cnvkit.py version) | sed -e "s/cnvkit v//g" > ${software}.version.txt
""" """
} }

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

View file

@ -0,0 +1,42 @@
// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process COOLER_DIGEST {
tag '$fasta'
label 'process_medium'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) }
conda (params.enable_conda ? "bioconda::cooler=0.8.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/cooler:0.8.11--pyh3252c3a_0"
} else {
container "quay.io/biocontainers/cooler:0.8.11--pyh3252c3a_0"
}
input:
path fasta
path chromsizes
val enzyme
output:
path "*.bed" , emit: bed
path "*.version.txt" , emit: version
script:
def software = getSoftwareName(task.process)
"""
cooler digest \\
$options.args \\
-o "${fasta.baseName}_${enzyme.replaceAll(/[^0-9a-zA-Z]+/, "_")}.bed" \\
$chromsizes \\
$fasta \\
$enzyme
echo \$(cooler --version 2>&1) | sed 's/cooler, version //' > ${software}.version.txt
"""
}

View file

@ -0,0 +1,39 @@
name: cooler_digest
description: Generate fragment-delimited genomic bins
keywords:
- digest
- enzyme
tools:
- cooler:
description: Sparse binary format for genomic interaction matrices
homepage: https://cooler.readthedocs.io/en/latest/index.html
documentation: https://cooler.readthedocs.io/en/latest/index.html
tool_dev_url: https://github.com/open2c/cooler
doi: "10.1093/bioinformatics/btz540"
licence: ['BSD-3-clause']
input:
- fasta:
type: file
description: Genome assembly FASTA file or folder containing FASTA files (uncompressed).
pattern: "*.{fasta,fa}"
- chromsizes:
type: file
description: Path to a chromsizes file.
- enzyme:
type: String
description: Name of restriction enzyme. e.g. CviQI.
documentation: http://biopython.org/DIST/docs/cookbook/Restriction.html
output:
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
- bed:
type: file
description: A genome segmentation of restriction fragments as a BED file.
pattern: "*.{bed}"
authors:
- "@jianhong"

View file

@ -0,0 +1,68 @@
//
// Utility functions used in nf-core DSL2 module files
//
//
// Extract name of software tool from process name using $task.process
//
def getSoftwareName(task_process) {
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
}
//
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
//
def initOptions(Map args) {
def Map options = [:]
options.args = args.args ?: ''
options.args2 = args.args2 ?: ''
options.args3 = args.args3 ?: ''
options.publish_by_meta = args.publish_by_meta ?: []
options.publish_dir = args.publish_dir ?: ''
options.publish_files = args.publish_files
options.suffix = args.suffix ?: ''
return options
}
//
// Tidy up and join elements of a list to return a path string
//
def getPathFromList(path_list) {
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
return paths.join('/')
}
//
// Function to save/publish module results
//
def saveFiles(Map args) {
if (!args.filename.endsWith('.version.txt')) {
def ioptions = initOptions(args.options)
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
if (ioptions.publish_by_meta) {
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
for (key in key_list) {
if (args.meta && key instanceof String) {
def path = key
if (args.meta.containsKey(key)) {
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
}
path = path instanceof String ? path : ''
path_list.add(path)
}
}
}
if (ioptions.publish_files instanceof Map) {
for (ext in ioptions.publish_files) {
if (args.filename.endsWith(ext.key)) {
def ext_list = path_list.collect()
ext_list.add(ext.value)
return "${getPathFromList(ext_list)}/$args.filename"
}
}
} else if (ioptions.publish_files == null) {
return "${getPathFromList(path_list)}/$args.filename"
}
}
}

Some files were not shown because too many files have changed in this diff Show more