diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a16dcd60..40b91d2c 100755 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/demultiplex, the standard workflow 1. Check that there isn't already an issue about your idea in the [nf-core/demultiplex issues](https://github.com/nf-core/demultiplex/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/demultiplex repository](https://github.com/nf-core/demultiplex) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -40,7 +40,7 @@ There are typically two types of tests that run: ### Lint tests `nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. @@ -75,7 +75,7 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool). 6. Add sanity checks and validation for all relevant parameters. 7. Perform local tests to validate that the new code works as expected. 8. If applicable, add a new test command in `.github/workflow/ci.yml`. @@ -86,11 +86,11 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. @@ -103,7 +103,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Nextflow version bumping -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` ### Images and figures diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d7bbf615..b47515e4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,7 +17,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/demu - [ ] If you've fixed a bug or added code that should be tested, add tests! - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/demultiplex/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/demultiplex _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index f5d63182..8e4df67f 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,18 +1,35 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] + pull_request: + branches: + - master workflow_dispatch: + pull_request_review: + types: [submitted] + jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/demultiplex' + # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered + if: github.repository == 'nf-core/demultiplex' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: + - uses: octokit/request-action@v2.x + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + if: github.event_name != 'workflow_dispatch' + run: | + JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' + CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') + test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ffa9360..b9b76ddc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,51 +7,84 @@ on: - master release: types: [published] + workflow_dispatch: env: - NXF_ANSI_LOG: false - NFT_VER: "0.9.0" - NFT_WORKDIR: "~" NFT_DIFF: "pdiff" NFT_DIFF_ARGS: "--line-numbers --expand-tabs=2" + NFT_VER: "0.9.2" + NFT_WORKDIR: "~" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity concurrency: group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" cancel-in-progress: true jobs: - define_nxf_versions: - name: Choose nextflow versions to test against depending on target branch - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.nxf_versions.outputs.matrix }} - steps: - - id: nxf_versions - run: | - if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.base_ref }}" == "dev" && "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then - echo matrix='["latest-stable"]' | tee -a $GITHUB_OUTPUT - else - echo matrix='["latest-stable", "23.04.0"]' | tee -a $GITHUB_OUTPUT - fi - test: - name: Run pipeline with test data - needs: define_nxf_versions + name: "${{ matrix.NXF_VER }} | ${{ matrix.profile }} | ${{ matrix.shard }}/6" + # Only run on push if this is the nf-core dev branch (merged PRs) + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/demultiplex') }}" runs-on: ubuntu-latest strategy: fail-fast: false matrix: + NXF_VER: + - "24.04.2" + - "latest-stable" + profile: + - "docker" + - "singularity" + isMaster: + - ${{ github.base_ref == 'master' }} + # Exclude conda and singularity on dev + exclude: + - isMaster: false + profile: "conda" + - isMaster: false + profile: "singularity" shard: [1, 2, 3, 4, 5, 6] - NXF_VER: ${{ fromJson(needs.define_nxf_versions.outputs.matrix) }} - profile: ["docker"] - env: - SHARDS: "6" steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 with: fetch-depth: 0 + - name: Set up Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: "${{ matrix.NXF_VER }}" + + - name: Set up Apptainer + if: matrix.profile == 'singularity' + uses: eWaterCycle/setup-apptainer@main + + - name: Set up Singularity + if: matrix.profile == 'singularity' + run: | + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Set up Miniconda + if: matrix.profile == 'conda' + uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 + with: + miniconda-version: "latest" + auto-update-conda: true + conda-solver: libmamba + channels: conda-forge,bioconda + + - name: Set up Conda + if: matrix.profile == 'conda' + run: | + echo $(realpath $CONDA)/condabin >> $GITHUB_PATH + echo $(realpath python) >> $GITHUB_PATH + + - name: Clean up Disk space + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + - uses: actions/setup-python@v4 with: python-version: "3.11" @@ -62,19 +95,15 @@ jobs: python -m pip install --upgrade pip pip install pdiff - - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - uses: nf-core/setup-nf-test@v1 with: version: ${{ env.NFT_VER }} - - name: Run Tests (Shard ${{ matrix.shard }}/${{ env.SHARDS }}) + - name: Run Tests (Shard ${{ matrix.shard }}/6) run: | nf-test test \ --ci \ - --shard ${{ matrix.shard }}/${{ env.SHARDS }} \ + --shard ${{ matrix.shard }}/6 \ --changed-since HEAD^ \ --profile "+${{ matrix.profile }}" \ --filter pipeline \ diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index f24cc9ff..d3c9c2fb 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,4 +1,4 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually @@ -8,7 +8,7 @@ on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: @@ -39,9 +39,11 @@ jobs: with: python-version: "3.12" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 - name: Install dependencies run: | @@ -54,26 +56,64 @@ jobs: echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + - name: Make a cache directory for the container images + run: | + mkdir -p ./singularity_container_images + - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ + nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ --revision ${{ env.REPO_BRANCH }} \ --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" -l "ghcr.io" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} + - name: Count the downloaded number of container images + id: count_initial + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Initial container image count: $image_count" + echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + - name: Run the downloaded pipeline (stub) id: stub_run_pipeline continue-on-error: true env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + - name: Run the downloaded pipeline (stub run not supported) + id: run_pipeline + if: ${{ job.steps.stub_run_pipeline.status == failure() }} + env: + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images + NXF_SINGULARITY_HOME_MOUNT: true + run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + + - name: Count the downloaded number of container images + id: count_afterwards + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Post-pipeline run container image count: $image_count" + echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + + - name: Compare container image counts + run: | + if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ env.IMAGE_COUNT_INITIAL }} + final_count=${{ env.IMAGE_COUNT_AFTER }} + difference=$((final_count - initial_count)) + echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" + tree ./singularity_container_images + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 1fcafe88..a502573c 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,6 +1,6 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: push: @@ -41,17 +41,32 @@ jobs: python-version: "3.12" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.1.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 40acc23f..42e519bf 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 03ecfcf7..c6ba35df 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,7 +12,7 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT - uses: rzr/fediverse-action@master with: diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml new file mode 100644 index 00000000..e8aafe44 --- /dev/null +++ b/.github/workflows/template_version_comment.yml @@ -0,0 +1,46 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Read template version from .nf-core.yml + uses: nichmor/minimal-read-yaml@v0.0.2 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV} + + - name: Post nf-core template version comment + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + if: | + contains(env.OUTPUT, 'nf-core') + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + > [!WARNING] + > Newer version of the nf-core template is available. + > + > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + > Please update your pipeline to the latest version. + > + > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + # diff --git a/.gitignore b/.gitignore index 44777a0f..23b0c7de 100755 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,5 @@ results/ testing/ testing* *.pyc -.nf-test/ -.nf-test.log +null/ +.nf-test* diff --git a/.gitpod.yml b/.gitpod.yml index 105a1821..46118637 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,17 +4,14 @@ tasks: command: | pre-commit install --install-hooks nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS vscode: extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code + #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - # - nextflow.nextflow # Nextflow syntax highlighting + - nextflow.nextflow # Nextflow syntax highlighting - oderwat.indent-rainbow # Highlight indentation level - streetsidesoftware.code-spell-checker # Spelling checker for source code - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index 932a0097..561994da 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,7 +1,21 @@ -repository_type: pipeline -nf_core_version: "2.14.1" +bump_version: null lint: - actions_ci: False + actions_ci: false files_unchanged: - .github/ISSUE_TEMPLATE/bug_report.yml - .github/workflows/linting.yml +nf_core_version: 3.0.2 +org_path: null +repository_type: pipeline +template: + author: Chelsea Sawyer, Edmund Miller, Matthias De Smet + description: Demultiplexing pipeline for Illumina sequencing data + force: false + is_nfcore: true + name: demultiplex + org: nf-core + outdir: . + skip_features: + - igenomes + version: 1.5.2 +update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1dc..9e9f0e1c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - prettier@3.2.5 - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" + rev: "3.0.3" hooks: - id: editorconfig-checker alias: ec diff --git a/CHANGELOG.md b/CHANGELOG.md index 537a33f5..47057a52 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 1.5.3 - 2024-11-06 + +### `Added` + +### `Changed` + +- [#275](https://github.com/nf-core/demultiplex/pull/275) Update samshee module from nf-core. +- [#276](https://github.com/nf-core/demultiplex/pull/276) Template update for nf-core/tools v3.0.2 +- [#284](https://github.com/nf-core/demultiplex/pull/284) nf-core modules and subworkflows update. nf-test version update. +- [#285](https://github.com/nf-core/demultiplex/pull/285) Bump to version 1.5.3. + +### `Fixed` + +- [#277](https://github.com/nf-core/demultiplex/pull/277) Improved samplesheet generation to always produce all types of samplesheets, added the ability to explicitly set strandedness, and fixed output paths to correctly reflect the `publishDir` subdirectory structure. +- [#281](https://github.com/nf-core/modules/pull/6932) Update cellranges/mkfastq module to fix missing reports and stats outputs. +- [#282](https://github.com/nf-core/demultiplex/pull/282) Fixed downstream samplesheet paths and `publishDir` config. + ## 1.5.2 - 2024-10-07 ### `Changed` diff --git a/README.md b/README.md index 483a98b7..44ead372 100755 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/demultiplex/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/demultiplex/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/demultiplex/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7153103-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7153103) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -84,8 +84,7 @@ nextflow run nf-core/demultiplex \ ``` > [!WARNING] -> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; -> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/demultiplex/usage) and the [parameter documentation](https://nf-co.re/demultiplex/parameters). diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index e3d548a2..bf9df924 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,8 +1,7 @@ report_comment: > - - This report has been generated by the nf-core/demultiplex + This report has been generated by the nf-core/demultiplex analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-demultiplex-methods-description": diff --git a/assets/schema_input.json b/assets/schema_input.json index d8c139a6..9c8ae453 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/demultiplex/master/assets/schema_input.json", "title": "nf-core/demultiplex pipeline - params.input schema", "description": "Schema for the file provided with params.input", @@ -25,6 +25,7 @@ "type": "integer", "description": "Lane number", "minimum": 1, + "default": null, "maximum": 8, "meta": ["lane"] }, diff --git a/bin/validate_samplesheet.py b/bin/validate_samplesheet.py deleted file mode 100755 index 987e3441..00000000 --- a/bin/validate_samplesheet.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python3 - -from samshee.samplesheetv2 import read_samplesheetv2 -from samshee.validation import illuminasamplesheetv2schema, illuminasamplesheetv2logic, validate -import json -import sys - -def validate_samplesheet(filename, custom_schema_file=None): - # Load the custom schema if provided - if custom_schema_file: - with open(custom_schema_file, 'r') as f: - custom_schema = json.load(f) - custom_validator = lambda doc: validate(doc, custom_schema) - else: - custom_validator = None - - # Prepare the list of validators - validators = [illuminasamplesheetv2schema, illuminasamplesheetv2logic] - if custom_validator: - validators.append(custom_validator) - # Read and validate the sample sheet - try: - sheet = read_samplesheetv2(filename, validation=validators) - print(f"Validation successful for {filename}") - except Exception as e: - print(f"Validation failed: {e}") - -if __name__ == "__main__": - if len(sys.argv) < 2 or len(sys.argv) > 3: - print("Usage: validate_samplesheet.py [custom_schema.json]") - sys.exit(1) - samplesheet_file = sys.argv[1] - schema_file = sys.argv[2] if len(sys.argv) == 3 else None - - validate_samplesheet(samplesheet_file, schema_file) diff --git a/conf/base.config b/conf/base.config index c60f851e..6f1752f4 100755 --- a/conf/base.config +++ b/conf/base.config @@ -10,9 +10,9 @@ process { - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 @@ -20,30 +20,30 @@ process { // Process-specific resource requirements withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 00000000..b4034d82 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index 6d635d07..7dc14397 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -97,7 +97,7 @@ process { path: { "${params.outdir}/${meta.id}/" }, mode: params.publish_dir_mode, pattern: "output/Samples/**/*.{json,fastq.gz}", - saveAs: { filename -> filename.minus("output/") } + saveAs: { filename -> filename.split("/")[-1] } ], [ path: { "${params.outdir}/${meta.id}/" }, @@ -163,7 +163,7 @@ process { [ path: { meta.lane ? "${params.outdir}/${meta.id}/L00${meta.lane}" : "${params.outdir}/${meta.id}" }, mode: params.publish_dir_mode, - pattern: "output/*.{tsv, fastq.gz}", + pattern: "output/*.{tsv,fastq.gz}", saveAs: { filename -> filename.minus("output/") } ], ] @@ -174,7 +174,7 @@ process { [ path: { "${params.outdir}/${meta.id}/" }, mode: params.publish_dir_mode, - pattern: "output/*.{txt, fq.gz}", + pattern: "output/*.{txt,fq.gz}", saveAs: { filename -> filename.minus("output/") } ], ] @@ -232,10 +232,26 @@ process { mode: params.publish_dir_mode ] } -// Samshee should fail the entire pipeline immediately as it validated the illumina samplesheet to be valid before the pipeline runs. As such, it should not be running more than once & if it fails should stop the pipeline + withName: SAMSHEE { + ext.args = [ + params.json_schema_validator ? "--schema '${params.json_schema_validator}'" : "", + params.name_schema_validator ? "--schema '${params.name_schema_validator}'" : "", + params.v1_schema ? "--output-format sectioned" : "", + ].join(" ").trim() errorStrategy = "terminate" + publishDir = [ + path: { "${params.outdir}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } + withName: 'FASTQ_TO_SAMPLESHEET*' { + publishDir = [ + path: { "${params.outdir}/samplesheet/" }, + mode: params.publish_dir_mode, + ] + } } diff --git a/conf/test.config b/conf/test.config index 2a1366b5..680c6cfd 100755 --- a/conf/test.config +++ b/conf/test.config @@ -10,20 +10,22 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' demultiplexer = 'bclconvert' skip_tools = 'samshee' - } process { diff --git a/conf/test_bases2fastq.config b/conf/test_bases2fastq.config index f87261ea..7b3764d8 100644 --- a/conf/test_bases2fastq.config +++ b/conf/test_bases2fastq.config @@ -10,15 +10,19 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test bases2fastq profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/b2fq-samplesheet.csv' demultiplexer = 'bases2fastq' diff --git a/conf/test_bcl2fastq.config b/conf/test_bcl2fastq.config old mode 100755 new mode 100644 index eed995fc..d94b53e8 --- a/conf/test_bcl2fastq.config +++ b/conf/test_bcl2fastq.config @@ -10,20 +10,23 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test bcl2fastq profile' config_profile_description = 'Minimal test dataset to check pipeline function with bcl2fastq' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' demultiplexer = 'bcl2fastq' skip_tools = "checkqc,samshee" - } process { diff --git a/conf/test_bclconvert.config b/conf/test_bclconvert.config index d9b91ed1..2510ba6d 100755 --- a/conf/test_bclconvert.config +++ b/conf/test_bclconvert.config @@ -10,18 +10,21 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test bclconvert profile' config_profile_description = 'Minimal test dataset to check bclconvert pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = 'https://huggingface.co/datasets/nf-core/demultiplex/resolve/main/testdata/Miniseq_truseq_smrna/input_samplesheet.csv' demultiplexer = 'bclconvert' skip_tools = 'samshee' - } diff --git a/conf/test_checkqc.config b/conf/test_checkqc.config index 7dc7fbb5..b6b971e0 100644 --- a/conf/test_checkqc.config +++ b/conf/test_checkqc.config @@ -10,6 +10,15 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test checkqc profile' config_profile_description = 'Minimal test dataset to check pipeline function with bcl2fastq and checkqc' @@ -20,7 +29,6 @@ params { demultiplexer = 'bcl2fastq' skip_tools = "fastp,falco,md5sum,multiqc,samshee" checkqc_config = "${projectDir}/assets/checkqc_config.yaml" - } process { diff --git a/conf/test_fqtk.config b/conf/test_fqtk.config index f097b8b2..ceac2c83 100644 --- a/conf/test_fqtk.config +++ b/conf/test_fqtk.config @@ -10,15 +10,19 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test fqtk profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '1.h' - // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/fqtk-samplesheet.csv' demultiplexer = 'fqtk' diff --git a/conf/test_full.config b/conf/test_full.config index 40209e9a..d591fdc4 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -17,5 +17,5 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/samplesheet_full.csv' demultiplexer = 'bcl2fastq' - skip_tools = 'samshee' + v1_schema = true } diff --git a/conf/test_kraken.config b/conf/test_kraken.config index 6dfe1b2d..f4c0b609 100644 --- a/conf/test_kraken.config +++ b/conf/test_kraken.config @@ -10,6 +10,15 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test full kraken profile' config_profile_description = 'Full test dataset to check pipeline function with kraken' @@ -19,10 +28,5 @@ params { demultiplexer = 'bcl2fastq' skip_tools = "checkqc,samshee" kraken_db = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/db/kraken2.tar.gz' - - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '1.h' } diff --git a/conf/test_mkfastq.config b/conf/test_mkfastq.config index 7940f14d..070ebab5 100644 --- a/conf/test_mkfastq.config +++ b/conf/test_mkfastq.config @@ -10,15 +10,19 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test mkfastq profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '1.h' - // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/cellranger_tiny/mkfastq_tiny_samplesheet.csv' demultiplexer = 'mkfastq' diff --git a/conf/test_pe.config b/conf/test_pe.config index a0bf2b3a..cfcf0422 100644 --- a/conf/test_pe.config +++ b/conf/test_pe.config @@ -10,6 +10,15 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Paired end test profile' config_profile_description = 'Paired end test dataset to check pipeline function' @@ -17,12 +26,5 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/pe_samplesheet.csv' demultiplexer = 'bcl2fastq' - - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '1.h' - skip_tools = "checkqc,samshee" - } diff --git a/conf/test_sgdemux.config b/conf/test_sgdemux.config index 00ed472e..db34a65b 100644 --- a/conf/test_sgdemux.config +++ b/conf/test_sgdemux.config @@ -10,15 +10,19 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test sgdemux profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '1.h' - // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/sgdemux-samplesheet.csv' demultiplexer = 'sgdemux' diff --git a/conf/test_two_lanes.config b/conf/test_two_lanes.config index 6dff2efc..d6f04923 100644 --- a/conf/test_two_lanes.config +++ b/conf/test_two_lanes.config @@ -10,6 +10,15 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test two lanes profile' config_profile_description = 'Minimal test dataset to check pipeline function with multiple lanes' diff --git a/conf/test_uncompressed.config b/conf/test_uncompressed.config index 3d0c2ab7..a33378c2 100644 --- a/conf/test_uncompressed.config +++ b/conf/test_uncompressed.config @@ -10,20 +10,23 @@ ---------------------------------------------------------------------------------------- */ +// Limit resources so that this can run on GitHub Actions +process { + resourceLimits = [ + cpus: 4, + memory: '13.GB', + time: '4.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = 'https://github.com/nf-core/test-datasets/raw/demultiplex/samplesheet/1.3.0/uncompressed-samplesheet.csv' demultiplexer = 'bclconvert' skip_tools = 'samshee' - } process { diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47..00000000 Binary files a/docs/images/mqc_fastqc_adapter.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png deleted file mode 100755 index cb39ebb8..00000000 Binary files a/docs/images/mqc_fastqc_counts.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf5..00000000 Binary files a/docs/images/mqc_fastqc_quality.png and /dev/null differ diff --git a/docs/usage.md b/docs/usage.md index c3efd5b8..1fd50c51 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -97,9 +97,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -107,9 +106,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/demultiplex -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -130,7 +129,16 @@ The trimming process in our demultiplexing pipeline has been updated to ensure c ## samshee (Samplesheet validator) -samshee ensures the integrity of Illumina v2 Sample Sheets by allowing users to apply custom validation rules. The module can be used together with the parameter `--validator_schema`, which accepts a JSON schema validator file. Users can specify this file to enforce additional validation rules beyond the default ones provided by the tool. To use this feature, simply provide the path to the JSON schema validator file via the `--validator_schema` parameter in the pipeline configuration. This enables tailored validation of Sample Sheets to meet specific requirements or standards relevant to your sequencing workflow. For more information about the tool or how to write the schema JSON file, please refer to [Samshee on GitHub](https://github.com/lit-regensburg/samshee). +samshee ensures the integrity of Illumina v2 Sample Sheets by allowing users to apply custom validation rules. The module can be used together with the parameter `--json_schema_validator`, which accepts a JSON schema validation string; the `--name_schema_validator`, which accepts a schema name string; and the `--file_schema_validator` which accepts a JSON schema validation file. Users can specify additional validation rules beyond the default ones provided by the tool using all or any of these parameters, this enables tailored validation of Sample Sheets to meet specific requirements or standards relevant to your sequencing workflow. For more information refer to [Samshee on GitHub](https://github.com/lit-regensburg/samshee). + +> [!NOTE] +> Samshee assumes all illumina samplesheets are v2. If working with samples that have an illumina samplesheet v1 set the parameter `--v1_schema` to true. +> When indicating `--json_schema_validator` or `--name_schema_validator`, please note that it expects a JSON reference value in string format. For example: +> +> ```bash +> --json_schema_validator '{"required": ["Data"]}' +> --name_schema_validator '{"$ref": "urn:samshee:illuminav2/v1"}' +> ``` ### Updating the pipeline @@ -150,15 +158,13 @@ This version number will be logged in reports when you run the pipeline, so that To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). ### `-profile` @@ -166,9 +172,8 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!NOTE] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). @@ -235,14 +240,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf index 2355a0fb..d7dcc41e 100755 --- a/main.nf +++ b/main.nf @@ -9,27 +9,15 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { DEMULTIPLEX } from './workflows/demultiplex' -include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_demultiplex_pipeline' +include { DEMULTIPLEX } from './workflows/demultiplex' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_demultiplex_pipeline' - -include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_demultiplex_pipeline' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - - +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_demultiplex_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -56,7 +44,6 @@ workflow NFCORE_DEMULTIPLEX { emit: multiqc_report = DEMULTIPLEX.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -67,13 +54,11 @@ workflow NFCORE_DEMULTIPLEX { workflow { main: - // // SUBWORKFLOW: Run initialisation tasks // PIPELINE_INITIALISATION ( params.version, - params.help, params.validate_params, params.monochrome_logs, args, diff --git a/modules.json b/modules.json index 91bf80bf..326a8259 100644 --- a/modules.json +++ b/modules.json @@ -22,7 +22,7 @@ }, "cellranger/mkfastq": { "branch": "master", - "git_sha": "a90a8863a3408e15d5a339b06413e57cf9ca9860", + "git_sha": "f7d2d43086b48d3cedd9e2df52bf098ee5a50542", "installed_by": ["modules"] }, "checkqc": { @@ -62,7 +62,12 @@ }, "multiqc": { "branch": "master", - "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "installed_by": ["modules"] + }, + "samshee": { + "branch": "master", + "git_sha": "467c202a876d26af544fa8c4b22a050a535462a7", "installed_by": ["modules"] }, "seqtk/sample": { @@ -96,17 +101,17 @@ }, "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", + "git_sha": "56372688d8979092cafbe0c5c3895b491166ca1c", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", + "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", "installed_by": ["subworkflows"] } } diff --git a/modules/local/fastq_to_samplesheet/main.nf b/modules/local/fastq_to_samplesheet/main.nf index f79cabcf..ef54bc65 100644 --- a/modules/local/fastq_to_samplesheet/main.nf +++ b/modules/local/fastq_to_samplesheet/main.nf @@ -5,41 +5,75 @@ process FASTQ_TO_SAMPLESHEET { memory 100.MB input: - val meta + val meta // Expecting a list of items val pipeline val strandedness output: - tuple val(meta), path("*samplesheet.csv"), emit: samplesheet + tuple val(meta_clone), path("*samplesheet.csv"), emit: samplesheet exec: + // Initialize the samplesheet content + def samplesheetHeader = [] + def samplesheetRows = [] - // Add relevant fields to the map - def pipeline_map = [ - sample : meta.samplename, - fastq_1 : meta.fastq_1 - ] + // Sort meta by item.id + def sortedMeta = meta.sort { it.id } - // Add fastq_2 if it's a paired-end sample - if (!meta.single_end) { - pipeline_map.fastq_2 = meta.fastq_2 - } + // Collect all unique columns from all items and create rows + def allColumns = new LinkedHashSet() + + sortedMeta.each { item -> + // Check for required keys in each item + if (!item.samplename) { + error "Item with id ${item.id} is missing the 'samplename' key." + } + if (!item.fastq_1) { + error "Item with id ${item.id} is missing the 'fastq_1' key." + } + + def pipeline_map = [:] // Initialize as an empty map + + // Prepare sample information + pipeline_map.sample = item.samplename + pipeline_map.fastq_1 = item.publish_dir + '/' + file(item.fastq_1).fileName + + // Add fastq_2 if it's a paired-end sample + if (!item.single_end && item.fastq_2) { + pipeline_map.fastq_2 = item.publish_dir + '/' + file(item.fastq_2).fileName ?: '' + } - // Add pipeline-specific entries - if (pipeline == 'rnaseq') { - pipeline_map << [ strandedness: strandedness ] - } else if (pipeline == 'atacseq') { - pipeline_map << [ replicate: 1 ] - } else if (pipeline == 'taxprofiler') { - pipeline_map << [ fasta: '' ] + // Add pipeline-specific entries + if (pipeline == 'rnaseq') { + pipeline_map.strandedness = strandedness ?: '' + } else if (pipeline == 'atacseq') { + pipeline_map.replicate = 1 + } else if (pipeline == 'taxprofiler') { + pipeline_map.fasta = '' + } + + // Add all keys to the set of unique columns + allColumns.addAll(pipeline_map.keySet()) + + // Prepare a row for the samplesheet, filling in missing values with empty strings + def rowValues = allColumns.collect { key -> + pipeline_map.containsKey(key) ? '"' + pipeline_map[key] + '"' : '""' + } + samplesheetRows << rowValues.join(",") } - // Create the samplesheet content - def samplesheet = pipeline_map.keySet().collect { '"' + it + '"' }.join(",") + '\n' - samplesheet += pipeline_map.values().collect { '"' + it + '"' }.join(",") + // Create a sorted list of headers + samplesheetHeader = allColumns.collect { '"' + it + '"' } + + // Create the complete samplesheet content + def samplesheet = samplesheetHeader.join(",") + '\n' + samplesheetRows.join("\n") // Write samplesheet to file - def samplesheet_file = task.workDir.resolve("${meta.id}.samplesheet.csv") + def samplesheet_file = task.workDir.resolve("${pipeline}_samplesheet.csv") samplesheet_file.text = samplesheet + // Clone the first item in meta for output + meta_clone = meta.first().clone() + meta_clone.remove('publish_dir') // Removing the publish_dir just in case, although output channel is not used by other process + } diff --git a/modules/local/samshee/README.md b/modules/local/samshee/README.md deleted file mode 100644 index 3e8745bc..00000000 --- a/modules/local/samshee/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Guide to Writing a `validation.json` Schema File - -## Introduction - -A JSON schema defines the structure and constraints of JSON data. This guide will help you create a `validation.json` schema file for use with Samshee to perform additional checks on Illumina® Sample Sheet v2 files. - -## JSON Schema Basics - -JSON Schema is a powerful tool for validating the structure of JSON data. It allows you to specify required fields, data types, and constraints. Here are some common components: - -- **`$schema`**: Declares the JSON Schema version being used. -- **`type`**: Specifies the data type (e.g., `object`, `array`, `string`, `number`). -- **`properties`**: Defines the properties of an object and their constraints. -- **`required`**: Lists properties that must be present in the object. -- **`items`**: Specifies the schema for items in an array. - -## Example Schema - -Here’s an example of a `validation.json` schema file for an Illumina® Sample Sheet: - -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "Header": { - "type": "object", - "properties": { - "InvestigatorName": { - "type": "string" - }, - "ExperimentName": { - "type": "string" - } - }, - "required": ["InvestigatorName", "ExperimentName"] - }, - "Reads": { - "type": "object", - "properties": { - "Read1": { - "type": "integer", - "minimum": 1 - }, - "Read2": { - "type": "integer", - "minimum": 1 - } - }, - "required": ["Read1", "Read2"] - }, - "BCLConvert": { - "type": "object", - "properties": { - "Index": { - "type": "string", - "pattern": "^[ACGT]{8}$" // Example pattern for 8-base indices - } - } - } - }, - "required": ["Header", "Reads"] -} -``` - -### Explanation of the Example - -- **`$schema`**: Specifies the JSON Schema version (draft-07). -- **`type`**: Defines the main type as `object`. -- **`properties`**: Lists the properties of the object: -- **`Header`**: An object with required `InvestigatorName` and `ExperimentName` fields. -- **`Reads`**: An object with required `Read1` and `Read2` fields that must be integers greater than or equal to 1. -- **`BCLConvert`**: An object with an optional `Index` field that must be a string matching a pattern for 8-base indices. -- **`required`**: Lists required properties at the top level. - -### Tips for Writing JSON Schemas - -1. **Start Simple**: Begin with basic constraints and gradually add complexity. -2. **Use Online Validators**: Validate your schema using online tools to ensure it adheres to the JSON Schema specification. -3. **Refer to Schema Documentation**: Consult the [JSON Schema documentation](https://json-schema.org/) for detailed guidance. - -### Conclusion - -By defining a JSON schema, you can enforce specific rules and ensure that your Illumina® Sample Sheet v2 files meet your required structure and constraints. Use this guide to create and validate your `validation.json` schema files effectively. diff --git a/modules/local/samshee/environment.yml b/modules/local/samshee/environment.yml deleted file mode 100644 index f92e0eee..00000000 --- a/modules/local/samshee/environment.yml +++ /dev/null @@ -1,8 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - python>=3.9 - - pip - - pip: # FIXME https://github.com/nf-core/modules/issues/5814 - - samshee==0.1.12 diff --git a/modules/local/samshee/meta.yml b/modules/local/samshee/meta.yml deleted file mode 100644 index 145ddd24..00000000 --- a/modules/local/samshee/meta.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: samshee -description: Module to validate illumina® Sample Sheet v2 files. -keywords: - - samplesheet - - illumina - - bclconvert - - bcl2fastq -tools: - - samshee: - description: A schema-agnostic parser and writer for illumina® sample sheets v2 and similar documents. - homepage: https://github.com/lit-regensburg/samshee - documentation: https://github.com/lit-regensburg/samshee/blob/main/README.md - tool_dev_url: https://github.com/lit-regensburg/samshee - licence: [MIT license] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', lane:1 ] - - samplesheet: - type: file - description: "illumina v2 samplesheet" - pattern: "*.{csv}" -output: - - versions: - type: file - description: File containing software version - pattern: "versions.yml" -authors: - - "@nschcolnicov" -maintainers: - - "@nschcolnicov" diff --git a/modules/local/samshee/tests/main.nf.test b/modules/local/samshee/tests/main.nf.test deleted file mode 100644 index d76c98f4..00000000 --- a/modules/local/samshee/tests/main.nf.test +++ /dev/null @@ -1,51 +0,0 @@ -// nf-core modules test cellranger/mkfastq -nextflow_process { - - name "Test Process samshee" - script "../main.nf" - config "./nextflow.config" - process "SAMSHEE" - - tag "modules" - - test("test samplesheet") { - - when { - process { - """ - input[0] = [ [ id: 'test', lane:1 ], file("https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NextSeq2000/SampleSheet.csv", checkIfExists: true) ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success } - ) - } - - } - - test("stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ [ id: 'test', lane:1 ], file("https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NextSeq2000/SampleSheet.csv", checkIfExists: true), [] ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - ) - } - - } - -} diff --git a/modules/local/samshee/tests/nextflow.config b/modules/local/samshee/tests/nextflow.config deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/nf-core/cellranger/mkfastq/main.nf b/modules/nf-core/cellranger/mkfastq/main.nf index 09480345..89a1a824 100644 --- a/modules/nf-core/cellranger/mkfastq/main.nf +++ b/modules/nf-core/cellranger/mkfastq/main.nf @@ -10,8 +10,8 @@ process CELLRANGER_MKFASTQ { output: tuple val(meta), path("*_outs/outs/fastq_path/**/*.fastq.gz") , emit: fastq tuple val(meta), path("*_outs/outs/fastq_path/Undetermined*.fastq.gz") , optional:true, emit: undetermined_fastq - tuple val(meta), path("*_outs/outs/fastq_path/Reports") , emit: reports - tuple val(meta), path("*_outs/outs/fastq_path/Stats") , emit: stats + tuple val(meta), path("*_outs/outs/fastq_path/Reports") , optional:true, emit: reports + tuple val(meta), path("*_outs/outs/fastq_path/Stats") , optional:true, emit: stats tuple val(meta), path("*_outs/outs/interop_path/*.bin") , emit: interop path "versions.yml" , emit: versions diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 9724d2f3..cc0643e1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -52,7 +52,7 @@ process MULTIQC { stub: """ mkdir multiqc_data - touch multiqc_plots + mkdir multiqc_plots touch multiqc_report.html cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/samshee/environment.yml b/modules/nf-core/samshee/environment.yml new file mode 100644 index 00000000..35a8e2e7 --- /dev/null +++ b/modules/nf-core/samshee/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::samshee=0.2.1 + - python=3.13.0 diff --git a/modules/local/samshee/main.nf b/modules/nf-core/samshee/main.nf similarity index 50% rename from modules/local/samshee/main.nf rename to modules/nf-core/samshee/main.nf index acbf928c..6d7ba2e6 100644 --- a/modules/local/samshee/main.nf +++ b/modules/nf-core/samshee/main.nf @@ -4,47 +4,40 @@ process SAMSHEE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/python_pip_samshee:84a770c9853c725d' : - 'community.wave.seqera.io/library/python_pip_samshee:e8a5c47ec32efa42' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/65/659cdc3068a6fbce17ccb199bb3afc8600c65940743c1a0214b3bf0eed4df1a3/data' : + 'community.wave.seqera.io/library/pip_samshee:9b655e3c18eee356' }" input: tuple val(meta), path(samplesheet) - path(validator_schema) //optional + path(file_schema_validator) output: - // Module is meant to stop the pipeline if validation fails - path "versions.yml", emit: versions + tuple val(meta), path("*_formatted.csv"), emit: samplesheet + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def args3 = task.ext.args3 ?: '' - def arg_validator_schema = validator_schema ? "${validator_schema}" : "" + def arg_file_schema_validator = file_schema_validator ? "--schema '{\"\$ref\": \"file:${file_schema_validator}\"}'" : "" + def args = task.ext.args ?: "" """ # Run validation command and capture output - output=\$(validate_samplesheet.py "${samplesheet}" "${arg_validator_schema}" 2>&1) - status=\$? - # Check if validation failed - if echo "\$output" | grep -q "Validation failed:"; then - echo "\$output" # Print output for debugging - exit 1 # Fail the process if validation failed - fi + python -m samshee $samplesheet \ + $args \ + $arg_file_schema_validator \ + > ${samplesheet.baseName}_formatted.csv cat <<-END_VERSIONS > versions.yml "${task.process}": samshee: \$( python -m pip show --version samshee | grep "Version" | sed -e "s/Version: //g" ) python: \$( python --version | sed -e "s/Python //g" ) END_VERSIONS - - # If no validation errors, process exits with status 0 - exit \$status """ stub: """ + touch ${samplesheet.baseName}_formatted.csv cat <<-END_VERSIONS > versions.yml "${task.process}": samshee: \$( python -m pip show --version samshee | grep "Version" | sed -e "s/Version: //g" ) diff --git a/modules/nf-core/samshee/meta.yml b/modules/nf-core/samshee/meta.yml new file mode 100644 index 00000000..4ff2ab9f --- /dev/null +++ b/modules/nf-core/samshee/meta.yml @@ -0,0 +1,47 @@ +name: samshee +description: Module to validate illumina® Sample Sheet v2 files. +keywords: + - samplesheet + - illumina + - bclconvert + - bcl2fastq +tools: + - samshee: + description: A schema-agnostic parser and writer for illumina® sample sheets v2 and similar documents. + homepage: https://github.com/lit-regensburg/samshee + documentation: https://github.com/lit-regensburg/samshee/blob/main/README.md + tool_dev_url: https://github.com/lit-regensburg/samshee + licence: [MIT license] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', lane:1 ] + - samplesheet: + type: file + description: "illumina v2 samplesheet" + pattern: "*.{csv}" + - - file_schema_validator: + type: string + description: "Optional JSON file used additional samplesheet validation settings" +output: + - samplesheet: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', lane:1 ] + - "*_formatted.csv": + type: file + description: "illumina v2 samplesheet" + - versions: + - versions.yml: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@nschcolnicov" +maintainers: + - "@nschcolnicov" diff --git a/modules/nf-core/samshee/tests/main.nf.test b/modules/nf-core/samshee/tests/main.nf.test new file mode 100644 index 00000000..5bec682f --- /dev/null +++ b/modules/nf-core/samshee/tests/main.nf.test @@ -0,0 +1,85 @@ +nextflow_process { + + name "Test Process samshee" + script "../main.nf" + process "SAMSHEE" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "samshee" + + test("test samplesheet_v1") { + + when { + params { + v1_schema = true + json_schema_validator = '{"required": ["Data"]}' + name_schema_validator = null + } + process { + """ + input[0] = [ [ id: 'test', lane:1 ], file("https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/miseq_35147139/miseq_35147139_samplesheet.csv", checkIfExists: true) ] + input[1] = file("schema.json") + new File("schema.json").text = '''{ + "\$schema": "https://json-schema.org/draft/2020-12/schema", + "required": ["Settings"] + }''' + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + test("test samplesheet_v2") { + + when { + params { + v1_schema = null + json_schema_validator = null + name_schema_validator = '{"$ref": "urn:samshee:illuminav2/v1"}' + } + process { + """ + input[0] = [ [ id: 'test', lane:1 ], file("https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NextSeq2000/SampleSheet.csv", checkIfExists: true) ] + input[1] = [] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + + test("stub") { + + options "-stub" + + when { + params { + v1_schema = null + json_schema_validator = null + name_schema_validator = null + } + process { + """ + input[0] = [ [ id: 'test', lane:1 ], file("https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NextSeq2000/SampleSheet.csv", checkIfExists: true) ] + input[1] = [] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + +} diff --git a/modules/nf-core/samshee/tests/main.nf.test.snap b/modules/nf-core/samshee/tests/main.nf.test.snap new file mode 100644 index 00000000..b3729eba --- /dev/null +++ b/modules/nf-core/samshee/tests/main.nf.test.snap @@ -0,0 +1,107 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "lane": 1 + }, + "SampleSheet_formatted.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,77af0194d386117bf52aaabdf350a976" + ], + "samplesheet": [ + [ + { + "id": "test", + "lane": 1 + }, + "SampleSheet_formatted.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,77af0194d386117bf52aaabdf350a976" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-16T15:25:40.722007136" + }, + "test samplesheet_v1": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "lane": 1 + }, + "miseq_35147139_samplesheet_formatted.csv:md5,2a6ee5b13242aeefdeeaa98671f1ee26" + ] + ], + "1": [ + "versions.yml:md5,77af0194d386117bf52aaabdf350a976" + ], + "samplesheet": [ + [ + { + "id": "test", + "lane": 1 + }, + "miseq_35147139_samplesheet_formatted.csv:md5,2a6ee5b13242aeefdeeaa98671f1ee26" + ] + ], + "versions": [ + "versions.yml:md5,77af0194d386117bf52aaabdf350a976" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-16T15:25:02.353128191" + }, + "test samplesheet_v2": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "lane": 1 + }, + "SampleSheet_formatted.csv:md5,9a1cac9e958256a17c7f43a8e15cb697" + ] + ], + "1": [ + "versions.yml:md5,77af0194d386117bf52aaabdf350a976" + ], + "samplesheet": [ + [ + { + "id": "test", + "lane": 1 + }, + "SampleSheet_formatted.csv:md5,9a1cac9e958256a17c7f43a8e15cb697" + ] + ], + "versions": [ + "versions.yml:md5,77af0194d386117bf52aaabdf350a976" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-16T15:25:24.540910786" + } +} \ No newline at end of file diff --git a/modules/nf-core/samshee/tests/nextflow.config b/modules/nf-core/samshee/tests/nextflow.config new file mode 100644 index 00000000..ecf1ff66 --- /dev/null +++ b/modules/nf-core/samshee/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + withName: SAMSHEE { + ext.args = [ + params.json_schema_validator ? "--schema '${params.json_schema_validator}'" : "", + params.name_schema_validator ? "--schema '${params.name_schema_validator}'" : "", + params.v1_schema ? "--output-format sectioned" : "", + ].join(" ").trim() + } +} diff --git a/nextflow.config b/nextflow.config index 7d764432..fa7fb516 100755 --- a/nextflow.config +++ b/nextflow.config @@ -13,6 +13,12 @@ params { input = null demultiplexer = "bclconvert" // enum string [bclconvert, bcl2fastq, bases2fastq, fqtk, sgdemux, mkfastq] + // Options: samshee, Illumina samplesheet validator + v1_schema = false // [true, false] + json_schema_validator = null // string + name_schema_validator = null // string + file_schema_validator = null // file .json + // Options: trimming trim_fastq = true // [true, false] remove_adapter = true // [true, false] @@ -27,14 +33,11 @@ params { kraken_db = null // file .tar.gz // Downstream Nextflow pipeline - downstream_pipeline = "default" // enum string [rnaseq, atacseq, taxprofiler, default] + strandedness = "auto" // enum string [auto, reverse, forward, unstranded] // Options: CheckQC checkqc_config = [] // file .yaml - // Options: Illumina samplesheet validator - validator_schema = null // file .json - // MultiQC options multiqc_config = null multiqc_title = null @@ -51,49 +54,27 @@ params { monochrome_logs = false hook_url = null help = false + help_full = false + show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' // Config options config_profile_name = null config_profile_description = null + custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/demultiplex custom profiles from different institutions. -// Warning: Uncomment only if a pipeline-specific instititutional config already exists on nf-core/configs! -try { - includeConfig "${params.custom_config_base}/pipeline/demultiplex.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/demultiplex profiles: ${params.custom_config_base}/pipeline/demultiplex.config") -} // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' @@ -111,7 +92,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false - conda.channels = ['conda-forge', 'bioconda', 'defaults'] + conda.channels = ['conda-forge', 'bioconda'] apptainer.enabled = false } mamba { @@ -212,18 +193,20 @@ profiles { } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// Load nf-core custom profiles from different Institutions +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +// Load nf-core/demultiplex custom profiles from different institutions. +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/demultiplex.config" : "/dev/null" + +// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. @@ -236,8 +219,15 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// Set bash options +process.shell = """\ +bash + +set -e # Exit if a tool returns a non-zero status/exit code +set -u # Treat unset variables and parameters as an error +set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute +set -C # No clobber - prevent output redirection from overwriting files. +""" // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -274,40 +264,43 @@ manifest { homePage = 'https://github.com/nf-core/demultiplex' description = """Demultiplexing pipeline for Illumina sequencing data""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' - version = '1.5.2' + nextflowVersion = '!>=24.04.2' + version = '1.5.3' doi = '10.5281/zenodo.7153103' } -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } +// Nextflow plugins +plugins { + id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} + +validation { + defaultIgnoreParams = ["genomes"] + help { + enabled = true + command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " + fullParameter = "help_full" + showHiddenParameter = "show_hidden" + beforeText = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m ${manifest.name} ${manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + afterText = """${manifest.doi ? "\n* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/${manifest.name}/blob/master/CITATIONS.md +""" + } + summary { + beforeText = validation.help.beforeText + afterText = validation.help.afterText } } diff --git a/nextflow_schema.json b/nextflow_schema.json index 7ab8d009..8558c86e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/demultiplex/master/nextflow_schema.json", "title": "nf-core/demultiplex pipeline parameters", "description": "Demultiplexing pipeline for Illumina sequencing data", "type": "object", - "definitions": { + "$defs": { "workflow_options": { "title": "Workflow options", "type": "object", @@ -31,16 +31,22 @@ "format": "path", "description": "Path to Kraken2 DB to use for screening" }, - "validator_schema": { + "json_schema_validator": { "type": "string", - "format": "file-path", - "description": "Path to Illumina v2 samplesheet validator .json file" + "description": "String in JSON format to be passed to samshee module for samplesheet validation" + }, + "name_schema_validator": { + "type": "string", + "description": "Schema name to be passed to samshee module for samplesheet validation" }, - "downstream_pipeline": { + "file_schema_validator": { "type": "string", - "description": "Name of downstream nf-core pipeline (one of: rnaseq, atacseq, taxprofiler or default). Used to produce the input samplesheet for that pipeline.", - "default": "default", - "enum": ["rnaseq", "atacseq", "taxprofiler", "default"] + "format": "file-path", + "description": "Local JSON file to be passed to samshee module for samplesheet validation" + }, + "v1_schema": { + "type": "boolean", + "description": "Whether or not illumina samplesheet is v1 " } } }, @@ -98,6 +104,21 @@ } } }, + "downstream_csv_options": { + "title": "Downstream CSV options", + "type": "object", + "description": "Options to customize downstream csv creation", + "default": "", + "properties": { + "strandedness": { + "type": "string", + "enum": ["unstranded", "auto", "reverse", "forward"], + "default": "auto", + "description": "Specifies the strandedness of RNA-Seq data for downstream sample sheet generation. This parameter does not affect the demultiplexing process but is used to generate the appropriate field in the nf-core/rnaseq samplesheet", + "fa_icon": "fas fa-arrows-alt-v" + } + } + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -160,41 +181,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -202,12 +188,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -288,27 +268,6 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, "pipelines_testdata_base_path": { "type": "string", "fa_icon": "far fa-check-circle", @@ -321,25 +280,25 @@ }, "allOf": [ { - "$ref": "#/definitions/workflow_options" + "$ref": "#/$defs/workflow_options" }, { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/demultiplex_options" + "$ref": "#/$defs/demultiplex_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/downstream_csv_options" }, { - "$ref": "#/definitions/checkqc_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/checkqc_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/nf-test.config b/nf-test.config index a3837c71..d441a08a 100644 --- a/nf-test.config +++ b/nf-test.config @@ -13,5 +13,9 @@ config { // run all test with the defined docker profile from the main nextflow.config profile "docker,test" + + plugins { + load "nft-utils@0.0.3" + } } diff --git a/subworkflows/local/.gitkeep b/subworkflows/local/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/subworkflows/local/utils_nfcore_demultiplex_pipeline/main.nf b/subworkflows/local/utils_nfcore_demultiplex_pipeline/main.nf index e92ab987..35008413 100644 --- a/subworkflows/local/utils_nfcore_demultiplex_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_demultiplex_pipeline/main.nf @@ -8,29 +8,25 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit - help // boolean: Display help text validate_params // boolean: Boolean whether to validate parameters against the schema at runtime monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args @@ -54,16 +50,10 @@ workflow PIPELINE_INITIALISATION { // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( - help, - workflow_command, - pre_help_text, - post_help_text, + UTILS_NFSCHEMA_PLUGIN ( + workflow, validate_params, - "nextflow_schema.json" + null ) // @@ -72,12 +62,12 @@ workflow PIPELINE_INITIALISATION { UTILS_NFCORE_PIPELINE ( nextflow_cli_args ) + // // Custom validation for pipeline parameters // validateInputParameters() - // // Create channel from input file provided through params.input // @@ -89,12 +79,12 @@ workflow PIPELINE_INITIALISATION { // https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/sgdemux-samplesheet.csv if( params.demultiplexer == 'fqtk' ) { - ch_samplesheet = Channel.fromSamplesheet("input") + ch_samplesheet = Channel.fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, samplesheet, flowcell, per_flowcell_manifest -> if ( !file(per_flowcell_manifest).exists() ){ error "[Samplesheet Error] The per flowcell manifest file does not exist: ${per_flowcell_manifest}" } - [meta, samplesheet, flowcell, per_flowcell_manifest] + [ meta, samplesheet, flowcell, per_flowcell_manifest ] } ch_flowcell_manifest = ch_samplesheet.map{ meta, samplesheet, flowcell, per_flowcell_manifest -> per_flowcell_manifest } @@ -106,10 +96,8 @@ workflow PIPELINE_INITIALISATION { } } else { - ch_samplesheet = Channel.fromSamplesheet("input") - .map { - validateInputSamplesheet(it) - } + ch_samplesheet = Channel + .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) } emit: @@ -118,9 +106,9 @@ workflow PIPELINE_INITIALISATION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { @@ -135,7 +123,6 @@ workflow PIPELINE_COMPLETION { multiqc_report // string: Path to MultiQC report main: - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") // @@ -143,11 +130,18 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_report.toList() + ) } completionSummary(monochrome_logs) - if (hook_url) { imNotification(summary_params, hook_url) } @@ -159,9 +153,9 @@ workflow PIPELINE_COMPLETION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters @@ -170,13 +164,6 @@ def validateInputParameters() { genomeExistsError() } -// -// Validate channels from input samplesheet -// -def validateInputSamplesheet(input) { - return input -} - // // Get attribute from genome config file e.g. fasta // @@ -202,7 +189,6 @@ def genomeExistsError() { error(error_string) } } - // // Generate methods description for MultiQC // @@ -244,8 +230,10 @@ def methodsDescriptionText(mqc_methods_yaml) { // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) } else meta["doi_text"] = "" meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " @@ -266,3 +254,4 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } + diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 28e32b20..0fcbf7b3 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -22,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -45,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -72,11 +71,11 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = groovy.json.JsonOutput.toJson(params) - temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() @@ -91,9 +90,14 @@ def checkCondaChannels() { try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present @@ -102,23 +106,19 @@ def checkCondaChannels() { def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - def channel_priority_violation = false - - required_channels_in_order.eachWithIndex { channel, index -> - if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) - } - } + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce8..02dbf094 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index cbd8495b..5cb7bafe 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -22,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -33,12 +32,9 @@ workflow UTILS_NFCORE_PIPELINE { def checkConfigProvided() { def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -49,12 +45,14 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } @@ -64,19 +62,13 @@ def checkProfileProvided(nextflow_cli_args) { def workflowCitation() { def temp_doi_ref = "" def manifest_doi = workflow.manifest.doi.tokenize(",") - // Using a loop to handle multiple DOIs + // Handling multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list manifest_doi.each { doi_ref -> temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - temp_doi_ref + "\n" + - "* The nf-core framework\n" + - " https://doi.org/10.1038/s41587-020-0439-x\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" } // @@ -102,7 +94,7 @@ def getWorkflowVersion() { // def processVersionsFromYAML(yaml_file) { def yaml = new org.yaml.snakeyaml.Yaml() - def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -112,8 +104,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -121,11 +113,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions - .unique() - .map { version -> processVersionsFromYAML(version) } - .unique() - .mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) } // @@ -133,25 +121,31 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - summary_params.keySet().each { group -> - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

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

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } @@ -199,54 +193,54 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } @@ -261,14 +255,15 @@ def attachMultiqcReport(multiqc_report) { mqc_report = multiqc_report.getVal() if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") } mqc_report = mqc_report[0] } } - } catch (all) { + } + catch (Exception all) { if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") } } return mqc_report @@ -280,26 +275,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -337,7 +341,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Render the sendmail template def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() @@ -346,30 +350,32 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { +new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { + ['sendmail', '-t'].execute() << sendmail_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") + } + catch (Exception all) { // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -380,12 +386,14 @@ def completionSummary(monochrome_logs=true) { def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } @@ -394,21 +402,30 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) { + misc_fields['repository'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['commitid'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['revision'] = workflow.revision + } + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] msg_fields['version'] = getWorkflowVersion() @@ -433,13 +450,13 @@ def imNotification(summary_params, hook_url) { def json_message = json_template.toString() // POST - def post = new URL(hook_url).openConnection(); + def post = new URL(hook_url).openConnection() post.setRequestMethod("POST") post.setDoOutput(true) post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + post.getOutputStream().write(json_message.getBytes("UTF-8")) + def postRC = post.getResponseCode() + if (!postRC.equals(200)) { + log.warn(post.getErrorStream().getText()) } } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 00000000..4994303e --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,46 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // when this input is empty it will automatically use the configured schema or + // "${projectDir}/nextflow_schema.json" as default. This input should not be empty + // for meta pipelines + + main: + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + if(parameters_schema) { + log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) + } else { + log.info paramsSummaryLog(input_workflow) + } + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + if(parameters_schema) { + validateParameters(parameters_schema:parameters_schema) + } else { + validateParameters() + } + } + + emit: + dummy_emit = true +} + diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 00000000..f7d9f028 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 00000000..8fb30164 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,117 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 00000000..0907ac58 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + id "nf-schema@2.1.0" +} + +validation { + parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + monochromeLogs = true +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json similarity index 95% rename from subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json rename to subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json index 7626c1c9..331e0d2f 100644 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", "title": ". pipeline parameters", "description": "", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -87,10 +87,10 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65d..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b04..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33f..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cfff..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 00000000..934a94ce --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,35 @@ +**/*.fastp.html +**/*_report.html +**/Reports/html/**/lane.html +**/Reports/html/**/laneBarcode.html +**/Stats/ConversionStats.xml +**/Stats/DemuxSummaryF1L1.txt +**/Stats/Stats.json +cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.fastq.gz +fastq/*.samplesheet.csv +multiqc/multiqc_data/bcl2fastq_undetermined.txt +multiqc/multiqc_data/fastqc*status-check-heatmap.txt +multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt +multiqc/multiqc_data/multiqc.log +multiqc/multiqc_data/multiqc_bcl2fastq_bylane.txt +multiqc/multiqc_data/multiqc_data.json +multiqc/multiqc_data/multiqc_fastp.txt +multiqc/multiqc_data/multiqc_fastqc.txt +multiqc/multiqc_data/multiqc_fastqc_*.txt +multiqc/multiqc_data/multiqc_general_stats.txt +multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_data/multiqc_sources.txt +multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} +multiqc/multiqc_report.html +pipeline_info/*.{html,json,txt,yml} +samplesheet/*.csv +sim-data/*-Bases2Fastq-Sim_QC.html +sim-data/*.fastp.fastq.gz +sim-data/*.fastp.fastq.gz.md5 +sim-data/*.fastp.fastq.gz_fastqc_data.txt +sim-data/*.fastp.fastq.gz_fastqc_report.html +sim-data/*.fastp.fastq.gz_summary.txt +sim-data/{Undetermined,s}*L001*.fastq.gz +sim-data/RunStats.json +sim-data/DefaultSample_stats.json +sim-data/most_frequent_unmatched.tsv diff --git a/tests/bases2fastq.nf.test b/tests/bases2fastq.nf.test new file mode 100644 index 00000000..e917f639 --- /dev/null +++ b/tests/bases2fastq.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - BASES2FASTQ" + script "../main.nf" + profile "test_bases2fastq" + tag "bases2fastq" + tag "pipeline" + + test("Bases2Fastq") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/bases2fastq.nf.test.snap b/tests/bases2fastq.nf.test.snap new file mode 100644 index 00000000..0d02d50a --- /dev/null +++ b/tests/bases2fastq.nf.test.snap @@ -0,0 +1,244 @@ +{ + "Bases2Fastq": { + "content": [ + 10, + { + "BASES2FASTQ": { + "bases2fastq": "1.8.0.1260801529, use subject to license available at elementbiosciences.com" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "UNTAR_FLOWCELL": { + "untar": 1.34 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/fastp-insert-size-plot.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/fastp-insert-size-plot.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/fastp-insert-size-plot.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/fastp-insert-size-plot.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv", + "sim-data", + "sim-data.csv", + "sim-data/20230404-Bases2Fastq-Sim_QC.html", + "sim-data/DefaultSample.fastp.html", + "sim-data/DefaultSample.fastp.json", + "sim-data/DefaultSample_1.fastp.fastq.gz", + "sim-data/DefaultSample_1.fastp.fastq.gz.md5", + "sim-data/DefaultSample_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/DefaultSample_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/DefaultSample_1.fastp.fastq.gz_summary.txt", + "sim-data/DefaultSample_2.fastp.fastq.gz", + "sim-data/DefaultSample_2.fastp.fastq.gz.md5", + "sim-data/DefaultSample_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/DefaultSample_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/DefaultSample_2.fastp.fastq.gz_summary.txt", + "sim-data/DefaultSample_R1.fastq.gz", + "sim-data/DefaultSample_R2.fastq.gz", + "sim-data/DefaultSample_stats.json", + "sim-data/Metrics.csv", + "sim-data/RunManifest.json", + "sim-data/RunStats.json", + "sim-data/UnassignedSequences.csv" + ], + [ + "fastp-insert-size-plot.txt:md5,ac9a9c57ed6cbd69033968f727e755de", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,fc7408bc90e9fd3768e041c470b297eb", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,f1b14d0b742540f46a447508b27c2a6d", + "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,df0d79b9296d4ee8996f2a28ccff4b65", + "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,8f63cb5ddb7b4ebe8325271093018714", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,48fe699c2e7dfa81d9d97f53c613ef20", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,48fe699c2e7dfa81d9d97f53c613ef20", + "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,48fe699c2e7dfa81d9d97f53c613ef20", + "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,48fe699c2e7dfa81d9d97f53c613ef20", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,e2194a8841653929cad0847f64daa339", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,559b29beffa82c35c71a82c3ff459a40", + "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,62a344d18de885a880e8a9fe48c7816f", + "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,5ef421e1df317a359c8b27ff65f2b758", + "fastp_filtered_reads_plot.txt:md5,5a5a98b82c02875b4d9da92e7577e802", + "fastqc_per_base_n_content_plot.txt:md5,7a1a9b3df3ce3bcca265dd13f2e23dc0", + "fastqc_per_base_sequence_quality_plot.txt:md5,9f62301e59b368cdd6738cbd871a964e", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,ebee4de078cbb125ba741a21d3552900", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,58b7050c7f02baa7fc308c691e62cc4c", + "fastqc_per_sequence_quality_scores_plot.txt:md5,dd7520f2fd44bfb2fa67f8ff9f7237a5", + "fastqc_sequence_counts_plot.txt:md5,e8772d59c78943686597222939492e1e", + "fastqc_sequence_duplication_levels_plot.txt:md5,4b372fcce4dbb8b0dbe685c6380f4a97", + "fastqc_sequence_length_distribution_plot.txt:md5,5b002b51364b518093ad98ebe0a0ca39", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2", + "sim-data.csv:md5,1d1dab697bd88c411fff89c102024295", + "DefaultSample.fastp.json:md5,9c10bbfbc4beb9523ca3a114f95709db", + "DefaultSample_R1.fastq.gz:md5,6c73b924e4eb53b716614aa6fd8b791a", + "DefaultSample_R2.fastq.gz:md5,54e2c0894844e42605b7cd567b1c7dbe", + "Metrics.csv:md5,ad7af77573845924062e2554cc641b16", + "RunManifest.json:md5,cdb8051690645d0f070191286323f1c8", + "UnassignedSequences.csv:md5,11c1693830ce941b8cfb8d2431a59097" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:03:45.396019249" + }, + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:25:55.693738747" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:25:54.286158931" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:25:57.12531458" + } +} \ No newline at end of file diff --git a/tests/bcl2fastq.nf.test b/tests/bcl2fastq.nf.test new file mode 100644 index 00000000..cedbdedd --- /dev/null +++ b/tests/bcl2fastq.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - BCL2FASTQ" + script "../main.nf" + profile "test_bcl2fastq" + tag "bcl2fastq" + tag "pipeline" + + test("Bcl2Fastq") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/bcl2fastq.nf.test.snap b/tests/bcl2fastq.nf.test.snap new file mode 100644 index 00000000..f4dc5379 --- /dev/null +++ b/tests/bcl2fastq.nf.test.snap @@ -0,0 +1,274 @@ +{ + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:27:18.557192574" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:27:13.631683141" + }, + "Bcl2Fastq": { + "content": [ + 8, + { + "BCL2FASTQ": { + "bcl2fastq": "2.20.0.422" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/all/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/all/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/unknown", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/all/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/all/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/unknown", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/unknown/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/unknown/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/all/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/all/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/unknown", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/Report.css", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/index.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/tree.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.json", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats", + "220422_M11111_0222_000000000-K9H97/L001/Stats/AdapterTrimming.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats/ConversionStats.xml", + "220422_M11111_0222_000000000-K9H97/L001/Stats/DemultiplexingStats.xml", + "220422_M11111_0222_000000000-K9H97/L001/Stats/DemuxSummaryF1L1.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats/FastqSummaryF1L1.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats/Stats.json", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bcl2fastq-lane-stats-table.txt", + "multiqc/multiqc_data/bcl2fastq_lane_counts.txt", + "multiqc/multiqc_data/bcl2fastq_sample_counts.txt", + "multiqc/multiqc_data/bcl2fastq_undetermined.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bcl2fastq_bylane.txt", + "multiqc/multiqc_data/multiqc_bcl2fastq_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_sample_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_sample_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_undetermined-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_undetermined-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bcl2fastq-lane-stats-table.png", + "multiqc/multiqc_plots/png/bcl2fastq_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bcl2fastq_sample_counts-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_sample_counts-pct.png", + "multiqc/multiqc_plots/png/bcl2fastq_undetermined-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_undetermined-pct.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bcl2fastq-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_sample_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_sample_counts-pct.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_undetermined-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_undetermined-pct.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Report.css:md5,eb7d3eb68fc1539f411404987246b59b", + "index.html:md5,5747c407854ae2c358d0ec201ce622d8", + "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34", + "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", + "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", + "Sample1_S1_L001.fastp.json:md5,d9d2d702f3c64412a04cd0768863b1ab", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_fastqc_data.txt:md5,0adf4e2617f55fabba0663583c1f65b7", + "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", + "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946", + "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad", + "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1", + "bcl2fastq-lane-stats-table.txt:md5,d0e821a9c0ccf7da808c5dd05e99ddc2", + "bcl2fastq_lane_counts.txt:md5,9404ab530f43e442093337dd10c351c5", + "bcl2fastq_sample_counts.txt:md5,93cb0cd1aee1b464f0e640e1c3d0c142", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,8105d4ce1d752e1f8a26e4291e8d9c6c", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,0ac68e41c4de8ca35a1cd6ee7c6cb3f3", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,1701b40c23dca068210f5410788e3be1", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,35de9aebdc467b1bbc9fd1f40d3aece4", + "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", + "fastqc_per_base_n_content_plot.txt:md5,d7db99124db8f53d82c51c779ce77463", + "fastqc_per_base_sequence_quality_plot.txt:md5,31c51bbd7d4dbb32107efa95c8a58ee5", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,842eaa1c62a8e6676b4b07226bda998b", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b231390d458d0bfdf4fa1360a776e03c", + "fastqc_per_sequence_quality_scores_plot.txt:md5,edbe64e0545cb866af73a649349d2a42", + "fastqc_sequence_counts_plot.txt:md5,662c69090978601ca7d39504b1ac736b", + "fastqc_sequence_duplication_levels_plot.txt:md5,cc02a5151984c0a9fdf8316bfb05088b", + "multiqc_bcl2fastq_bysample.txt:md5,baaa56d8315c18633f6ce6568d6f0657", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:05:10.862707812" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:27:23.563785123" + } +} \ No newline at end of file diff --git a/tests/bclconvert.nf.test b/tests/bclconvert.nf.test new file mode 100644 index 00000000..0400e16e --- /dev/null +++ b/tests/bclconvert.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - BCLCONVERT" + script "../main.nf" + profile "test" + tag "bclconvert" + tag "pipeline" + + test("BCL-CONVERT") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/bclconvert.nf.test.snap b/tests/bclconvert.nf.test.snap new file mode 100644 index 00000000..b4159002 --- /dev/null +++ b/tests/bclconvert.nf.test.snap @@ -0,0 +1,270 @@ +{ + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:28:48.222041833" + }, + "BCL-CONVERT": { + "content": [ + 8, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Cycle_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Tile_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Index_Hopping_Counts.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Tile_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/RunInfo.xml", + "220422_M11111_0222_000000000-K9H97/L001/Reports/SampleSheet.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Top_Unknown_Barcodes.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/fastq_list.csv", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.json", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bclconvert-lane-stats-table.txt", + "multiqc/multiqc_data/bclconvert-sample-stats-table.txt", + "multiqc/multiqc_data/bclconvert_lane_counts.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Index_mismatches.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bclconvert_bylane.txt", + "multiqc/multiqc_data/multiqc_bclconvert_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bclconvert-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert-sample-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bclconvert-lane-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert-sample-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-pct.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bclconvert-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert-sample-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-pct.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", + "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", + "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", + "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", + "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", + "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", + "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", + "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", + "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9", + "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", + "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", + "Sample1_S1_L001.fastp.json:md5,d9d2d702f3c64412a04cd0768863b1ab", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_fastqc_data.txt:md5,0adf4e2617f55fabba0663583c1f65b7", + "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "bclconvert-lane-stats-table.txt:md5,8bff7b728d3ad67405d4742d0aa2088e", + "bclconvert-sample-stats-table.txt:md5,a6edf6b192981bd296c1eba968e4333c", + "bclconvert_lane_counts.txt:md5,a327047d0d6c7de32eef9535bb159110", + "bclconvert_sample_counts_Counts_per_lane.txt:md5,a7e57ab911ba2cf74ec7bd93b921036d", + "bclconvert_sample_counts_Index_mismatches.txt:md5,06c29164e83815c79a2b1541a4a6294e", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,8105d4ce1d752e1f8a26e4291e8d9c6c", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,0ac68e41c4de8ca35a1cd6ee7c6cb3f3", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,1701b40c23dca068210f5410788e3be1", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,35de9aebdc467b1bbc9fd1f40d3aece4", + "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", + "fastqc_per_base_n_content_plot.txt:md5,d7db99124db8f53d82c51c779ce77463", + "fastqc_per_base_sequence_quality_plot.txt:md5,31c51bbd7d4dbb32107efa95c8a58ee5", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,842eaa1c62a8e6676b4b07226bda998b", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b231390d458d0bfdf4fa1360a776e03c", + "fastqc_per_sequence_quality_scores_plot.txt:md5,edbe64e0545cb866af73a649349d2a42", + "fastqc_sequence_counts_plot.txt:md5,662c69090978601ca7d39504b1ac736b", + "fastqc_sequence_duplication_levels_plot.txt:md5,cc02a5151984c0a9fdf8316bfb05088b", + "multiqc_bclconvert_bylane.txt:md5,2f779a97f3a5429454f62059a19856e6", + "multiqc_bclconvert_bysample.txt:md5,6a1ababe7d8242995ba5c5f78699cd63", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:06:40.844267965" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:28:43.215827644" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:28:53.253703589" + } +} \ No newline at end of file diff --git a/tests/bclconvert_mini.nf.test b/tests/bclconvert_mini.nf.test new file mode 100644 index 00000000..076d6a54 --- /dev/null +++ b/tests/bclconvert_mini.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - BCLCONVERT-mini" + script "../main.nf" + profile "test_bclconvert" + tag "bclconvert" + tag "pipeline" + + test("BCL-CONVERT-mini") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/bclconvert_mini.nf.test.snap b/tests/bclconvert_mini.nf.test.snap new file mode 100644 index 00000000..8c6c27f5 --- /dev/null +++ b/tests/bclconvert_mini.nf.test.snap @@ -0,0 +1,378 @@ +{ + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:33:18.621857802" + }, + "BCL-CONVERT-mini": { + "content": [ + 23, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "miniseq_truseq_smrna", + "miniseq_truseq_smrna/HBRR1_S1_L001.fastp.fastq.gz", + "miniseq_truseq_smrna/HBRR1_S1_L001.fastp.fastq.gz.md5", + "miniseq_truseq_smrna/HBRR1_S1_L001.fastp.html", + "miniseq_truseq_smrna/HBRR1_S1_L001.fastp.json", + "miniseq_truseq_smrna/HBRR1_S1_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna/HBRR1_S1_L001_fastqc_data.txt", + "miniseq_truseq_smrna/HBRR1_S1_L001_report.html", + "miniseq_truseq_smrna/HBRR1_S1_L001_summary.txt", + "miniseq_truseq_smrna/HBRR2_S2_L001.fastp.fastq.gz", + "miniseq_truseq_smrna/HBRR2_S2_L001.fastp.fastq.gz.md5", + "miniseq_truseq_smrna/HBRR2_S2_L001.fastp.html", + "miniseq_truseq_smrna/HBRR2_S2_L001.fastp.json", + "miniseq_truseq_smrna/HBRR2_S2_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna/HBRR2_S2_L001_fastqc_data.txt", + "miniseq_truseq_smrna/HBRR2_S2_L001_report.html", + "miniseq_truseq_smrna/HBRR2_S2_L001_summary.txt", + "miniseq_truseq_smrna/HBRR3_S3_L001.fastp.fastq.gz", + "miniseq_truseq_smrna/HBRR3_S3_L001.fastp.fastq.gz.md5", + "miniseq_truseq_smrna/HBRR3_S3_L001.fastp.html", + "miniseq_truseq_smrna/HBRR3_S3_L001.fastp.json", + "miniseq_truseq_smrna/HBRR3_S3_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna/HBRR3_S3_L001_fastqc_data.txt", + "miniseq_truseq_smrna/HBRR3_S3_L001_report.html", + "miniseq_truseq_smrna/HBRR3_S3_L001_summary.txt", + "miniseq_truseq_smrna/InterOp", + "miniseq_truseq_smrna/InterOp/CorrectedIntMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/EmpiricalPhasingMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/ErrorMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/EventMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/ExtendedTileMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/ExtractionMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/FWHMGridMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/ImageMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/IndexMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/PFGridMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/QMetrics2030Out.bin", + "miniseq_truseq_smrna/InterOp/QMetricsByLaneOut.bin", + "miniseq_truseq_smrna/InterOp/QMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/RegistrationMetricsOut.bin", + "miniseq_truseq_smrna/InterOp/TileMetricsOut.bin", + "miniseq_truseq_smrna/Reports", + "miniseq_truseq_smrna/Reports/Adapter_Cycle_Metrics.csv", + "miniseq_truseq_smrna/Reports/Adapter_Metrics.csv", + "miniseq_truseq_smrna/Reports/Demultiplex_Stats.csv", + "miniseq_truseq_smrna/Reports/Demultiplex_Tile_Stats.csv", + "miniseq_truseq_smrna/Reports/IndexMetricsOut.bin", + "miniseq_truseq_smrna/Reports/Index_Hopping_Counts.csv", + "miniseq_truseq_smrna/Reports/Quality_Metrics.csv", + "miniseq_truseq_smrna/Reports/Quality_Tile_Metrics.csv", + "miniseq_truseq_smrna/Reports/RunInfo.xml", + "miniseq_truseq_smrna/Reports/SampleSheet.csv", + "miniseq_truseq_smrna/Reports/Top_Unknown_Barcodes.csv", + "miniseq_truseq_smrna/Reports/fastq_list.csv", + "miniseq_truseq_smrna/UHRR1_S4_L001.fastp.fastq.gz", + "miniseq_truseq_smrna/UHRR1_S4_L001.fastp.fastq.gz.md5", + "miniseq_truseq_smrna/UHRR1_S4_L001.fastp.html", + "miniseq_truseq_smrna/UHRR1_S4_L001.fastp.json", + "miniseq_truseq_smrna/UHRR1_S4_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna/UHRR1_S4_L001_fastqc_data.txt", + "miniseq_truseq_smrna/UHRR1_S4_L001_report.html", + "miniseq_truseq_smrna/UHRR1_S4_L001_summary.txt", + "miniseq_truseq_smrna/UHRR2_S5_L001.fastp.fastq.gz", + "miniseq_truseq_smrna/UHRR2_S5_L001.fastp.fastq.gz.md5", + "miniseq_truseq_smrna/UHRR2_S5_L001.fastp.html", + "miniseq_truseq_smrna/UHRR2_S5_L001.fastp.json", + "miniseq_truseq_smrna/UHRR2_S5_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna/UHRR2_S5_L001_fastqc_data.txt", + "miniseq_truseq_smrna/UHRR2_S5_L001_report.html", + "miniseq_truseq_smrna/UHRR2_S5_L001_summary.txt", + "miniseq_truseq_smrna/UHRR3_S6_L001.fastp.fastq.gz", + "miniseq_truseq_smrna/UHRR3_S6_L001.fastp.fastq.gz.md5", + "miniseq_truseq_smrna/UHRR3_S6_L001.fastp.html", + "miniseq_truseq_smrna/UHRR3_S6_L001.fastp.json", + "miniseq_truseq_smrna/UHRR3_S6_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna/UHRR3_S6_L001_fastqc_data.txt", + "miniseq_truseq_smrna/UHRR3_S6_L001_report.html", + "miniseq_truseq_smrna/UHRR3_S6_L001_summary.txt", + "miniseq_truseq_smrna/Undetermined_S0_L001_R1_001.fastq.gz", + "miniseq_truseq_smrna_no_adapters.csv", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bclconvert-lane-stats-table.txt", + "multiqc/multiqc_data/bclconvert-sample-stats-table.txt", + "multiqc/multiqc_data/bclconvert_lane_counts.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Index_mismatches.txt", + "multiqc/multiqc_data/bclconvert_undetermined.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bclconvert_bylane.txt", + "multiqc/multiqc_data/multiqc_bclconvert_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bclconvert-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert-sample-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_undetermined-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_undetermined-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bclconvert-lane-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert-sample-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-pct.png", + "multiqc/multiqc_plots/png/bclconvert_undetermined-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_undetermined-pct.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bclconvert-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert-sample-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_undetermined-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_undetermined-pct.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "HBRR1_S1_L001.fastp.fastq.gz:md5,451657490d4816dd5ff904e34ecc7fdf", + "HBRR1_S1_L001.fastp.fastq.gz.md5:md5,573455dfd3f2e7fa6b1eee838659c03a", + "HBRR1_S1_L001.fastp.json:md5,d34d8a4237b3ff4585f5b3fc84172d02", + "HBRR1_S1_L001_R1_001.fastq.gz:md5,451657490d4816dd5ff904e34ecc7fdf", + "HBRR1_S1_L001_fastqc_data.txt:md5,e3ef09af2b44d86b7b32494f1ce5fc4c", + "HBRR1_S1_L001_summary.txt:md5,53a5e6bac1e853f23d27d6966e52df81", + "HBRR2_S2_L001.fastp.fastq.gz:md5,3b9e4fc70ebc608b48d1f0027265e9b8", + "HBRR2_S2_L001.fastp.fastq.gz.md5:md5,50fbb4ab07c7641277f2f7352babe4bd", + "HBRR2_S2_L001.fastp.json:md5,f0ff03f6bf6c1a3878ae2eebba0f070d", + "HBRR2_S2_L001_R1_001.fastq.gz:md5,3b9e4fc70ebc608b48d1f0027265e9b8", + "HBRR2_S2_L001_fastqc_data.txt:md5,1c5127f5835c98503af2c7fa98da2982", + "HBRR2_S2_L001_summary.txt:md5,f3e0bc27d30d0f6e10ad76be47017881", + "HBRR3_S3_L001.fastp.fastq.gz:md5,a110eefaee1da4d99398500e55919f0c", + "HBRR3_S3_L001.fastp.fastq.gz.md5:md5,e744c0e523aa5cd3d5422ded60f28109", + "HBRR3_S3_L001.fastp.json:md5,c2abb3a7d3e46392cad6b0230d744ac2", + "HBRR3_S3_L001_R1_001.fastq.gz:md5,a110eefaee1da4d99398500e55919f0c", + "HBRR3_S3_L001_fastqc_data.txt:md5,33a618ec1d0f8d16987adf55115a89ae", + "HBRR3_S3_L001_summary.txt:md5,fbe9c4281a768a826429e328f5eb2a34", + "CorrectedIntMetricsOut.bin:md5,4d82e208f18bfd51a5f9275e05d073ba", + "EmpiricalPhasingMetricsOut.bin:md5,0e9d6b71c90661d800b1129a0097c301", + "ErrorMetricsOut.bin:md5,dbc41ced845d7645451c6995e5774c0b", + "EventMetricsOut.bin:md5,5a93a812df6a55e6d7a0f26bdf176e93", + "ExtendedTileMetricsOut.bin:md5,5ffaee26c4ed0074f69d8c62293118f9", + "ExtractionMetricsOut.bin:md5,a4d4c0d3b9afe453fae7ca6118c9346d", + "FWHMGridMetricsOut.bin:md5,80e7c3652f72edbc5f661a1f1b3b28fc", + "ImageMetricsOut.bin:md5,2dddf68f924261ab37f83e8ee750b6f2", + "IndexMetricsOut.bin:md5,e63ea5cfa848feab8a40ba469ff46845", + "PFGridMetricsOut.bin:md5,e65fed6f9594655657521a5359759b01", + "QMetrics2030Out.bin:md5,670b3c089d4d264103a01105d12abbe8", + "QMetricsByLaneOut.bin:md5,b6d8d8ff4144f33a3f4304743db53f97", + "QMetricsOut.bin:md5,13fee543cefb5d5ae1c108ccbb07f0e6", + "RegistrationMetricsOut.bin:md5,b201979275957afbbcea634698afc352", + "TileMetricsOut.bin:md5,0d2aa2c7e39eb33e61d2ed248068ed9d", + "Adapter_Cycle_Metrics.csv:md5,757778bb0ee048463c423dff14133a51", + "Adapter_Metrics.csv:md5,5cbba841c650097f1e759c2b75c7a005", + "Demultiplex_Stats.csv:md5,40c3efd7ffb9d02fcc97028f6ee98c96", + "Demultiplex_Tile_Stats.csv:md5,916e3e488c4ed847249d7d46401a57ff", + "IndexMetricsOut.bin:md5,9a6ad90fd45b3abd2360285feff76509", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,215e001631d9383f73360975d5726f14", + "Quality_Tile_Metrics.csv:md5,122f967d30318f79f5a7ef59339f8275", + "RunInfo.xml:md5,d3d94b916915b35224ec362c64542190", + "SampleSheet.csv:md5,c32433167a5c56d5c15952c2e7948898", + "Top_Unknown_Barcodes.csv:md5,b5fa3ea9ba12fd35650e36e6c5cbdc99", + "fastq_list.csv:md5,07cbe4173e18cbdef16ee8feb4adaf7d", + "UHRR1_S4_L001.fastp.fastq.gz:md5,03f215bcb4005804f60acccfe4aaef78", + "UHRR1_S4_L001.fastp.fastq.gz.md5:md5,baa87b03873661fc6c7f318e4b19de55", + "UHRR1_S4_L001.fastp.json:md5,6b50a023754acafdd32c2bb103650a83", + "UHRR1_S4_L001_R1_001.fastq.gz:md5,b470c82d2002c563c42786060ae364b9", + "UHRR1_S4_L001_fastqc_data.txt:md5,be145fdf6b50140c98d7590d85e891f2", + "UHRR1_S4_L001_summary.txt:md5,c6c342cbcad3fc68343284c24e4a8b4a", + "UHRR2_S5_L001.fastp.fastq.gz:md5,2186d5f37865f970d223953e9a5412ae", + "UHRR2_S5_L001.fastp.fastq.gz.md5:md5,3996768dfb0c678b758399ca0aecb4dd", + "UHRR2_S5_L001.fastp.json:md5,db5ef9bec3dd04d37ada557785f43fb7", + "UHRR2_S5_L001_R1_001.fastq.gz:md5,47c36adf557bf4d37b0a84d055125290", + "UHRR2_S5_L001_fastqc_data.txt:md5,da424cfd66107dc895705fbdd5e7c94b", + "UHRR2_S5_L001_summary.txt:md5,121a0aeaf860fae497a27e8eceff3283", + "UHRR3_S6_L001.fastp.fastq.gz:md5,674c4989c2270d88612fcf221e3e0950", + "UHRR3_S6_L001.fastp.fastq.gz.md5:md5,22f315bfc3ebbe1fbf9eeca758fdd137", + "UHRR3_S6_L001.fastp.json:md5,1e08e9fa69ad134ef69dc11cbbfd03ef", + "UHRR3_S6_L001_R1_001.fastq.gz:md5,bdb407e3ded3691479ec25f5f1df3b07", + "UHRR3_S6_L001_fastqc_data.txt:md5,8cf45b23b2176f83309b2bd6162adb0d", + "UHRR3_S6_L001_summary.txt:md5,d7d5a014b51d64e4da1a113a4ad79eda", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,b0b4daae001636cf033ff760a5ab479d", + "miniseq_truseq_smrna_no_adapters.csv:md5,c32433167a5c56d5c15952c2e7948898", + "bclconvert-lane-stats-table.txt:md5,9295e908a296865f1ea271ae4181ab04", + "bclconvert-sample-stats-table.txt:md5,703e85fc7ef1b3784c02e8fc28e6dbd6", + "bclconvert_lane_counts.txt:md5,32e8acea6fd6ef76943100329be22fee", + "bclconvert_sample_counts_Counts_per_lane.txt:md5,2eb58439a3eb1eee508bdce0ee340649", + "bclconvert_sample_counts_Index_mismatches.txt:md5,94023737055873c151ea9f7e3f563f73", + "bclconvert_undetermined.txt:md5,3fda7704b2b8cbab81a48ad4e5552243", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,f34d80cbc50fb151f04c9739c62412f0", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,c50799d5b2e88aaf6d134a0c91799617", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1787c362916517c9b922b7bcd5940bf7", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,ae11e4c047b4f2933fe09261c305c520", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,d1c9f76c20c4940880126246fa2c3412", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,f8b94a819f2b15b5a47c4b1003c32a18", + "fastp_filtered_reads_plot.txt:md5,8ab004632691b04b665920977beb8924", + "fastqc_adapter_content_plot.txt:md5,a209adf87470f3a106e95a8636199b66", + "fastqc_overrepresented_sequences_plot.txt:md5,bf4b46c609cb609742c369cb251f2e2c", + "fastqc_per_base_n_content_plot.txt:md5,b7793753c3e72a9ecf52e9be83024cb2", + "fastqc_per_base_sequence_quality_plot.txt:md5,d1c9f76c20c4940880126246fa2c3412", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,0b2a4ff7cf154b2a500236edd1e25702", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,ee01bcc9619fbb1f817c6c892743f25f", + "fastqc_per_sequence_quality_scores_plot.txt:md5,97c62777c755c89ed8e7ca802a111329", + "fastqc_sequence_counts_plot.txt:md5,4b906147cf7e362c83df2bf639d9c213", + "fastqc_sequence_duplication_levels_plot.txt:md5,6da1431aca488bb451e8a2b03dcb1d59", + "fastqc_sequence_length_distribution_plot.txt:md5,70de269b5d06021f286c44d3ac91b54b", + "multiqc_bclconvert_bylane.txt:md5,5067dc968fcca1f47db0663f4d407807", + "multiqc_bclconvert_bysample.txt:md5,29634775947e43972c864bdb08ceb61e", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:09:33.510548826" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:32:05.328537478" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:34:31.69965379" + } +} \ No newline at end of file diff --git a/tests/fqtk.nf.test b/tests/fqtk.nf.test new file mode 100644 index 00000000..9f41e885 --- /dev/null +++ b/tests/fqtk.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - FQTK" + script "../main.nf" + profile "test_fqtk" + tag "fqtk" + tag "pipeline" + + test("FQTK") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/fqtk.nf.test.snap b/tests/fqtk.nf.test.snap new file mode 100644 index 00000000..9654f26b --- /dev/null +++ b/tests/fqtk.nf.test.snap @@ -0,0 +1,841 @@ +{ + "FQTK": { + "content": [ + 107, + { + "CSV2TSV": { + "sed": 4.8 + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "FQTK": { + "fqtk": "0.2.1" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "UNTAR_FLOWCELL": { + "untar": 1.34 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "csv2tsv", + "csv2tsv/samplesheet.tsv", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv", + "test", + "test.csv", + "test/demux-metrics.txt", + "test/s1.R1.fq.gz", + "test/s1.R2.fq.gz", + "test/s1.fastp.html", + "test/s1.fastp.json", + "test/s10.R1.fq.gz", + "test/s10.R2.fq.gz", + "test/s10.fastp.html", + "test/s10.fastp.json", + "test/s10_1.fastp.fastq.gz", + "test/s10_1.fastp.fastq.gz.md5", + "test/s10_1.fastp.fastq.gz_fastqc_data.txt", + "test/s10_1.fastp.fastq.gz_fastqc_report.html", + "test/s10_1.fastp.fastq.gz_summary.txt", + "test/s10_2.fastp.fastq.gz", + "test/s10_2.fastp.fastq.gz.md5", + "test/s10_2.fastp.fastq.gz_fastqc_data.txt", + "test/s10_2.fastp.fastq.gz_fastqc_report.html", + "test/s10_2.fastp.fastq.gz_summary.txt", + "test/s11.R1.fq.gz", + "test/s11.R2.fq.gz", + "test/s11.fastp.html", + "test/s11.fastp.json", + "test/s11_1.fastp.fastq.gz", + "test/s11_1.fastp.fastq.gz.md5", + "test/s11_1.fastp.fastq.gz_fastqc_data.txt", + "test/s11_1.fastp.fastq.gz_fastqc_report.html", + "test/s11_1.fastp.fastq.gz_summary.txt", + "test/s11_2.fastp.fastq.gz", + "test/s11_2.fastp.fastq.gz.md5", + "test/s11_2.fastp.fastq.gz_fastqc_data.txt", + "test/s11_2.fastp.fastq.gz_fastqc_report.html", + "test/s11_2.fastp.fastq.gz_summary.txt", + "test/s12.R1.fq.gz", + "test/s12.R2.fq.gz", + "test/s12.fastp.html", + "test/s12.fastp.json", + "test/s12_1.fastp.fastq.gz", + "test/s12_1.fastp.fastq.gz.md5", + "test/s12_1.fastp.fastq.gz_fastqc_data.txt", + "test/s12_1.fastp.fastq.gz_fastqc_report.html", + "test/s12_1.fastp.fastq.gz_summary.txt", + "test/s12_2.fastp.fastq.gz", + "test/s12_2.fastp.fastq.gz.md5", + "test/s12_2.fastp.fastq.gz_fastqc_data.txt", + "test/s12_2.fastp.fastq.gz_fastqc_report.html", + "test/s12_2.fastp.fastq.gz_summary.txt", + "test/s13.R1.fq.gz", + "test/s13.R2.fq.gz", + "test/s13.fastp.html", + "test/s13.fastp.json", + "test/s13_1.fastp.fastq.gz", + "test/s13_1.fastp.fastq.gz.md5", + "test/s13_1.fastp.fastq.gz_fastqc_data.txt", + "test/s13_1.fastp.fastq.gz_fastqc_report.html", + "test/s13_1.fastp.fastq.gz_summary.txt", + "test/s13_2.fastp.fastq.gz", + "test/s13_2.fastp.fastq.gz.md5", + "test/s13_2.fastp.fastq.gz_fastqc_data.txt", + "test/s13_2.fastp.fastq.gz_fastqc_report.html", + "test/s13_2.fastp.fastq.gz_summary.txt", + "test/s14.R1.fq.gz", + "test/s14.R2.fq.gz", + "test/s14.fastp.html", + "test/s14.fastp.json", + "test/s14_1.fastp.fastq.gz", + "test/s14_1.fastp.fastq.gz.md5", + "test/s14_1.fastp.fastq.gz_fastqc_data.txt", + "test/s14_1.fastp.fastq.gz_fastqc_report.html", + "test/s14_1.fastp.fastq.gz_summary.txt", + "test/s14_2.fastp.fastq.gz", + "test/s14_2.fastp.fastq.gz.md5", + "test/s14_2.fastp.fastq.gz_fastqc_data.txt", + "test/s14_2.fastp.fastq.gz_fastqc_report.html", + "test/s14_2.fastp.fastq.gz_summary.txt", + "test/s15.R1.fq.gz", + "test/s15.R2.fq.gz", + "test/s15.fastp.html", + "test/s15.fastp.json", + "test/s15_1.fastp.fastq.gz", + "test/s15_1.fastp.fastq.gz.md5", + "test/s15_1.fastp.fastq.gz_fastqc_data.txt", + "test/s15_1.fastp.fastq.gz_fastqc_report.html", + "test/s15_1.fastp.fastq.gz_summary.txt", + "test/s15_2.fastp.fastq.gz", + "test/s15_2.fastp.fastq.gz.md5", + "test/s15_2.fastp.fastq.gz_fastqc_data.txt", + "test/s15_2.fastp.fastq.gz_fastqc_report.html", + "test/s15_2.fastp.fastq.gz_summary.txt", + "test/s16.R1.fq.gz", + "test/s16.R2.fq.gz", + "test/s16.fastp.html", + "test/s16.fastp.json", + "test/s16_1.fastp.fastq.gz", + "test/s16_1.fastp.fastq.gz.md5", + "test/s16_1.fastp.fastq.gz_fastqc_data.txt", + "test/s16_1.fastp.fastq.gz_fastqc_report.html", + "test/s16_1.fastp.fastq.gz_summary.txt", + "test/s16_2.fastp.fastq.gz", + "test/s16_2.fastp.fastq.gz.md5", + "test/s16_2.fastp.fastq.gz_fastqc_data.txt", + "test/s16_2.fastp.fastq.gz_fastqc_report.html", + "test/s16_2.fastp.fastq.gz_summary.txt", + "test/s17.R1.fq.gz", + "test/s17.R2.fq.gz", + "test/s17.fastp.html", + "test/s17.fastp.json", + "test/s17_1.fastp.fastq.gz", + "test/s17_1.fastp.fastq.gz.md5", + "test/s17_1.fastp.fastq.gz_fastqc_data.txt", + "test/s17_1.fastp.fastq.gz_fastqc_report.html", + "test/s17_1.fastp.fastq.gz_summary.txt", + "test/s17_2.fastp.fastq.gz", + "test/s17_2.fastp.fastq.gz.md5", + "test/s17_2.fastp.fastq.gz_fastqc_data.txt", + "test/s17_2.fastp.fastq.gz_fastqc_report.html", + "test/s17_2.fastp.fastq.gz_summary.txt", + "test/s18.R1.fq.gz", + "test/s18.R2.fq.gz", + "test/s18.fastp.html", + "test/s18.fastp.json", + "test/s18_1.fastp.fastq.gz", + "test/s18_1.fastp.fastq.gz.md5", + "test/s18_1.fastp.fastq.gz_fastqc_data.txt", + "test/s18_1.fastp.fastq.gz_fastqc_report.html", + "test/s18_1.fastp.fastq.gz_summary.txt", + "test/s18_2.fastp.fastq.gz", + "test/s18_2.fastp.fastq.gz.md5", + "test/s18_2.fastp.fastq.gz_fastqc_data.txt", + "test/s18_2.fastp.fastq.gz_fastqc_report.html", + "test/s18_2.fastp.fastq.gz_summary.txt", + "test/s19.R1.fq.gz", + "test/s19.R2.fq.gz", + "test/s19.fastp.html", + "test/s19.fastp.json", + "test/s19_1.fastp.fastq.gz", + "test/s19_1.fastp.fastq.gz.md5", + "test/s19_1.fastp.fastq.gz_fastqc_data.txt", + "test/s19_1.fastp.fastq.gz_fastqc_report.html", + "test/s19_1.fastp.fastq.gz_summary.txt", + "test/s19_2.fastp.fastq.gz", + "test/s19_2.fastp.fastq.gz.md5", + "test/s19_2.fastp.fastq.gz_fastqc_data.txt", + "test/s19_2.fastp.fastq.gz_fastqc_report.html", + "test/s19_2.fastp.fastq.gz_summary.txt", + "test/s1_1.fastp.fastq.gz", + "test/s1_1.fastp.fastq.gz.md5", + "test/s1_1.fastp.fastq.gz_fastqc_data.txt", + "test/s1_1.fastp.fastq.gz_fastqc_report.html", + "test/s1_1.fastp.fastq.gz_summary.txt", + "test/s1_2.fastp.fastq.gz", + "test/s1_2.fastp.fastq.gz.md5", + "test/s1_2.fastp.fastq.gz_fastqc_data.txt", + "test/s1_2.fastp.fastq.gz_fastqc_report.html", + "test/s1_2.fastp.fastq.gz_summary.txt", + "test/s2.R1.fq.gz", + "test/s2.R2.fq.gz", + "test/s2.fastp.html", + "test/s2.fastp.json", + "test/s20.R1.fq.gz", + "test/s20.R2.fq.gz", + "test/s20.fastp.html", + "test/s20.fastp.json", + "test/s20_1.fastp.fastq.gz", + "test/s20_1.fastp.fastq.gz.md5", + "test/s20_1.fastp.fastq.gz_fastqc_data.txt", + "test/s20_1.fastp.fastq.gz_fastqc_report.html", + "test/s20_1.fastp.fastq.gz_summary.txt", + "test/s20_2.fastp.fastq.gz", + "test/s20_2.fastp.fastq.gz.md5", + "test/s20_2.fastp.fastq.gz_fastqc_data.txt", + "test/s20_2.fastp.fastq.gz_fastqc_report.html", + "test/s20_2.fastp.fastq.gz_summary.txt", + "test/s21.R1.fq.gz", + "test/s21.R2.fq.gz", + "test/s21.fastp.html", + "test/s21.fastp.json", + "test/s21_1.fastp.fastq.gz", + "test/s21_1.fastp.fastq.gz.md5", + "test/s21_1.fastp.fastq.gz_fastqc_data.txt", + "test/s21_1.fastp.fastq.gz_fastqc_report.html", + "test/s21_1.fastp.fastq.gz_summary.txt", + "test/s21_2.fastp.fastq.gz", + "test/s21_2.fastp.fastq.gz.md5", + "test/s21_2.fastp.fastq.gz_fastqc_data.txt", + "test/s21_2.fastp.fastq.gz_fastqc_report.html", + "test/s21_2.fastp.fastq.gz_summary.txt", + "test/s22.R1.fq.gz", + "test/s22.R2.fq.gz", + "test/s22.fastp.html", + "test/s22.fastp.json", + "test/s22_1.fastp.fastq.gz", + "test/s22_1.fastp.fastq.gz.md5", + "test/s22_1.fastp.fastq.gz_fastqc_data.txt", + "test/s22_1.fastp.fastq.gz_fastqc_report.html", + "test/s22_1.fastp.fastq.gz_summary.txt", + "test/s22_2.fastp.fastq.gz", + "test/s22_2.fastp.fastq.gz.md5", + "test/s22_2.fastp.fastq.gz_fastqc_data.txt", + "test/s22_2.fastp.fastq.gz_fastqc_report.html", + "test/s22_2.fastp.fastq.gz_summary.txt", + "test/s23.R1.fq.gz", + "test/s23.R2.fq.gz", + "test/s23.fastp.html", + "test/s23.fastp.json", + "test/s23_1.fastp.fastq.gz", + "test/s23_1.fastp.fastq.gz.md5", + "test/s23_1.fastp.fastq.gz_fastqc_data.txt", + "test/s23_1.fastp.fastq.gz_fastqc_report.html", + "test/s23_1.fastp.fastq.gz_summary.txt", + "test/s23_2.fastp.fastq.gz", + "test/s23_2.fastp.fastq.gz.md5", + "test/s23_2.fastp.fastq.gz_fastqc_data.txt", + "test/s23_2.fastp.fastq.gz_fastqc_report.html", + "test/s23_2.fastp.fastq.gz_summary.txt", + "test/s24.R1.fq.gz", + "test/s24.R2.fq.gz", + "test/s24.fastp.html", + "test/s24.fastp.json", + "test/s24_1.fastp.fastq.gz", + "test/s24_1.fastp.fastq.gz.md5", + "test/s24_1.fastp.fastq.gz_fastqc_data.txt", + "test/s24_1.fastp.fastq.gz_fastqc_report.html", + "test/s24_1.fastp.fastq.gz_summary.txt", + "test/s24_2.fastp.fastq.gz", + "test/s24_2.fastp.fastq.gz.md5", + "test/s24_2.fastp.fastq.gz_fastqc_data.txt", + "test/s24_2.fastp.fastq.gz_fastqc_report.html", + "test/s24_2.fastp.fastq.gz_summary.txt", + "test/s2_1.fastp.fastq.gz", + "test/s2_1.fastp.fastq.gz.md5", + "test/s2_1.fastp.fastq.gz_fastqc_data.txt", + "test/s2_1.fastp.fastq.gz_fastqc_report.html", + "test/s2_1.fastp.fastq.gz_summary.txt", + "test/s2_2.fastp.fastq.gz", + "test/s2_2.fastp.fastq.gz.md5", + "test/s2_2.fastp.fastq.gz_fastqc_data.txt", + "test/s2_2.fastp.fastq.gz_fastqc_report.html", + "test/s2_2.fastp.fastq.gz_summary.txt", + "test/s3.R1.fq.gz", + "test/s3.R2.fq.gz", + "test/s3.fastp.html", + "test/s3.fastp.json", + "test/s3_1.fastp.fastq.gz", + "test/s3_1.fastp.fastq.gz.md5", + "test/s3_1.fastp.fastq.gz_fastqc_data.txt", + "test/s3_1.fastp.fastq.gz_fastqc_report.html", + "test/s3_1.fastp.fastq.gz_summary.txt", + "test/s3_2.fastp.fastq.gz", + "test/s3_2.fastp.fastq.gz.md5", + "test/s3_2.fastp.fastq.gz_fastqc_data.txt", + "test/s3_2.fastp.fastq.gz_fastqc_report.html", + "test/s3_2.fastp.fastq.gz_summary.txt", + "test/s4.R1.fq.gz", + "test/s4.R2.fq.gz", + "test/s4.fastp.html", + "test/s4.fastp.json", + "test/s4_1.fastp.fastq.gz", + "test/s4_1.fastp.fastq.gz.md5", + "test/s4_1.fastp.fastq.gz_fastqc_data.txt", + "test/s4_1.fastp.fastq.gz_fastqc_report.html", + "test/s4_1.fastp.fastq.gz_summary.txt", + "test/s4_2.fastp.fastq.gz", + "test/s4_2.fastp.fastq.gz.md5", + "test/s4_2.fastp.fastq.gz_fastqc_data.txt", + "test/s4_2.fastp.fastq.gz_fastqc_report.html", + "test/s4_2.fastp.fastq.gz_summary.txt", + "test/s5.R1.fq.gz", + "test/s5.R2.fq.gz", + "test/s5.fastp.html", + "test/s5.fastp.json", + "test/s5_1.fastp.fastq.gz", + "test/s5_1.fastp.fastq.gz.md5", + "test/s5_1.fastp.fastq.gz_fastqc_data.txt", + "test/s5_1.fastp.fastq.gz_fastqc_report.html", + "test/s5_1.fastp.fastq.gz_summary.txt", + "test/s5_2.fastp.fastq.gz", + "test/s5_2.fastp.fastq.gz.md5", + "test/s5_2.fastp.fastq.gz_fastqc_data.txt", + "test/s5_2.fastp.fastq.gz_fastqc_report.html", + "test/s5_2.fastp.fastq.gz_summary.txt", + "test/s6.R1.fq.gz", + "test/s6.R2.fq.gz", + "test/s6.fastp.html", + "test/s6.fastp.json", + "test/s6_1.fastp.fastq.gz", + "test/s6_1.fastp.fastq.gz.md5", + "test/s6_1.fastp.fastq.gz_fastqc_data.txt", + "test/s6_1.fastp.fastq.gz_fastqc_report.html", + "test/s6_1.fastp.fastq.gz_summary.txt", + "test/s6_2.fastp.fastq.gz", + "test/s6_2.fastp.fastq.gz.md5", + "test/s6_2.fastp.fastq.gz_fastqc_data.txt", + "test/s6_2.fastp.fastq.gz_fastqc_report.html", + "test/s6_2.fastp.fastq.gz_summary.txt", + "test/s7.R1.fq.gz", + "test/s7.R2.fq.gz", + "test/s7.fastp.html", + "test/s7.fastp.json", + "test/s7_1.fastp.fastq.gz", + "test/s7_1.fastp.fastq.gz.md5", + "test/s7_1.fastp.fastq.gz_fastqc_data.txt", + "test/s7_1.fastp.fastq.gz_fastqc_report.html", + "test/s7_1.fastp.fastq.gz_summary.txt", + "test/s7_2.fastp.fastq.gz", + "test/s7_2.fastp.fastq.gz.md5", + "test/s7_2.fastp.fastq.gz_fastqc_data.txt", + "test/s7_2.fastp.fastq.gz_fastqc_report.html", + "test/s7_2.fastp.fastq.gz_summary.txt", + "test/s8.R1.fq.gz", + "test/s8.R2.fq.gz", + "test/s8.fastp.html", + "test/s8.fastp.json", + "test/s8_1.fastp.fastq.gz", + "test/s8_1.fastp.fastq.gz.md5", + "test/s8_1.fastp.fastq.gz_fastqc_data.txt", + "test/s8_1.fastp.fastq.gz_fastqc_report.html", + "test/s8_1.fastp.fastq.gz_summary.txt", + "test/s8_2.fastp.fastq.gz", + "test/s8_2.fastp.fastq.gz.md5", + "test/s8_2.fastp.fastq.gz_fastqc_data.txt", + "test/s8_2.fastp.fastq.gz_fastqc_report.html", + "test/s8_2.fastp.fastq.gz_summary.txt", + "test/s9.R1.fq.gz", + "test/s9.R2.fq.gz", + "test/s9.fastp.html", + "test/s9.fastp.json", + "test/s9_1.fastp.fastq.gz", + "test/s9_1.fastp.fastq.gz.md5", + "test/s9_1.fastp.fastq.gz_fastqc_data.txt", + "test/s9_1.fastp.fastq.gz_fastqc_report.html", + "test/s9_1.fastp.fastq.gz_summary.txt", + "test/s9_2.fastp.fastq.gz", + "test/s9_2.fastp.fastq.gz.md5", + "test/s9_2.fastp.fastq.gz_fastqc_data.txt", + "test/s9_2.fastp.fastq.gz_fastqc_report.html", + "test/s9_2.fastp.fastq.gz_summary.txt", + "test/unmatched.R1.fq.gz", + "test/unmatched.R2.fq.gz", + "test/unmatched.fastp.html", + "test/unmatched.fastp.json", + "test/unmatched_1.fastp.fastq.gz", + "test/unmatched_1.fastp.fastq.gz.md5", + "test/unmatched_1.fastp.fastq.gz_fastqc_data.txt", + "test/unmatched_1.fastp.fastq.gz_fastqc_report.html", + "test/unmatched_1.fastp.fastq.gz_summary.txt", + "test/unmatched_2.fastp.fastq.gz", + "test/unmatched_2.fastp.fastq.gz.md5", + "test/unmatched_2.fastp.fastq.gz_fastqc_data.txt", + "test/unmatched_2.fastp.fastq.gz_fastqc_report.html", + "test/unmatched_2.fastp.fastq.gz_summary.txt" + ], + [ + "samplesheet.tsv:md5,f6595e6a60b7f135d8d6ad2a7d8b84c9", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,2e2ea8010dfa345adb054ab61d4097cb", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,2e2ea8010dfa345adb054ab61d4097cb", + "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,77de96e7f6c12b078ca4123e935664fa", + "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,77de96e7f6c12b078ca4123e935664fa", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,aa314757967b1e15327c91d755647633", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,aa314757967b1e15327c91d755647633", + "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,aa314757967b1e15327c91d755647633", + "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,aa314757967b1e15327c91d755647633", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,51c775bbe26bc18302e5ad4e3f062a35", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,51c775bbe26bc18302e5ad4e3f062a35", + "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,51c775bbe26bc18302e5ad4e3f062a35", + "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,51c775bbe26bc18302e5ad4e3f062a35", + "fastp_filtered_reads_plot.txt:md5,aa201560b0d9c48a413c496c6b9c2368", + "fastqc_per_base_n_content_plot.txt:md5,e4075b5f39c67cad9863454c740b49fb", + "fastqc_per_base_sequence_quality_plot.txt:md5,f36dd0652b24458c44d8db504396a1c0", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a455ab83946f6245c4d191b3c007c21c", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,90c4dc771cb6ed90c6a08d6ec946e347", + "fastqc_per_sequence_quality_scores_plot.txt:md5,0075027df869f39e0946161431260538", + "fastqc_sequence_counts_plot.txt:md5,5168b647c4bbd6b3be17373e134fb296", + "fastqc_sequence_duplication_levels_plot.txt:md5,d6db81670f1240dda7a91e14a29557c0", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2", + "test.csv:md5,c01a880241575a67e3eb5dc461a4972c", + "demux-metrics.txt:md5,1d587fa959f9129155314cf531103347", + "s1.R1.fq.gz:md5,1eadc3622432e260b2d1c43d669b621a", + "s1.R2.fq.gz:md5,fe11bc516e32e2ee6c3064dd7d157bc8", + "s1.fastp.json:md5,be9a4b1838890e0ef5c586a3dc83b728", + "s10.R1.fq.gz:md5,68d72892789df70b17b8886d6a616999", + "s10.R2.fq.gz:md5,abe44a80eebd1a4a7ec432ee3142f599", + "s10.fastp.json:md5,4a9489b26bda96e3b589d54df90ff063", + "s10_1.fastp.fastq.gz:md5,68d72892789df70b17b8886d6a616999", + "s10_1.fastp.fastq.gz.md5:md5,8db05dbfa024326847b7dcbf5f9bc5ee", + "s10_1.fastp.fastq.gz_fastqc_data.txt:md5,f4877a6030408f6602010f135bd00199", + "s10_1.fastp.fastq.gz_summary.txt:md5,bbe10e92d011509ae8384020f66ac895", + "s10_2.fastp.fastq.gz:md5,abe44a80eebd1a4a7ec432ee3142f599", + "s10_2.fastp.fastq.gz.md5:md5,5cbb47118bc5c1fec6b6e08a1f1c30a6", + "s10_2.fastp.fastq.gz_fastqc_data.txt:md5,42f985dc5d6e23ab745c90cd8bf0889b", + "s10_2.fastp.fastq.gz_summary.txt:md5,cf832ac3f3e9bf35bcfaa9768e2dcc20", + "s11.R1.fq.gz:md5,1e63515691b7694b3237f69e95dacdd7", + "s11.R2.fq.gz:md5,3431b7a6d5840afb4460529a6f9611e3", + "s11.fastp.json:md5,3ddede2a5cb7c7b5567390d3d39a5dc5", + "s11_1.fastp.fastq.gz:md5,1e63515691b7694b3237f69e95dacdd7", + "s11_1.fastp.fastq.gz.md5:md5,8d33a1fe56fb44826cb377daa5b730ed", + "s11_1.fastp.fastq.gz_fastqc_data.txt:md5,71a1bb83be438792b01c87e4625c7ff9", + "s11_1.fastp.fastq.gz_summary.txt:md5,1b38f806b008bf6ce281d46c203ea46e", + "s11_2.fastp.fastq.gz:md5,3431b7a6d5840afb4460529a6f9611e3", + "s11_2.fastp.fastq.gz.md5:md5,93334c959bd78786b274cc05db184e14", + "s11_2.fastp.fastq.gz_fastqc_data.txt:md5,427934d28e9bc0987889cafc3d58647d", + "s11_2.fastp.fastq.gz_summary.txt:md5,a09abb540a0e59bd43be621c7ff10a3e", + "s12.R1.fq.gz:md5,a27e66093a904a269bfcc3c3f98a1238", + "s12.R2.fq.gz:md5,25b5b8ced9353f202880077aabd2a721", + "s12.fastp.json:md5,f2183e56c353c842179e3a9c9961ae92", + "s12_1.fastp.fastq.gz:md5,a27e66093a904a269bfcc3c3f98a1238", + "s12_1.fastp.fastq.gz.md5:md5,e68abcbca9161b0a02def11aaf3ba9d1", + "s12_1.fastp.fastq.gz_fastqc_data.txt:md5,04e72d7df66c532cba7154355c9120b2", + "s12_1.fastp.fastq.gz_summary.txt:md5,1ba67ec838f7a385a36f9387c30cc05b", + "s12_2.fastp.fastq.gz:md5,25b5b8ced9353f202880077aabd2a721", + "s12_2.fastp.fastq.gz.md5:md5,977807b9ef4f4327d2b54ac9e1497437", + "s12_2.fastp.fastq.gz_fastqc_data.txt:md5,63b15e0b2a65e69d125a8012bf50d9d9", + "s12_2.fastp.fastq.gz_summary.txt:md5,05cf105e959da1c76b1d6724b12b9a66", + "s13.R1.fq.gz:md5,353b2cbd1394d0e1c03cd3a4a7f4f623", + "s13.R2.fq.gz:md5,3e3c6ed5933d864759cceee197f8fa64", + "s13.fastp.json:md5,6a61f4bf86a107a8090ed7c8fe60670c", + "s13_1.fastp.fastq.gz:md5,353b2cbd1394d0e1c03cd3a4a7f4f623", + "s13_1.fastp.fastq.gz.md5:md5,c8717d66778eb444f03bb4ba2b42a419", + "s13_1.fastp.fastq.gz_fastqc_data.txt:md5,8b23beefaf52a5efb3c61df884fef31e", + "s13_1.fastp.fastq.gz_summary.txt:md5,f5471ae4ddf2e0f41acedf6f37264cbd", + "s13_2.fastp.fastq.gz:md5,3e3c6ed5933d864759cceee197f8fa64", + "s13_2.fastp.fastq.gz.md5:md5,4a2737d6b404afa20e57a25e3e16c357", + "s13_2.fastp.fastq.gz_fastqc_data.txt:md5,0f37812e627b4c608dc1254aff903f11", + "s13_2.fastp.fastq.gz_summary.txt:md5,213304b4943eabe32b43abe315a99a72", + "s14.R1.fq.gz:md5,83744d94d2f5d3722c960566b7a5267e", + "s14.R2.fq.gz:md5,1aecf34deb4bc27069f4ff83a0fb9f5d", + "s14.fastp.json:md5,dea1c5d8dd7311ee10a1663c62b755e5", + "s14_1.fastp.fastq.gz:md5,83744d94d2f5d3722c960566b7a5267e", + "s14_1.fastp.fastq.gz.md5:md5,1ed08db7b3ee59699c69f8f6802eea1b", + "s14_1.fastp.fastq.gz_fastqc_data.txt:md5,dad59184d517f9b9b746d58d993fb2e6", + "s14_1.fastp.fastq.gz_summary.txt:md5,eac4575d795da57e20573cad9ecef4d1", + "s14_2.fastp.fastq.gz:md5,1aecf34deb4bc27069f4ff83a0fb9f5d", + "s14_2.fastp.fastq.gz.md5:md5,8331df306ee370dc1eab5333f9f984b5", + "s14_2.fastp.fastq.gz_fastqc_data.txt:md5,f3397fb39b7d261ef30a531b9defd7af", + "s14_2.fastp.fastq.gz_summary.txt:md5,795fe9cba1265989811625916f65fd8a", + "s15.R1.fq.gz:md5,ea1f11b52fc604e4aa168a78bf086892", + "s15.R2.fq.gz:md5,f059ac2b1125d364570be8a5010e94d8", + "s15.fastp.json:md5,5271bdbbdf1c2c3c1e5a1ea541b39d9b", + "s15_1.fastp.fastq.gz:md5,ea1f11b52fc604e4aa168a78bf086892", + "s15_1.fastp.fastq.gz.md5:md5,dcc9a9feac74537abbf110a050634f16", + "s15_1.fastp.fastq.gz_fastqc_data.txt:md5,f350de6b6b415bfa779c1347dfc6e6cf", + "s15_1.fastp.fastq.gz_summary.txt:md5,c4b63c996c1840cc02873a5b61b20e9d", + "s15_2.fastp.fastq.gz:md5,f059ac2b1125d364570be8a5010e94d8", + "s15_2.fastp.fastq.gz.md5:md5,eac53af81c90e12babd1868ba63250d7", + "s15_2.fastp.fastq.gz_fastqc_data.txt:md5,8fcbf9893d145fb7ba5828ee587219b1", + "s15_2.fastp.fastq.gz_summary.txt:md5,d879805b86fd51404213146167de0bb8", + "s16.R1.fq.gz:md5,150db1d3462b6cdd8022011b462d190d", + "s16.R2.fq.gz:md5,a939a31d634df5a6c5741a79ad84fea5", + "s16.fastp.json:md5,178faff96bfe299eeda69bc42cf5969c", + "s16_1.fastp.fastq.gz:md5,150db1d3462b6cdd8022011b462d190d", + "s16_1.fastp.fastq.gz.md5:md5,f7dff2b49d590f7357e69eafb61b17f8", + "s16_1.fastp.fastq.gz_fastqc_data.txt:md5,2ad150c1a32babb0f3fda90609923b2f", + "s16_1.fastp.fastq.gz_summary.txt:md5,99dcf04f3f19e394e9136c98cf06455e", + "s16_2.fastp.fastq.gz:md5,a939a31d634df5a6c5741a79ad84fea5", + "s16_2.fastp.fastq.gz.md5:md5,1edbe71af9b9461671c8b6a88e8c1b2d", + "s16_2.fastp.fastq.gz_fastqc_data.txt:md5,6e67cf4be9cbb06fa589ffb2a252eba2", + "s16_2.fastp.fastq.gz_summary.txt:md5,77184c2c0a60f6150a2741c526d292b1", + "s17.R1.fq.gz:md5,eb2a43e737d5bc941866957d878f52cb", + "s17.R2.fq.gz:md5,affeeeb95f4ab3eb73ff3fd49d62a460", + "s17.fastp.json:md5,22592f57012a71239e4571b4ee81f68e", + "s17_1.fastp.fastq.gz:md5,eb2a43e737d5bc941866957d878f52cb", + "s17_1.fastp.fastq.gz.md5:md5,8a78a67904f87e1d7f7b0bdadf4fd358", + "s17_1.fastp.fastq.gz_fastqc_data.txt:md5,272799600b9eae03a2fda82093454159", + "s17_1.fastp.fastq.gz_summary.txt:md5,a57ff79f8045bbbde87fcee38d1e1986", + "s17_2.fastp.fastq.gz:md5,affeeeb95f4ab3eb73ff3fd49d62a460", + "s17_2.fastp.fastq.gz.md5:md5,4afdddaae7c346c587bd6611da6f8340", + "s17_2.fastp.fastq.gz_fastqc_data.txt:md5,d5c62b1c0d48ca2d5b66187294574bee", + "s17_2.fastp.fastq.gz_summary.txt:md5,f5322e243e01c8da1e497773bb691d5b", + "s18.R1.fq.gz:md5,413c245496557c3973bcb2c8fd738fed", + "s18.R2.fq.gz:md5,50d854cd559fb641967e8eda19006f8f", + "s18.fastp.json:md5,d7877e69b0f42df112a1aa7e4a4f2b3b", + "s18_1.fastp.fastq.gz:md5,413c245496557c3973bcb2c8fd738fed", + "s18_1.fastp.fastq.gz.md5:md5,9097ef96f51fce62a56b2b15321552c9", + "s18_1.fastp.fastq.gz_fastqc_data.txt:md5,8029dd9a64b513c655c7ece29f0c68a8", + "s18_1.fastp.fastq.gz_summary.txt:md5,8aaeaec3157659c60708d6fab0a1fea0", + "s18_2.fastp.fastq.gz:md5,50d854cd559fb641967e8eda19006f8f", + "s18_2.fastp.fastq.gz.md5:md5,b27dbe25fc37de3cd294200e5733d725", + "s18_2.fastp.fastq.gz_fastqc_data.txt:md5,93a87272a4b3baf54adbd7d6db4a1e18", + "s18_2.fastp.fastq.gz_summary.txt:md5,8208a75cb7c51db537b893061f1f47bf", + "s19.R1.fq.gz:md5,9581c36425dd36b1bf4a844d4c3fd434", + "s19.R2.fq.gz:md5,13e966cdfcf3fd272a1d739dbe82e05c", + "s19.fastp.json:md5,1992210c2eed2fb36c04b656f5f50ff6", + "s19_1.fastp.fastq.gz:md5,9581c36425dd36b1bf4a844d4c3fd434", + "s19_1.fastp.fastq.gz.md5:md5,57cf0a82a1cbc6f81dd3af344769c067", + "s19_1.fastp.fastq.gz_fastqc_data.txt:md5,8e4cdf867e0315bfcc621cf3c9098ec3", + "s19_1.fastp.fastq.gz_summary.txt:md5,3cf3a6d2b17e6ac6a671218dfea1b561", + "s19_2.fastp.fastq.gz:md5,13e966cdfcf3fd272a1d739dbe82e05c", + "s19_2.fastp.fastq.gz.md5:md5,26fcb1ddc99bb72d652abebcc508d661", + "s19_2.fastp.fastq.gz_fastqc_data.txt:md5,933c6e6f1d77695b9c4c19bd873ea505", + "s19_2.fastp.fastq.gz_summary.txt:md5,5e0f81803f2360ec27a6045f80654d96", + "s1_1.fastp.fastq.gz:md5,1eadc3622432e260b2d1c43d669b621a", + "s1_1.fastp.fastq.gz.md5:md5,f64ffb4f1c9b5e5e19dd2da8f86ec2e8", + "s1_1.fastp.fastq.gz_fastqc_data.txt:md5,7bc10cfb10e7fe926bba406b0aaffc8a", + "s1_1.fastp.fastq.gz_summary.txt:md5,6f24a3a874a2c4d74c2b5a6fa25ccb5e", + "s1_2.fastp.fastq.gz:md5,fe11bc516e32e2ee6c3064dd7d157bc8", + "s1_2.fastp.fastq.gz.md5:md5,fda56aa2d1c15cb762abf59a4f64e1bb", + "s1_2.fastp.fastq.gz_fastqc_data.txt:md5,0d8aedb8f157166910a984e01c8cffed", + "s1_2.fastp.fastq.gz_summary.txt:md5,6ea5d63f4d9ad9db3d9a489e31ff13ad", + "s2.R1.fq.gz:md5,e5a9598bef0d53087aa25530667ccf79", + "s2.R2.fq.gz:md5,7cbede4e3e641207da50ebb96653d0df", + "s2.fastp.json:md5,5b7111c2b812648a6df3241ee1a3a807", + "s20.R1.fq.gz:md5,32144c46d24d5c264d98be49b8d8fb1d", + "s20.R2.fq.gz:md5,585a1ff0e75a693c7464f6d0966c5fb9", + "s20.fastp.json:md5,98f0d732c90f5108d96bd3d690b55691", + "s20_1.fastp.fastq.gz:md5,32144c46d24d5c264d98be49b8d8fb1d", + "s20_1.fastp.fastq.gz.md5:md5,4dc0f3e4498df3c04d47574134acee60", + "s20_1.fastp.fastq.gz_fastqc_data.txt:md5,514e1cfcb754ace865ed1a059292caa2", + "s20_1.fastp.fastq.gz_summary.txt:md5,b3e709ce23ff76b8099aa6607888a25f", + "s20_2.fastp.fastq.gz:md5,585a1ff0e75a693c7464f6d0966c5fb9", + "s20_2.fastp.fastq.gz.md5:md5,777e375cbdfc81d449cb9d09574ab16a", + "s20_2.fastp.fastq.gz_fastqc_data.txt:md5,352c6eba7490dbeadd2e8bb528959e00", + "s20_2.fastp.fastq.gz_summary.txt:md5,0adc9b32fab9218bb96503ca98974579", + "s21.R1.fq.gz:md5,1e92094589206300ef884273ee9ee265", + "s21.R2.fq.gz:md5,9f9278e60ba2dd2c5bb14d021268c613", + "s21.fastp.json:md5,e718ebf18e43b2701cd41ff12590efac", + "s21_1.fastp.fastq.gz:md5,1e92094589206300ef884273ee9ee265", + "s21_1.fastp.fastq.gz.md5:md5,271cbfb8258b802dff135d0134f08896", + "s21_1.fastp.fastq.gz_fastqc_data.txt:md5,583f37c4d0b3c1cf70146638288259eb", + "s21_1.fastp.fastq.gz_summary.txt:md5,53521830e74bc2fda95746bd59e1b47a", + "s21_2.fastp.fastq.gz:md5,9f9278e60ba2dd2c5bb14d021268c613", + "s21_2.fastp.fastq.gz.md5:md5,bb1d568adb5761fbe58e7042753f7e6b", + "s21_2.fastp.fastq.gz_fastqc_data.txt:md5,4220408a8a49188293008705d99797d7", + "s21_2.fastp.fastq.gz_summary.txt:md5,9cac4c355b24c72774be49dc72b910c5", + "s22.R1.fq.gz:md5,5abfd96f6a1eb0391208fe7f4dcecade", + "s22.R2.fq.gz:md5,868ef4eb6ca676ed93d2389188ed3d81", + "s22.fastp.json:md5,8487379d87e761dad734a69cab1cfce9", + "s22_1.fastp.fastq.gz:md5,5abfd96f6a1eb0391208fe7f4dcecade", + "s22_1.fastp.fastq.gz.md5:md5,2545a5e84d10f130551c45ea29154dde", + "s22_1.fastp.fastq.gz_fastqc_data.txt:md5,903c86972bd98447069b8123bbd2ed2b", + "s22_1.fastp.fastq.gz_summary.txt:md5,dc7a13f5a1d35e0d58457fcf21ce6319", + "s22_2.fastp.fastq.gz:md5,868ef4eb6ca676ed93d2389188ed3d81", + "s22_2.fastp.fastq.gz.md5:md5,58ca118289a9f7836b4b7780099fb803", + "s22_2.fastp.fastq.gz_fastqc_data.txt:md5,6aa91feefd6ded02d5158132482f6f75", + "s22_2.fastp.fastq.gz_summary.txt:md5,7704ed026dbaf60ccb8426b5d122c53d", + "s23.R1.fq.gz:md5,0d0ec11e03749ac7a48d00a46781a74f", + "s23.R2.fq.gz:md5,3ca8a6141f9e4f9595a90075ac390e7f", + "s23.fastp.json:md5,8e007318d9f605f36a23f78b862e8e65", + "s23_1.fastp.fastq.gz:md5,0d0ec11e03749ac7a48d00a46781a74f", + "s23_1.fastp.fastq.gz.md5:md5,0aa820c87fa31d216678ad1e0a959351", + "s23_1.fastp.fastq.gz_fastqc_data.txt:md5,b80be522e8fc203353873b4293a1bd93", + "s23_1.fastp.fastq.gz_summary.txt:md5,fa0459c6f2d09851918d0746198011d7", + "s23_2.fastp.fastq.gz:md5,3ca8a6141f9e4f9595a90075ac390e7f", + "s23_2.fastp.fastq.gz.md5:md5,81b8b9414e34771045a38dd2f09fe1a1", + "s23_2.fastp.fastq.gz_fastqc_data.txt:md5,03581c6566f47f1d942e578f03f520ba", + "s23_2.fastp.fastq.gz_summary.txt:md5,15ddeefe82e3af35daf5254322c9abc6", + "s24.R1.fq.gz:md5,9af8ba800a69fc8637cfe864870bade7", + "s24.R2.fq.gz:md5,1e988f6a217b67271801f2041be5c66b", + "s24.fastp.json:md5,0dab2f8c10346eb08a11b8e201663cbb", + "s24_1.fastp.fastq.gz:md5,9af8ba800a69fc8637cfe864870bade7", + "s24_1.fastp.fastq.gz.md5:md5,cd24734dc26c7ea8ea3c21bdc77ff9c4", + "s24_1.fastp.fastq.gz_fastqc_data.txt:md5,09385a18735331295ec633a1d416cd70", + "s24_1.fastp.fastq.gz_summary.txt:md5,92d1c0ec63759b0ccf61354405d46fd4", + "s24_2.fastp.fastq.gz:md5,1e988f6a217b67271801f2041be5c66b", + "s24_2.fastp.fastq.gz.md5:md5,ec8374f3a49357468b421dd3c2f87801", + "s24_2.fastp.fastq.gz_fastqc_data.txt:md5,6c22195c538a12592e76d8a72d87d0a1", + "s24_2.fastp.fastq.gz_summary.txt:md5,8a378d9090f444a073769427286966e9", + "s2_1.fastp.fastq.gz:md5,e5a9598bef0d53087aa25530667ccf79", + "s2_1.fastp.fastq.gz.md5:md5,35ea1cf27f3ecf7013233b28fb479542", + "s2_1.fastp.fastq.gz_fastqc_data.txt:md5,cf1b2108b901417c545a4922f0bad7e7", + "s2_1.fastp.fastq.gz_summary.txt:md5,7033939b9cd1f10f378f62cce8f83f0b", + "s2_2.fastp.fastq.gz:md5,7cbede4e3e641207da50ebb96653d0df", + "s2_2.fastp.fastq.gz.md5:md5,376b241d56d27365a559e1c3ca3bdacb", + "s2_2.fastp.fastq.gz_fastqc_data.txt:md5,1815381c120dc27aa1cce557405b0375", + "s2_2.fastp.fastq.gz_summary.txt:md5,3abb4bf4dac99a045470c9fef3186bd7", + "s3.R1.fq.gz:md5,aa1fe4107eb39313f97c1c045a3a15ed", + "s3.R2.fq.gz:md5,22332ab06eed7ff915ec1ffba0100610", + "s3.fastp.json:md5,042a8f6af4755d36c35b5c1fc7311772", + "s3_1.fastp.fastq.gz:md5,aa1fe4107eb39313f97c1c045a3a15ed", + "s3_1.fastp.fastq.gz.md5:md5,f3deafacc172d00bfb62fddbd0eb17c3", + "s3_1.fastp.fastq.gz_fastqc_data.txt:md5,0b8a95b400e766a95d6d212bc581b6ef", + "s3_1.fastp.fastq.gz_summary.txt:md5,465ecf738d98d9054ebe710f94adf89e", + "s3_2.fastp.fastq.gz:md5,22332ab06eed7ff915ec1ffba0100610", + "s3_2.fastp.fastq.gz.md5:md5,b06cc80886e7c21e9acbff3be7b20c06", + "s3_2.fastp.fastq.gz_fastqc_data.txt:md5,b3cb5076eb6e22780051e66367f80469", + "s3_2.fastp.fastq.gz_summary.txt:md5,d2f5f7caf04eba3fa1a72dfc620b7324", + "s4.R1.fq.gz:md5,f6818e27d3118f66168b8af2f155f4b0", + "s4.R2.fq.gz:md5,c489acd3fd4775cb9a69053d4b26250f", + "s4.fastp.json:md5,6ddbd1bcbdfbd78abdfd01120938cccf", + "s4_1.fastp.fastq.gz:md5,f6818e27d3118f66168b8af2f155f4b0", + "s4_1.fastp.fastq.gz.md5:md5,a51cb41091933d7ea537e4eca66ee583", + "s4_1.fastp.fastq.gz_fastqc_data.txt:md5,c827cb223cd18868e986114b2b56aa11", + "s4_1.fastp.fastq.gz_summary.txt:md5,54c61ffda03c4aeaee055b43738bea8e", + "s4_2.fastp.fastq.gz:md5,c489acd3fd4775cb9a69053d4b26250f", + "s4_2.fastp.fastq.gz.md5:md5,5913f5cf971d04484e0473fc03e78a31", + "s4_2.fastp.fastq.gz_fastqc_data.txt:md5,c062a41b9578769e063655ee0410179d", + "s4_2.fastp.fastq.gz_summary.txt:md5,61f3820bf97c6b358d9e039266ac7691", + "s5.R1.fq.gz:md5,2c111ddbdc64a9f4a9fc7a27f2e2aaea", + "s5.R2.fq.gz:md5,6ae8e46cf5fa66f6998a72f15caa9c58", + "s5.fastp.json:md5,8826756e18132471c33d5d0ba3f6b17f", + "s5_1.fastp.fastq.gz:md5,2c111ddbdc64a9f4a9fc7a27f2e2aaea", + "s5_1.fastp.fastq.gz.md5:md5,7fffdc9a1785f132cf56800a269aa20d", + "s5_1.fastp.fastq.gz_fastqc_data.txt:md5,c54f90f7b4623bd3bdfe8580b277af0b", + "s5_1.fastp.fastq.gz_summary.txt:md5,cd6ae5046c4bef89115a98fc3b6a1282", + "s5_2.fastp.fastq.gz:md5,6ae8e46cf5fa66f6998a72f15caa9c58", + "s5_2.fastp.fastq.gz.md5:md5,bb1dfb34b2cfb26b5dbef8493eb4fdfe", + "s5_2.fastp.fastq.gz_fastqc_data.txt:md5,9df4fa82eb11393fb57d7c029c7ae327", + "s5_2.fastp.fastq.gz_summary.txt:md5,2fe1f212327441aa271f7f308270f3d2", + "s6.R1.fq.gz:md5,cc6c0fb00166827307c846c8e9661c47", + "s6.R2.fq.gz:md5,6d5556ca178aab7202cf860fff94f574", + "s6.fastp.json:md5,6a0c0339fed4eb4f7e5780b7fef079d2", + "s6_1.fastp.fastq.gz:md5,cc6c0fb00166827307c846c8e9661c47", + "s6_1.fastp.fastq.gz.md5:md5,81910b3afe48abf930d7623f94adf9f6", + "s6_1.fastp.fastq.gz_fastqc_data.txt:md5,f6dcd4caa543e6b9bd7f683c50d09a84", + "s6_1.fastp.fastq.gz_summary.txt:md5,babe9aa8373d25fd029fd0bd4c1bcdc2", + "s6_2.fastp.fastq.gz:md5,6d5556ca178aab7202cf860fff94f574", + "s6_2.fastp.fastq.gz.md5:md5,2417e2f3c914fa8f032afd8676b2d43d", + "s6_2.fastp.fastq.gz_fastqc_data.txt:md5,a0cfd6e5c6d000b54798aa7967b654d5", + "s6_2.fastp.fastq.gz_summary.txt:md5,1afa3915b57e51d56eb998af0c2121a8", + "s7.R1.fq.gz:md5,36ab856e02e7d1c17c3a122ec9179cbb", + "s7.R2.fq.gz:md5,0764aae83716030f4ea05cca5d4511a4", + "s7.fastp.json:md5,19d4c1d93cfddfe31c5be76dc0e1b50a", + "s7_1.fastp.fastq.gz:md5,36ab856e02e7d1c17c3a122ec9179cbb", + "s7_1.fastp.fastq.gz.md5:md5,6942c45c37a57407853cfcbef1a7576e", + "s7_1.fastp.fastq.gz_fastqc_data.txt:md5,a8f1a1249da32dc1bafe64ef11ff333e", + "s7_1.fastp.fastq.gz_summary.txt:md5,5ff0936a3b19a6cba43d74c59a4ffbfa", + "s7_2.fastp.fastq.gz:md5,0764aae83716030f4ea05cca5d4511a4", + "s7_2.fastp.fastq.gz.md5:md5,08bbbd69fc3ee7df14b33947f3265790", + "s7_2.fastp.fastq.gz_fastqc_data.txt:md5,4eda9a3f2a829184adbb61fcea58f6b4", + "s7_2.fastp.fastq.gz_summary.txt:md5,5d47846f21b5fe4e8b05cdd054f6a91b", + "s8.R1.fq.gz:md5,f37f97582eafb96aae79a1d635e4585e", + "s8.R2.fq.gz:md5,b5e48a29663e3e92354794290e2ba419", + "s8.fastp.json:md5,bad705ea8bbd9957d3a1bb831b2966c2", + "s8_1.fastp.fastq.gz:md5,f37f97582eafb96aae79a1d635e4585e", + "s8_1.fastp.fastq.gz.md5:md5,530292bf972cf1b4b234fc40ae40e402", + "s8_1.fastp.fastq.gz_fastqc_data.txt:md5,9769a7bce94f65c7eb7d0a64f00607b5", + "s8_1.fastp.fastq.gz_summary.txt:md5,a65831285ff1b417c72dd20fe7393ad0", + "s8_2.fastp.fastq.gz:md5,b5e48a29663e3e92354794290e2ba419", + "s8_2.fastp.fastq.gz.md5:md5,ec862cc5d2cc18be996a8a38b4052d87", + "s8_2.fastp.fastq.gz_fastqc_data.txt:md5,065d4208b7d2c0162b71e47a673b6cd7", + "s8_2.fastp.fastq.gz_summary.txt:md5,821bbcf71f1e5e568aee2e8ac5788305", + "s9.R1.fq.gz:md5,42e79f8a4e8db043b76782538982d1ea", + "s9.R2.fq.gz:md5,d3af5fce6432934a479770f16c8f50b1", + "s9.fastp.json:md5,a961c9be7ef88ae4bc188809d6383842", + "s9_1.fastp.fastq.gz:md5,42e79f8a4e8db043b76782538982d1ea", + "s9_1.fastp.fastq.gz.md5:md5,9ba7d8112363ed1de4e542e458ad02fa", + "s9_1.fastp.fastq.gz_fastqc_data.txt:md5,861216d8769fcf246198ce71e550c50d", + "s9_1.fastp.fastq.gz_summary.txt:md5,47a130225685bbfde4f1f0a285a1f380", + "s9_2.fastp.fastq.gz:md5,d3af5fce6432934a479770f16c8f50b1", + "s9_2.fastp.fastq.gz.md5:md5,35b322363f80b060c3c79b6d21448661", + "s9_2.fastp.fastq.gz_fastqc_data.txt:md5,44ac3768c508a14eea3756ed88271d96", + "s9_2.fastp.fastq.gz_summary.txt:md5,d6c912c1a073a7b0df9c1c3e00b1b814", + "unmatched.R1.fq.gz:md5,8f77e8d5adc4b16dd499fe3bd092f66d", + "unmatched.R2.fq.gz:md5,a2c623dcaa11fe3faaecc563c376f24b", + "unmatched.fastp.json:md5,4f4f375bc6fef5880d843df77ae2d5f1", + "unmatched_1.fastp.fastq.gz:md5,8f77e8d5adc4b16dd499fe3bd092f66d", + "unmatched_1.fastp.fastq.gz.md5:md5,5b5876132b859c7dc6558bc63b24f8bf", + "unmatched_1.fastp.fastq.gz_fastqc_data.txt:md5,03d2a927a8850e90f4401c5e7cb469ec", + "unmatched_1.fastp.fastq.gz_summary.txt:md5,8f82f5c293be99943424dd66ebc74627", + "unmatched_2.fastp.fastq.gz:md5,a2c623dcaa11fe3faaecc563c376f24b", + "unmatched_2.fastp.fastq.gz.md5:md5,ea51457970db5e6690a0f76cd2b6be85", + "unmatched_2.fastp.fastq.gz_fastqc_data.txt:md5,ba1ff6c0e111ebdb3a269a3add145ae6", + "unmatched_2.fastp.fastq.gz_summary.txt:md5,202c2d50118198e29ead032008eab7d6" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:12:13.420210238" + }, + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:37:09.37721135" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:37:07.737922949" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:37:11.05337654" + } +} \ No newline at end of file diff --git a/tests/functions/demultiplex.nf.test b/tests/functions/demultiplex.nf.test deleted file mode 100644 index 97c42247..00000000 --- a/tests/functions/demultiplex.nf.test +++ /dev/null @@ -1,35 +0,0 @@ -nextflow_function { - - name "Test Functions" - script "workflows/demultiplex.nf" - - // TODO test("Test Function summary_params = NfcoreSchema.paramsSummaryMap") - - test("Test Function extract_csv") { - - function "extract_csv" - - when { - function { - """ - input[0] = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - """ - } - } - - then { - // FIXME - assert function.failed - assert snapshot(function.result).match() - } - - } - - // TODO test("Test Function all_columns = input_schema.columns.keySet().collect") - // TODO test("Test Function commons = all_columns.intersect") - // TODO test("Test Function diffs = all_columns.plus") - // TODO test("Test Function parse_flowcell_csv") - // TODO test("Test Function flowcell = file") - // TODO test("Test Function samplesheet = file") - -} diff --git a/tests/functions/demultiplex.nf.test.snap b/tests/functions/demultiplex.nf.test.snap deleted file mode 100644 index 81b1a55b..00000000 --- a/tests/functions/demultiplex.nf.test.snap +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Test Function extract_csv": { - "content": null, - "timestamp": "2023-06-05T10:39:32+0000" - } -} \ No newline at end of file diff --git a/tests/kraken.nf.test b/tests/kraken.nf.test new file mode 100644 index 00000000..763df39b --- /dev/null +++ b/tests/kraken.nf.test @@ -0,0 +1,46 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - Kraken" + script "../main.nf" + config "../conf/test_kraken.config" + profile "test" + tag "kraken" + tag "pipeline" + + test("kraken2") { + + when { + params { + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' + demultiplexer = 'bcl2fastq' + outdir = "$outputDir" + skip_tools = "checkqc,samshee" + kraken_db = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/db/kraken2.tar.gz' + + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/kraken.nf.test.snap b/tests/kraken.nf.test.snap new file mode 100644 index 00000000..7d333dd5 --- /dev/null +++ b/tests/kraken.nf.test.snap @@ -0,0 +1,292 @@ +{ + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:38:36.921696486" + }, + "kraken2": { + "content": [ + 11, + { + "BCL2FASTQ": { + "bcl2fastq": "2.20.0.422" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "KRAKEN2": { + "kraken2": "2.1.3", + "pigz": 2.8 + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/all/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/all/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/all/all/unknown", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/all/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/all/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/unknown", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/unknown/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/Sample1/unknown/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/all", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/all/lane.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/all/laneBarcode.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/000000000-K9H97/default/all/unknown", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/Report.css", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/index.html", + "220422_M11111_0222_000000000-K9H97/L001/Reports/html/tree.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.json", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.kraken2.report.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_Sample1_S1_L001.fastp.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats", + "220422_M11111_0222_000000000-K9H97/L001/Stats/AdapterTrimming.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats/ConversionStats.xml", + "220422_M11111_0222_000000000-K9H97/L001/Stats/DemultiplexingStats.xml", + "220422_M11111_0222_000000000-K9H97/L001/Stats/DemuxSummaryF1L1.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats/FastqSummaryF1L1.txt", + "220422_M11111_0222_000000000-K9H97/L001/Stats/Stats.json", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bcl2fastq-lane-stats-table.txt", + "multiqc/multiqc_data/bcl2fastq_lane_counts.txt", + "multiqc/multiqc_data/bcl2fastq_sample_counts.txt", + "multiqc/multiqc_data/bcl2fastq_undetermined.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/kraken-top-n-plot.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bcl2fastq_bylane.txt", + "multiqc/multiqc_data/multiqc_bcl2fastq_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_kraken.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_sample_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_sample_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_undetermined-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_undetermined-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot-pct.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bcl2fastq-lane-stats-table.png", + "multiqc/multiqc_plots/png/bcl2fastq_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bcl2fastq_sample_counts-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_sample_counts-pct.png", + "multiqc/multiqc_plots/png/bcl2fastq_undetermined-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_undetermined-pct.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot-pct.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bcl2fastq-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_sample_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_sample_counts-pct.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_undetermined-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_undetermined-pct.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot-pct.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Report.css:md5,eb7d3eb68fc1539f411404987246b59b", + "index.html:md5,5747c407854ae2c358d0ec201ce622d8", + "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34", + "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", + "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", + "Sample1_S1_L001.fastp.json:md5,d9d2d702f3c64412a04cd0768863b1ab", + "Sample1_S1_L001.kraken2.report.txt:md5,726f60beda853ebb9134f6a712c4196b", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_Sample1_S1_L001.fastp.fastq.gz:md5,53bf34dad1f8269eeed36e661ef036fb", + "Sample1_S1_L001_fastqc_data.txt:md5,0adf4e2617f55fabba0663583c1f65b7", + "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", + "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946", + "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad", + "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1", + "bcl2fastq-lane-stats-table.txt:md5,d0e821a9c0ccf7da808c5dd05e99ddc2", + "bcl2fastq_lane_counts.txt:md5,9404ab530f43e442093337dd10c351c5", + "bcl2fastq_sample_counts.txt:md5,93cb0cd1aee1b464f0e640e1c3d0c142", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,8105d4ce1d752e1f8a26e4291e8d9c6c", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,0ac68e41c4de8ca35a1cd6ee7c6cb3f3", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,1701b40c23dca068210f5410788e3be1", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,35de9aebdc467b1bbc9fd1f40d3aece4", + "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", + "fastqc_per_base_n_content_plot.txt:md5,d7db99124db8f53d82c51c779ce77463", + "fastqc_per_base_sequence_quality_plot.txt:md5,31c51bbd7d4dbb32107efa95c8a58ee5", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,842eaa1c62a8e6676b4b07226bda998b", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b231390d458d0bfdf4fa1360a776e03c", + "fastqc_per_sequence_quality_scores_plot.txt:md5,edbe64e0545cb866af73a649349d2a42", + "fastqc_sequence_counts_plot.txt:md5,662c69090978601ca7d39504b1ac736b", + "fastqc_sequence_duplication_levels_plot.txt:md5,cc02a5151984c0a9fdf8316bfb05088b", + "kraken-top-n-plot.txt:md5,add0b89a8b3d1729dac311870959b1e7", + "multiqc_bcl2fastq_bysample.txt:md5,baaa56d8315c18633f6ce6568d6f0657", + "multiqc_citations.txt:md5,97f1dcb4348072ce2865c29c5c306a3d", + "multiqc_kraken.txt:md5,a90fd69786a0df1e43b948e423545654" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:13:52.447688832" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:38:31.625158785" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:38:42.216897057" + } +} \ No newline at end of file diff --git a/tests/lib/UTILS.groovy b/tests/lib/UTILS.groovy new file mode 100644 index 00000000..2e31d28e --- /dev/null +++ b/tests/lib/UTILS.groovy @@ -0,0 +1,54 @@ +// Function to verify paths in downstream samplesheets + +import java.nio.file.* + + +class UTILS{ + public static boolean validateFastqPaths(Object csvFilePath) { + String path = csvFilePath.toString() // Convert GString or any other type to String + def csvFile = new File(path) + + if (!csvFile.exists()) { + throw new FileNotFoundException("CSV file not found at: $path") + } + + // Define allowed column names + def allowedColumns = ["sample", "fastq_1", "fastq_2", "strandedness", "replicate","fasta"] + + csvFile.withReader { reader -> + // Read the header and trim quotes + def header = reader.readLine().split(",").collect { it.replaceAll('"', '').trim() } + def fastq1Index = header.indexOf("fastq_1") + def fastq2Index = header.indexOf("fastq_2") + + // Check for the presence of 'fastq_1' column + if (fastq1Index == -1) { + throw new IllegalArgumentException("CSV file '$csvFile.name' does not contain a 'fastq_1' column.") + } + + // Check for valid column names + header.each { column -> + if (!allowedColumns.contains(column)) { + throw new IllegalArgumentException("Invalid column name: '$column' in downstream samplesheet file '$csvFile.name'. Allowed columns are: ${allowedColumns.join(', ')}.") + } + } + + reader.eachLine { line -> + def columns = line.split(",").collect { it.replaceAll('"', '').trim() } + def fastq1Path = columns[fastq1Index] + def fastq2Path = fastq2Index != -1 ? columns[fastq2Index] : null // Use null if fastq_2 is not present + + // Check if fastq_1 path is valid + if (!Files.exists(Paths.get(fastq1Path))) { + throw new FileNotFoundException("Incorrect R1 fastq file path: '$fastq1Path' in downstream samplesheet file '$csvFile.name'") // Raise error for fastq_1 + } + + // Check if fastq_2 path is valid if it exists + if (fastq2Path && !Files.exists(Paths.get(fastq2Path))) { + throw new FileNotFoundException("Incorrect R2 fastq file path: '$fastq2Path' in downstream samplesheet file '$csvFile.name'") // Raise error for fastq_2 + } + } + } + return true // All paths are valid if we reach this point + } +} diff --git a/tests/mkfastq.nf.test b/tests/mkfastq.nf.test new file mode 100644 index 00000000..9e94f851 --- /dev/null +++ b/tests/mkfastq.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - mkfastq" + script "../main.nf" + profile "test_mkfastq" + tag "mkfastq" + tag "pipeline" + + test("MKFASTQ") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/mkfastq.nf.test.snap b/tests/mkfastq.nf.test.snap new file mode 100644 index 00000000..b9fbce79 --- /dev/null +++ b/tests/mkfastq.nf.test.snap @@ -0,0 +1,236 @@ +{ + "MKFASTQ": { + "content": [ + 11, + { + "CELLRANGER_MKFASTQ": { + "cellranger": "8.0.0" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "UNTAR_FLOWCELL": { + "untar": 1.34 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "cellranger-tiny-bcl-simple", + "cellranger-tiny-bcl-simple.lane1_no_adapters.csv", + "cellranger-tiny-bcl-simple/InterOp", + "cellranger-tiny-bcl-simple/InterOp/IndexMetricsOut.bin", + "cellranger-tiny-bcl-simple/L001", + "cellranger-tiny-bcl-simple/L001/Reports", + "cellranger-tiny-bcl-simple/L001/Reports/html", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/all/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/all/all/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/all/all/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default/Undetermined", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default/Undetermined/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default/Undetermined/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default/all/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/default/all/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/all/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/all/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S1", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S1/AGATCGGT", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S1/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S1/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S2", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S2/CATCGTCG", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S2/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S2/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S3", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S3/GTCATATA", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S3/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S3/unknown", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S4", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S4/TCGGACAC", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S4/all", + "cellranger-tiny-bcl-simple/L001/Reports/html/H35KCBCXY/p1/test_sample_S4/unknown", + "cellranger-tiny-bcl-simple/L001/Stats", + "cellranger-tiny-bcl-simple/L001/Stats/AdapterTrimming.txt", + "cellranger-tiny-bcl-simple/L001/Stats/ConversionStats.xml", + "cellranger-tiny-bcl-simple/L001/Stats/DemultiplexingStats.xml", + "cellranger-tiny-bcl-simple/L001/Stats/DemuxSummaryF1L1.txt", + "cellranger-tiny-bcl-simple/L001/Stats/FastqSummaryF1L1.txt", + "cellranger-tiny-bcl-simple/L001/Stats/Stats.json", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001.fastp.html", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001.fastp.json", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_1.fastp.fastq.gz", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_1.fastp.fastq.gz.md5", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_2.fastp.fastq.gz", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_2.fastp.fastq.gz.md5", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.fastq.gz", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.fastq.gz.md5", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.html", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.json", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastq.gz", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_R1_001.fastq.gz", + "cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_R2_001.fastq.gz", + "cellranger-tiny-bcl-simple/L001/undetermined", + "cellranger-tiny-bcl-simple/L001/undetermined/Undetermined_S0_L001_I1_001.fastq.gz", + "cellranger-tiny-bcl-simple/L001/undetermined/Undetermined_S0_L001_R1_001.fastq.gz", + "cellranger-tiny-bcl-simple/L001/undetermined/Undetermined_S0_L001_R2_001.fastq.gz", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "cellranger-tiny-bcl-simple.lane1_no_adapters.csv:md5,86a945ab9d579c7bc98d43f76a07118b", + "IndexMetricsOut.bin:md5,e2ac28695537336b53a509f48e93ed1f", + "AdapterTrimming.txt:md5,522b8c57ed2a84da31ec3edda9424b60", + "DemultiplexingStats.xml:md5,60cce68e6a27371dc257ca9f65e14cc1", + "FastqSummaryF1L1.txt:md5,876f188644f5e12eca513baeff158306", + "test_sample_S1_L001.fastp.json:md5,e4321caea21d0c44d0d7269065bdb79d", + "test_sample_S1_L001_1.fastp.fastq.gz:md5,b348491a3b1afa096fde514dbdf55215", + "test_sample_S1_L001_1.fastp.fastq.gz.md5:md5,43d7882f3aaae47b56df56da6c802236", + "test_sample_S1_L001_2.fastp.fastq.gz:md5,1c60f1f3958b8b2b0255b9fae6df0b3d", + "test_sample_S1_L001_2.fastp.fastq.gz.md5:md5,01d742cc56639c476b0bac0c094eba4b", + "test_sample_S1_L001_I1_001.fastp.fastq.gz.md5:md5,82e397b4a2418f27269a30f6ca0e349e", + "test_sample_S1_L001_I1_001.fastp.json:md5,b5368b3125c35f7a5dfa2d273cd79c32", + "test_sample_S1_L001_I1_001.fastq.gz:md5,018b0dbd8daf76fb9f6dfa4729ea0453", + "test_sample_S1_L001_R1_001.fastq.gz:md5,df3ddf85d83bd722219c646c7815dbdc", + "test_sample_S1_L001_R2_001.fastq.gz:md5,c8a387b517ff5b7e56b85ccbf882efd2", + "Undetermined_S0_L001_I1_001.fastq.gz:md5,c93946d67bdb1d5b2ab955fd1dc9cb31", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,faa79ce215ae72fdc3375cda066c6757", + "Undetermined_S0_L001_R2_001.fastq.gz:md5,d8955db4dfbf7aee89b6bdc3b7629f8f", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,5953425f014393290207576aa56e6d42", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,3c7730e3eeb0e2524b0a84b082c19040", + "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,02ba2b6de08816bb4ae6aa68790290bf", + "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,02f72985d3e63dd7382ae44615b14a96", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,377a3c1c7416bcf46ca32fd2582dac6c", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,8090c7fcc95f4c5527d6ba2787df6a5c", + "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,cb5e811b235ec03db4df0f8872a1ae31", + "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,cb5e811b235ec03db4df0f8872a1ae31", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,4138bccdf99f1a2ccb3cee0fc1552aee", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,701d4a7b730bbd3e8b457fa2b1264854", + "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,d6fc359d4e2be31d802b8553bcf5af93", + "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,e80f62d45ca21cacbd19f899f768c308", + "fastp_filtered_reads_plot.txt:md5,39d2e637c3e1482821c62c00482c8421", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:16:10.021030199" + }, + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:40:09.552438955" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:39:54.928437506" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:40:24.166541035" + } +} \ No newline at end of file diff --git a/tests/pipeline/bases2fastq.nf.test b/tests/pipeline/bases2fastq.nf.test deleted file mode 100644 index 7a92b9d3..00000000 --- a/tests/pipeline/bases2fastq.nf.test +++ /dev/null @@ -1,40 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - BASES2FASTQ" - script "main.nf" - profile "test_bases2fastq" - tag "bases2fastq" - tag "pipeline" - - test("Bases2Fastq") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 8 }, - { assert snapshot( - // FIXME - // path("$outputDir/sim-data/DefaultSample_R1.fastq.gz.md5"), - // path("$outputDir/sim-data/DefaultSample_R2.fastq.gz.md5"), - path("$outputDir/sim-data/Metrics.csv"), - path("$outputDir/sim-data/UnassignedSequences.csv"), - path("$outputDir/sim-data/Samples/DefaultProject/DefaultSample/DefaultSample_R1.fastq.gz"), - path("$outputDir/sim-data/Samples/DefaultProject/DefaultSample/DefaultSample_R2.fastq.gz") - ).match("bases2fastq") }, - { assert new File("$outputDir/sim-data/20230404-Bases2Fastq-Sim_QC.html").exists() }, - { assert new File("$outputDir/sim-data/RunStats.json").exists() }, - { assert new File("$outputDir/sim-data/Samples/DefaultProject/DefaultSample/DefaultSample_stats.json").exists() }, - { assert new File("$outputDir/sim-data/RunManifest.json").exists() } - ) - } - - } - -} diff --git a/tests/pipeline/bases2fastq.nf.test.snap b/tests/pipeline/bases2fastq.nf.test.snap deleted file mode 100644 index fe10d197..00000000 --- a/tests/pipeline/bases2fastq.nf.test.snap +++ /dev/null @@ -1,25 +0,0 @@ -{ - "software_versions": { - "content": [ - "{BASES2FASTQ={bases2fastq=1.8.0.1260801529, use subject to license available at elementbiosciences.com}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, UNTAR_FLOWCELL={untar=1.34}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.1" - }, - "timestamp": "2024-08-06T15:54:30.10412" - }, - "bases2fastq": { - "content": [ - "Metrics.csv:md5,ad7af77573845924062e2554cc641b16", - "UnassignedSequences.csv:md5,11c1693830ce941b8cfb8d2431a59097", - "DefaultSample_R1.fastq.gz:md5,6c73b924e4eb53b716614aa6fd8b791a", - "DefaultSample_R2.fastq.gz:md5,54e2c0894844e42605b7cd567b1c7dbe" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.1" - }, - "timestamp": "2024-08-06T15:54:30.125104" - } -} diff --git a/tests/pipeline/bcl2fastq.nf.test b/tests/pipeline/bcl2fastq.nf.test deleted file mode 100644 index 312ff522..00000000 --- a/tests/pipeline/bcl2fastq.nf.test +++ /dev/null @@ -1,39 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - BCL2FASTQ" - script "main.nf" - profile "test_bcl2fastq" - tag "bcl2fastq" - tag "pipeline" - - test("Bcl2Fastq") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 6 }, - { assert snapshot( - path("$outputDir/multiqc/multiqc_data/bcl2fastq_lane_counts.txt"), - path("$outputDir/multiqc/multiqc_data/fastp_filtered_reads_plot.txt"), - path("$outputDir/multiqc/multiqc_data/bcl2fastq_sample_counts.txt") - ).match("multiqc") }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Stats/").list() - ).match("bcl2fastq") } - ) - } - - } - -} diff --git a/tests/pipeline/bcl2fastq.nf.test.snap b/tests/pipeline/bcl2fastq.nf.test.snap deleted file mode 100644 index f819eb72..00000000 --- a/tests/pipeline/bcl2fastq.nf.test.snap +++ /dev/null @@ -1,85 +0,0 @@ -{ - "software_versions": { - "content": [ - "{BCL2FASTQ={bcl2fastq=2.20.0.422}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-08T20:43:41.988053048" - }, - "bcl2fastq": { - "content": [ - "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", - [ - [ - [ - [ - [ - [ - "lane.html:md5,794e48287f47a9f22dcb6b6d0c22c3eb", - "laneBarcode.html:md5,2bbdae3ee57151eab520c966597d7438" - ], - [ - - ] - ] - ], - [ - [ - [ - "lane.html:md5,f741870307050dcea79a838f5971770f", - "laneBarcode.html:md5,ffe2e863811c76cb9da27d5d124e0611" - ], - [ - "lane.html:md5,cca97e771d3491dbc8cd3fe389595b09", - "laneBarcode.html:md5,cca97e771d3491dbc8cd3fe389595b09" - ] - ], - [ - [ - "lane.html:md5,c383b0768d9978733d3f5d3b91c15af0", - "laneBarcode.html:md5,48842c23b9a2816aec540177df870968" - ], - [ - - ] - ] - ] - ], - "Report.css:md5,eb7d3eb68fc1539f411404987246b59b", - "index.html:md5,5747c407854ae2c358d0ec201ce622d8", - "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34" - ] - ], - [ - "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946", - "ConversionStats.xml:md5,8fe0f57f3f5d256a0762dba75ac62d05", - "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad", - "DemuxSummaryF1L1.txt:md5,03e5fd0c1e3079c5f8c7b4d0501b37ff", - "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1", - "Stats.json:md5,8e5f038b8aa9e465599d3575f930e604" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-08T20:43:42.035230933" - }, - "multiqc": { - "content": [ - "bcl2fastq_lane_counts.txt:md5,9404ab530f43e442093337dd10c351c5", - "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", - "bcl2fastq_sample_counts.txt:md5,93cb0cd1aee1b464f0e640e1c3d0c142" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-08T20:43:42.016587995" - } -} diff --git a/tests/pipeline/bclconvert.nf.test b/tests/pipeline/bclconvert.nf.test deleted file mode 100644 index ab3d93d0..00000000 --- a/tests/pipeline/bclconvert.nf.test +++ /dev/null @@ -1,39 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - BCLCONVERT" - script "main.nf" - profile "test" - tag "bclconvert" - tag "pipeline" - - test("BCL-CONVERT") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 6 }, - { assert snapshot( - path("$outputDir/multiqc/multiqc_data/bclconvert_lane_counts.txt"), - path("$outputDir/multiqc/multiqc_data/fastp_filtered_reads_plot.txt"), - path("$outputDir/multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt") - ).match("multiqc") }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - ).match("bclconvert") } - ) - } - - } - -} diff --git a/tests/pipeline/bclconvert.nf.test.snap b/tests/pipeline/bclconvert.nf.test.snap deleted file mode 100644 index 570ef214..00000000 --- a/tests/pipeline/bclconvert.nf.test.snap +++ /dev/null @@ -1,51 +0,0 @@ -{ - "bclconvert": { - "content": [ - "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", - "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", - "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", - "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", - "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", - "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", - "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", - "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", - "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", - "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.1" - }, - "timestamp": "2024-08-07T15:04:02.812091" - }, - "software_versions": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-25T20:31:51.596302017" - }, - "multiqc": { - "content": [ - "bclconvert_lane_counts.txt:md5,a327047d0d6c7de32eef9535bb159110", - "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", - "bclconvert_sample_counts_Counts_per_lane.txt:md5,a7e57ab911ba2cf74ec7bd93b921036d" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-02T20:50:32.184940324" - } -} diff --git a/tests/pipeline/bclconvert_mini.nf.test b/tests/pipeline/bclconvert_mini.nf.test deleted file mode 100644 index 6f947349..00000000 --- a/tests/pipeline/bclconvert_mini.nf.test +++ /dev/null @@ -1,55 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - BCLCONVERT-mini" - script "main.nf" - profile "test_bclconvert" - tag "bclconvert" - tag "pipeline" - - test("BCL-CONVERT-mini") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 26 }, - { assert snapshot( - path("$outputDir/multiqc/multiqc_data/bclconvert_lane_counts.txt"), - path("$outputDir/multiqc/multiqc_data/fastp_filtered_reads_plot.txt"), - path("$outputDir/multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt") - ).match("multiqc") }, - { assert snapshot( - path("$outputDir/miniseq_truseq_smrna/HBRR1_S1_L001.fastp.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/HBRR1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/HBRR1_S1_L001_summary.txt"), - path("$outputDir/miniseq_truseq_smrna/HBRR2_S2_L001.fastp.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/HBRR2_S2_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/HBRR2_S2_L001_summary.txt"), - path("$outputDir/miniseq_truseq_smrna/HBRR3_S3_L001.fastp.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/HBRR3_S3_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/HBRR3_S3_L001_summary.txt"), - path("$outputDir/miniseq_truseq_smrna/UHRR1_S4_L001.fastp.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/UHRR1_S4_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/UHRR1_S4_L001_summary.txt"), - path("$outputDir/miniseq_truseq_smrna/UHRR2_S5_L001.fastp.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/UHRR2_S5_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/UHRR2_S5_L001_summary.txt"), - path("$outputDir/miniseq_truseq_smrna/UHRR3_S6_L001.fastp.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/UHRR3_S6_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/UHRR3_S6_L001_summary.txt"), - path("$outputDir/miniseq_truseq_smrna/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/miniseq_truseq_smrna/Reports/").list(), - path("$outputDir/miniseq_truseq_smrna/InterOp/").list() - ).match("bclconvert") } - ) - } - - } - -} diff --git a/tests/pipeline/bclconvert_mini.nf.test.snap b/tests/pipeline/bclconvert_mini.nf.test.snap deleted file mode 100644 index f837a605..00000000 --- a/tests/pipeline/bclconvert_mini.nf.test.snap +++ /dev/null @@ -1,83 +0,0 @@ -{ - "bclconvert": { - "content": [ - "HBRR1_S1_L001.fastp.fastq.gz:md5,451657490d4816dd5ff904e34ecc7fdf", - "HBRR1_S1_L001_R1_001.fastq.gz:md5,451657490d4816dd5ff904e34ecc7fdf", - "HBRR1_S1_L001_summary.txt:md5,53a5e6bac1e853f23d27d6966e52df81", - "HBRR2_S2_L001.fastp.fastq.gz:md5,3b9e4fc70ebc608b48d1f0027265e9b8", - "HBRR2_S2_L001_R1_001.fastq.gz:md5,3b9e4fc70ebc608b48d1f0027265e9b8", - "HBRR2_S2_L001_summary.txt:md5,f3e0bc27d30d0f6e10ad76be47017881", - "HBRR3_S3_L001.fastp.fastq.gz:md5,a110eefaee1da4d99398500e55919f0c", - "HBRR3_S3_L001_R1_001.fastq.gz:md5,a110eefaee1da4d99398500e55919f0c", - "HBRR3_S3_L001_summary.txt:md5,fbe9c4281a768a826429e328f5eb2a34", - "UHRR1_S4_L001.fastp.fastq.gz:md5,03f215bcb4005804f60acccfe4aaef78", - "UHRR1_S4_L001_R1_001.fastq.gz:md5,b470c82d2002c563c42786060ae364b9", - "UHRR1_S4_L001_summary.txt:md5,c6c342cbcad3fc68343284c24e4a8b4a", - "UHRR2_S5_L001.fastp.fastq.gz:md5,2186d5f37865f970d223953e9a5412ae", - "UHRR2_S5_L001_R1_001.fastq.gz:md5,47c36adf557bf4d37b0a84d055125290", - "UHRR2_S5_L001_summary.txt:md5,121a0aeaf860fae497a27e8eceff3283", - "UHRR3_S6_L001.fastp.fastq.gz:md5,674c4989c2270d88612fcf221e3e0950", - "UHRR3_S6_L001_R1_001.fastq.gz:md5,bdb407e3ded3691479ec25f5f1df3b07", - "UHRR3_S6_L001_summary.txt:md5,d7d5a014b51d64e4da1a113a4ad79eda", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,b0b4daae001636cf033ff760a5ab479d", - [ - "Adapter_Cycle_Metrics.csv:md5,757778bb0ee048463c423dff14133a51", - "Adapter_Metrics.csv:md5,5cbba841c650097f1e759c2b75c7a005", - "Demultiplex_Stats.csv:md5,40c3efd7ffb9d02fcc97028f6ee98c96", - "Demultiplex_Tile_Stats.csv:md5,916e3e488c4ed847249d7d46401a57ff", - "IndexMetricsOut.bin:md5,9a6ad90fd45b3abd2360285feff76509", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,215e001631d9383f73360975d5726f14", - "Quality_Tile_Metrics.csv:md5,122f967d30318f79f5a7ef59339f8275", - "RunInfo.xml:md5,d3d94b916915b35224ec362c64542190", - "SampleSheet.csv:md5,c32433167a5c56d5c15952c2e7948898", - "Top_Unknown_Barcodes.csv:md5,b5fa3ea9ba12fd35650e36e6c5cbdc99", - "fastq_list.csv:md5,07cbe4173e18cbdef16ee8feb4adaf7d" - ], - [ - "CorrectedIntMetricsOut.bin:md5,4d82e208f18bfd51a5f9275e05d073ba", - "EmpiricalPhasingMetricsOut.bin:md5,0e9d6b71c90661d800b1129a0097c301", - "ErrorMetricsOut.bin:md5,dbc41ced845d7645451c6995e5774c0b", - "EventMetricsOut.bin:md5,5a93a812df6a55e6d7a0f26bdf176e93", - "ExtendedTileMetricsOut.bin:md5,5ffaee26c4ed0074f69d8c62293118f9", - "ExtractionMetricsOut.bin:md5,a4d4c0d3b9afe453fae7ca6118c9346d", - "FWHMGridMetricsOut.bin:md5,80e7c3652f72edbc5f661a1f1b3b28fc", - "ImageMetricsOut.bin:md5,2dddf68f924261ab37f83e8ee750b6f2", - "IndexMetricsOut.bin:md5,e63ea5cfa848feab8a40ba469ff46845", - "PFGridMetricsOut.bin:md5,e65fed6f9594655657521a5359759b01", - "QMetrics2030Out.bin:md5,670b3c089d4d264103a01105d12abbe8", - "QMetricsByLaneOut.bin:md5,b6d8d8ff4144f33a3f4304743db53f97", - "QMetricsOut.bin:md5,13fee543cefb5d5ae1c108ccbb07f0e6", - "RegistrationMetricsOut.bin:md5,b201979275957afbbcea634698afc352", - "TileMetricsOut.bin:md5,0d2aa2c7e39eb33e61d2ed248068ed9d" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-30T15:27:18.543806" - }, - "software_versions": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-03T12:19:24.67962222" - }, - "multiqc": { - "content": [ - "bclconvert_lane_counts.txt:md5,32e8acea6fd6ef76943100329be22fee", - "fastp_filtered_reads_plot.txt:md5,8ab004632691b04b665920977beb8924", - "bclconvert_sample_counts_Counts_per_lane.txt:md5,2eb58439a3eb1eee508bdce0ee340649" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-03T12:19:24.749587693" - } -} diff --git a/tests/pipeline/fqtk.nf.test b/tests/pipeline/fqtk.nf.test deleted file mode 100644 index 97dbd755..00000000 --- a/tests/pipeline/fqtk.nf.test +++ /dev/null @@ -1,75 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - FQTK" - script "main.nf" - profile "test_fqtk" - tag "fqtk" - - test("FQTK") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 129 }, - { assert snapshot(path("$outputDir/test/demux-metrics.txt")).match("fqtk") }, - { assert new File("$outputDir/test/unmatched_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/unmatched_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s10_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s10_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s11_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s11_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s12_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s12_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s13_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s13_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s14_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s14_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s15_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s15_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s16_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s16_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s17_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s17_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s18_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s18_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s19_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s19_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s1_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s1_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s20_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s20_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s21_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s21_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s22_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s22_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s23_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s23_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s24_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s24_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s2_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s2_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s3_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s3_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s4_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s4_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s5_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s5_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s6_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s6_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s7_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s7_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s8_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s8_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s9_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/test/s9_2.fastp.fastq.gz").exists() } - ) - } - } -} diff --git a/tests/pipeline/fqtk.nf.test.snap b/tests/pipeline/fqtk.nf.test.snap deleted file mode 100644 index 005b38ff..00000000 --- a/tests/pipeline/fqtk.nf.test.snap +++ /dev/null @@ -1,22 +0,0 @@ -{ - "fqtk": { - "content": [ - "demux-metrics.txt:md5,1d587fa959f9129155314cf531103347" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2023-10-17T08:06:53+0000" - }, - "software_versions": { - "content": [ - "{CSV2TSV={sed=4.8}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, FQTK={fqtk=0.2.1}, MD5SUM={md5sum=8.3}, UNTAR_FLOWCELL={untar=1.34}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.0" - }, - "timestamp": "2024-08-02T19:57:17.122084549" - } -} diff --git a/tests/pipeline/kraken.nf.test b/tests/pipeline/kraken.nf.test deleted file mode 100644 index 0ee43998..00000000 --- a/tests/pipeline/kraken.nf.test +++ /dev/null @@ -1,47 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - Kraken" - script "main.nf" - config "../../conf/test_kraken.config" - profile "test" - tag "kraken" - tag "pipeline" - - test("kraken2") { - - when { - params { - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - demultiplexer = 'bcl2fastq' - outdir = "$outputDir" - skip_tools = "checkqc,samshee" - kraken_db = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/db/kraken2.tar.gz' - - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 9 }, - { assert snapshot( - path("$outputDir/multiqc/multiqc_data/bcl2fastq_lane_counts.txt"), - path("$outputDir/multiqc/multiqc_data/fastp_filtered_reads_plot.txt"), - path("$outputDir/multiqc/multiqc_data/bcl2fastq_sample_counts.txt"), - path("$outputDir/multiqc/multiqc_data/kraken-top-n-plot.txt"), - ).match("multiqc") }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.kraken2.report.txt"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Stats/").list(), - ).match("kraken") } - ) - } - - } - -} diff --git a/tests/pipeline/kraken.nf.test.snap b/tests/pipeline/kraken.nf.test.snap deleted file mode 100644 index 45263a04..00000000 --- a/tests/pipeline/kraken.nf.test.snap +++ /dev/null @@ -1,87 +0,0 @@ -{ - "kraken": { - "content": [ - "Sample1_S1_L001.kraken2.report.txt:md5,726f60beda853ebb9134f6a712c4196b", - "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", - [ - [ - [ - [ - [ - [ - "lane.html:md5,794e48287f47a9f22dcb6b6d0c22c3eb", - "laneBarcode.html:md5,2bbdae3ee57151eab520c966597d7438" - ], - [ - - ] - ] - ], - [ - [ - [ - "lane.html:md5,f741870307050dcea79a838f5971770f", - "laneBarcode.html:md5,ffe2e863811c76cb9da27d5d124e0611" - ], - [ - "lane.html:md5,cca97e771d3491dbc8cd3fe389595b09", - "laneBarcode.html:md5,cca97e771d3491dbc8cd3fe389595b09" - ] - ], - [ - [ - "lane.html:md5,c383b0768d9978733d3f5d3b91c15af0", - "laneBarcode.html:md5,48842c23b9a2816aec540177df870968" - ], - [ - - ] - ] - ] - ], - "Report.css:md5,eb7d3eb68fc1539f411404987246b59b", - "index.html:md5,5747c407854ae2c358d0ec201ce622d8", - "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34" - ] - ], - [ - "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946", - "ConversionStats.xml:md5,8fe0f57f3f5d256a0762dba75ac62d05", - "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad", - "DemuxSummaryF1L1.txt:md5,03e5fd0c1e3079c5f8c7b4d0501b37ff", - "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1", - "Stats.json:md5,8e5f038b8aa9e465599d3575f930e604" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T17:17:23.034777828" - }, - "software_versions": { - "content": [ - "{BCL2FASTQ={bcl2fastq=2.20.0.422}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, KRAKEN2={kraken2=2.1.3, pigz=2.8}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T17:17:22.999406989" - }, - "multiqc": { - "content": [ - "bcl2fastq_lane_counts.txt:md5,9404ab530f43e442093337dd10c351c5", - "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", - "bcl2fastq_sample_counts.txt:md5,93cb0cd1aee1b464f0e640e1c3d0c142", - "kraken-top-n-plot.txt:md5,add0b89a8b3d1729dac311870959b1e7" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-02T20:52:55.269657852" - } -} diff --git a/tests/pipeline/lib/UTILS.groovy b/tests/pipeline/lib/UTILS.groovy deleted file mode 100644 index deacb586..00000000 --- a/tests/pipeline/lib/UTILS.groovy +++ /dev/null @@ -1,11 +0,0 @@ -// Function to remove Nextflow version from software_versions.yml - -class UTILS { - public static String removeNextflowVersion(outputDir) { - def softwareVersions = path("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").yaml - if (softwareVersions.containsKey("Workflow")) { - softwareVersions.Workflow.remove("Nextflow") - } - return softwareVersions - } -} diff --git a/tests/pipeline/mkfastq.nf.test b/tests/pipeline/mkfastq.nf.test deleted file mode 100644 index 584656b7..00000000 --- a/tests/pipeline/mkfastq.nf.test +++ /dev/null @@ -1,51 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - mkfastq" - script "main.nf" - profile "test_mkfastq" - tag "mkfastq" - tag "pipeline" - - test("MKFASTQ") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 10 }, - // How many directories were produced? - {assert path("${outputDir}").list().size() == 6}, - // How many files were produced? - {assert path("$outputDir/cellranger-tiny-bcl-simple/").list().size() == 2}, - {assert path("$outputDir/multiqc/").list().size() == 3}, - {assert path("$outputDir/pipeline_info/").list().size() == 5}, - // File assertions: Files that should be exactly the same with every pipeline execution. - {assert snapshot( - //Check output files - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_1.fastp.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_1.fastp.fastq.gz.md5"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_2.fastp.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_2.fastp.fastq.gz.md5"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.fastq.gz.md5"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_R1_001.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_R2_001.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/undetermined/Undetermined_S0_L001_I1_001.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/undetermined/Undetermined_S0_L001_R1_001.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/undetermined/Undetermined_S0_L001_R2_001.fastq.gz"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.html").exists(), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001.fastp.html").exists(), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001.fastp.json"), - path("${outputDir}/cellranger-tiny-bcl-simple/L001/test_sample_S1_L001_I1_001.fastp.json"), - path("${outputDir}/cellranger-tiny-bcl-simple/InterOp/IndexMetricsOut.bin") - ).match("file_assertions_mkfastq")} - ) - } - } -} diff --git a/tests/pipeline/mkfastq.nf.test.snap b/tests/pipeline/mkfastq.nf.test.snap deleted file mode 100644 index 7e6d7669..00000000 --- a/tests/pipeline/mkfastq.nf.test.snap +++ /dev/null @@ -1,37 +0,0 @@ -{ - "software_versions": { - "content": [ - "{CELLRANGER_MKFASTQ={cellranger=8.0.0}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, UNTAR_FLOWCELL={untar=1.34}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-15T17:36:35.551329" - }, - "file_assertions_mkfastq": { - "content": [ - "test_sample_S1_L001_1.fastp.fastq.gz:md5,b348491a3b1afa096fde514dbdf55215", - "test_sample_S1_L001_1.fastp.fastq.gz.md5:md5,43d7882f3aaae47b56df56da6c802236", - "test_sample_S1_L001_2.fastp.fastq.gz:md5,1c60f1f3958b8b2b0255b9fae6df0b3d", - "test_sample_S1_L001_2.fastp.fastq.gz.md5:md5,01d742cc56639c476b0bac0c094eba4b", - "test_sample_S1_L001_I1_001.fastp.fastq.gz.md5:md5,82e397b4a2418f27269a30f6ca0e349e", - "test_sample_S1_L001_I1_001.fastq.gz:md5,018b0dbd8daf76fb9f6dfa4729ea0453", - "test_sample_S1_L001_R1_001.fastq.gz:md5,df3ddf85d83bd722219c646c7815dbdc", - "test_sample_S1_L001_R2_001.fastq.gz:md5,c8a387b517ff5b7e56b85ccbf882efd2", - "Undetermined_S0_L001_I1_001.fastq.gz:md5,c93946d67bdb1d5b2ab955fd1dc9cb31", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,faa79ce215ae72fdc3375cda066c6757", - "Undetermined_S0_L001_R2_001.fastq.gz:md5,d8955db4dfbf7aee89b6bdc3b7629f8f", - true, - true, - "test_sample_S1_L001.fastp.json:md5,f616058446c5822797048ea6c5d2393d", - "test_sample_S1_L001_I1_001.fastp.json:md5,42cad4ed99a3d577f100017cbe11d711", - "IndexMetricsOut.bin:md5,e2ac28695537336b53a509f48e93ed1f" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-15T17:54:45.551098" - } -} diff --git a/tests/pipeline/sgdemux.nf.test b/tests/pipeline/sgdemux.nf.test deleted file mode 100644 index 6539dec2..00000000 --- a/tests/pipeline/sgdemux.nf.test +++ /dev/null @@ -1,83 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - Sgdemux" - script "main.nf" - profile "test_sgdemux" - tag "sgdemux" - tag "pipeline" - - test("SGDEMUX") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 128 }, - { assert snapshot( - path("$outputDir/sim-data/metrics.tsv"), - path("$outputDir/sim-data/per_project_metrics.tsv"), - path("$outputDir/sim-data/per_sample_metrics.tsv"), - path("$outputDir/sim-data/sample_barcode_hop_metrics.tsv") - ).match("sgdemux") }, - { assert new File("$outputDir/sim-data/Undetermined_S25_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/Undetermined_S25_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s10_S10_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s10_S10_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s11_S11_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s11_S11_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s12_S12_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s12_S12_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s13_S13_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s13_S13_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s14_S14_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s14_S14_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s15_S15_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s15_S15_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s16_S16_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s16_S16_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s17_S17_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s17_S17_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s18_S18_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s18_S18_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s19_S19_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s19_S19_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s1_S1_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s1_S1_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s20_S20_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s20_S20_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s21_S21_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s21_S21_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s22_S22_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s22_S22_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s23_S23_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s23_S23_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s24_S24_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s24_S24_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s2_S2_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s2_S2_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s3_S3_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s3_S3_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s4_S4_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s4_S4_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s5_S5_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s5_S5_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s6_S6_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s6_S6_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s7_S7_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s7_S7_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s8_S8_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s8_S8_L001_2.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s9_S9_L001_1.fastp.fastq.gz").exists() }, - { assert new File("$outputDir/sim-data/s9_S9_L001_2.fastp.fastq.gz").exists() } - ) - } - - } - -} diff --git a/tests/pipeline/sgdemux.nf.test.snap b/tests/pipeline/sgdemux.nf.test.snap deleted file mode 100644 index a9bda541..00000000 --- a/tests/pipeline/sgdemux.nf.test.snap +++ /dev/null @@ -1,25 +0,0 @@ -{ - "software_versions": { - "content": [ - "{FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, SGDEMUX={sgdemux=1.1.1}, UNTAR_FLOWCELL={untar=1.34}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.0" - }, - "timestamp": "2024-08-02T19:58:24.75171605" - }, - "sgdemux": { - "content": [ - "metrics.tsv:md5,7627e4bd2a56ea551fd74b4a2b5cb4b2", - "per_project_metrics.tsv:md5,7393bc580c8ed8431107ad3dd00a7d2a", - "per_sample_metrics.tsv:md5,fb8ce024ad2508e7b22a4af65fe44358", - "sample_barcode_hop_metrics.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.4" - }, - "timestamp": "2023-10-17T08:01:14+0000" - } -} diff --git a/tests/pipeline/skip_tools.nf.test b/tests/pipeline/skip_tools.nf.test deleted file mode 100644 index 4b9521ea..00000000 --- a/tests/pipeline/skip_tools.nf.test +++ /dev/null @@ -1,150 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - Skip Tools" - script "main.nf" - profile "test" - tag "skip_trimming" - tag "pipeline" - - - test("Skip Trimming") { - - when { - params { - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - demultiplexer = 'bclconvert' - outdir = "$outputDir" - trim_fastq = false - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions_skip_trimming") }, - { assert workflow.trace.succeeded().size() == 6 }, - { assert path("$outputDir/multiqc/multiqc_report.html").exists() }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz.md5"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - ).match("skip_trimming") } - ) - } - - } - - test("Skip Fastp") { - - when { - params { - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - demultiplexer = 'bclconvert' - outdir = "$outputDir" - skip_tools = "fastp,samshee" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions_skip_fastp") }, - { assert workflow.trace.succeeded().size() == 5 }, - { assert path("$outputDir/multiqc/multiqc_report.html").exists() }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz.md5"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - ).match("skip_fastp") } - ) - } - - } - - test("Skip Fastqc") { - - when { - params { - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - demultiplexer = 'bclconvert' - outdir = "$outputDir" - skip_tools = "fastqc,samshee" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions_skip_fastqc") }, - { assert workflow.trace.succeeded().size() == 6 }, - { assert path("$outputDir/multiqc/multiqc_report.html").exists() }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - ).match("skip_fastqc") } - ) - } - - } - - test("Skip Fastp & Fastqc") { - - when { - params { - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - demultiplexer = 'bclconvert' - outdir = "$outputDir" - skip_tools = "fastp,fastqc,samshee" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions_skip_fastp_fastqc") }, - { assert workflow.trace.succeeded().size() == 5 }, - { assert path("$outputDir/multiqc/multiqc_report.html").exists() }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz.md5"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - ).match("skip_fastp_fastqc") } - ) - } - - } - - test("Skip MultiQC") { - - when { - params { - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' - demultiplexer = 'bclconvert' - outdir = "$outputDir" - skip_tools = "multiqc,samshee" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions_skip_multiqc") }, - { assert workflow.trace.succeeded().size() == 5 }, - { assert !path("$outputDir/multiqc/multiqc_report.html").exists() }, - { assert snapshot( - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz"), - path("$outputDir/220422_M11111_0222_000000000-K9H97/L001/Reports/").list(), - ).match("skip_multiqc") } - ) - } - - } - -} diff --git a/tests/pipeline/skip_tools.nf.test.snap b/tests/pipeline/skip_tools.nf.test.snap deleted file mode 100644 index c30d5dac..00000000 --- a/tests/pipeline/skip_tools.nf.test.snap +++ /dev/null @@ -1,182 +0,0 @@ -{ - "software_versions_skip_trimming": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:21:22.50969783" - }, - "skip_fastqc": { - "content": [ - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", - "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", - "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", - "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", - "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", - "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", - "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", - "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", - "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", - "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:24:04.288349648" - }, - "skip_fastp": { - "content": [ - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_R1_001.fastq.gz.md5:md5,10295d4e5ca66dae7788bbf24886cded", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", - "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", - "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", - "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", - "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", - "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", - "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", - "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", - "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", - "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:22:17.56007143" - }, - "skip_multiqc": { - "content": [ - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", - "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", - "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", - "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", - "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", - "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", - "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", - "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", - "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", - "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:27:14.471150173" - }, - "skip_fastp_fastqc": { - "content": [ - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_R1_001.fastq.gz.md5:md5,10295d4e5ca66dae7788bbf24886cded", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", - "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", - "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", - "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", - "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", - "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", - "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", - "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", - "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", - "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:25:09.780834994" - }, - "software_versions_skip_fastqc": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:23:59.039256258" - }, - "software_versions_skip_fastp_fastqc": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:25:01.70585844" - }, - "software_versions_skip_multiqc": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:27:03.685153368" - }, - "software_versions_skip_fastp": { - "content": [ - "{BCLCONVERT={bclconvert=4.3.6}, FALCO={falco=1.2.1}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:22:14.728243247" - }, - "skip_trimming": { - "content": [ - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_R1_001.fastq.gz.md5:md5,10295d4e5ca66dae7788bbf24886cded", - "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", - "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", - "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", - "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", - "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", - "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", - "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", - "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", - "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", - "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", - "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", - "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-12T17:21:22.530325808" - } -} diff --git a/tests/pipeline/test_pe.nf.test b/tests/pipeline/test_pe.nf.test deleted file mode 100644 index 94a61db6..00000000 --- a/tests/pipeline/test_pe.nf.test +++ /dev/null @@ -1,44 +0,0 @@ -nextflow_pipeline { - - name "Test Workflow main.nf - Test PE" - script "main.nf" - profile "test_pe" - tag "bcl2fastq_pe" - tag "pipeline" - - test("Bcl2Fastq_pe") { - - when { - params { - outdir = "$outputDir" - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") }, - { assert workflow.trace.succeeded().size() == 7 }, - { assert snapshot( - path("$outputDir/multiqc/multiqc_data/bcl2fastq_lane_counts.txt"), - path("$outputDir/multiqc/multiqc_data/fastp_filtered_reads_plot.txt"), - path("$outputDir/multiqc/multiqc_data/bcl2fastq_sample_counts.txt") - - ).match("multiqc") }, - { assert snapshot( - path("$outputDir/PE_Sample.lane1_no_adapters.csv"), - path("$outputDir/PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz"), - path("$outputDir/PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz"), - path("$outputDir/PE_Sample/L001/Sample1_S1_L001_R1_001.fastq.gz"), - path("$outputDir/PE_Sample/L001/Sample1_S1_L001_R2_001.fastq.gz"), - path("$outputDir/PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz_summary.txt"), - path("$outputDir/PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz_summary.txt"), - path("$outputDir/PE_Sample/L001/Reports/").list(), - path("$outputDir/PE_Sample/L001/Stats/").list() - ).match("bcl2fastq_pe") } - ) - } - - } - -} diff --git a/tests/pipeline/test_pe.nf.test.snap b/tests/pipeline/test_pe.nf.test.snap deleted file mode 100644 index d93f5470..00000000 --- a/tests/pipeline/test_pe.nf.test.snap +++ /dev/null @@ -1,89 +0,0 @@ -{ - "bcl2fastq_pe": { - "content": [ - "PE_Sample.lane1_no_adapters.csv:md5,c31cca10b3a1aed8ec68daf779217d91", - "Sample1_S1_L001_1.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", - "Sample1_S1_L001_2.fastp.fastq.gz:md5,adbc8e47c8e7e902777a01ea3d73b306", - "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", - "Sample1_S1_L001_R2_001.fastq.gz:md5,146eefcab1eaaef17ffb72672c021368", - "Sample1_S1_L001_1.fastp.fastq.gz_summary.txt:md5,917b542afe3e3f178b994317c955ce02", - "Sample1_S1_L001_2.fastp.fastq.gz_summary.txt:md5,441197ccd90d2b018db631a66d6fbbb3", - [ - [ - [ - [ - [ - [ - "lane.html:md5,eca711b7312a7cf6dd32a6958b2d8812", - "laneBarcode.html:md5,b5f0e5f5730d70513defa8024913b214" - ], - [ - - ] - ] - ], - [ - [ - [ - "lane.html:md5,41ecd9ef68fc4e1cc3177c23d741428e", - "laneBarcode.html:md5,db047476a60b8dc3b83eb6a9ee77b7db" - ], - [ - "lane.html:md5,594f959553519cc6e578e8dca3da2612", - "laneBarcode.html:md5,594f959553519cc6e578e8dca3da2612" - ] - ], - [ - [ - "lane.html:md5,7ea014b0a0c9e9bb1761f291a409f9f0", - "laneBarcode.html:md5,eddae85d4b13d6fb5817df5fbfb756ff" - ], - [ - - ] - ] - ] - ], - "Report.css:md5,eb7d3eb68fc1539f411404987246b59b", - "index.html:md5,5747c407854ae2c358d0ec201ce622d8", - "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34" - ] - ], - [ - "AdapterTrimming.txt:md5,8009886a4c060bfec6d8e9346feb0988", - "ConversionStats.xml:md5,6e08faa696f3e747ec9752dc56629152", - "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad", - "DemuxSummaryF1L1.txt:md5,03e5fd0c1e3079c5f8c7b4d0501b37ff", - "FastqSummaryF1L1.txt:md5,0274549f9541b1ba7828ae6e9c5bcbbd", - "Stats.json:md5,d257fb169519c08b50179fb749d6aafa" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "23.10.1" - }, - "timestamp": "2024-08-07T15:19:05.728175" - }, - "software_versions": { - "content": [ - "{BCL2FASTQ={bcl2fastq=2.20.0.422}, FALCO={falco=1.2.1}, FASTP={fastp=0.23.4}, MD5SUM={md5sum=8.3}, Workflow={nf-core/demultiplex=v1.5.2}}" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-31T13:03:01.047096473" - }, - "multiqc": { - "content": [ - "bcl2fastq_lane_counts.txt:md5,d6054e1ec3c2e8d33c3fdee5b250dfbc", - "fastp_filtered_reads_plot.txt:md5,136a1d755ba6e790227f80cfcb4c1d62", - "bcl2fastq_sample_counts.txt:md5,93cb0cd1aee1b464f0e640e1c3d0c142" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-01T16:33:58.242361926" - } -} diff --git a/tests/sgdemux.nf.test b/tests/sgdemux.nf.test new file mode 100644 index 00000000..fdb03a0c --- /dev/null +++ b/tests/sgdemux.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - Sgdemux" + script "../main.nf" + profile "test_sgdemux" + tag "sgdemux" + tag "pipeline" + + test("SGDEMUX") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/sgdemux.nf.test.snap b/tests/sgdemux.nf.test.snap new file mode 100644 index 00000000..4bb1d806 --- /dev/null +++ b/tests/sgdemux.nf.test.snap @@ -0,0 +1,641 @@ +{ + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:42:08.871060618" + }, + "SGDEMUX": { + "content": [ + 106, + { + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "SGDEMUX": { + "sgdemux": "1.1.1" + }, + "UNTAR_FLOWCELL": { + "untar": 1.34 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-1-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc-1_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc-1_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc-1_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc-1_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/fastqc-2-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc-2_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc-2_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc-2_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc-2_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc-2_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc-2_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc-2_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc-2_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_fastqc_1.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-1-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc-1_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/fastqc-2-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc-2_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc-2_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc-2_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc-2_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-2_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-1-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/fastqc-2-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc-2_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-2_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv", + "sim-data", + "sim-data.csv", + "sim-data/Undetermined_S25_L001.fastp.html", + "sim-data/Undetermined_S25_L001.fastp.json", + "sim-data/Undetermined_S25_L001_1.fastp.fastq.gz", + "sim-data/Undetermined_S25_L001_1.fastp.fastq.gz.md5", + "sim-data/Undetermined_S25_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/Undetermined_S25_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/Undetermined_S25_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/Undetermined_S25_L001_2.fastp.fastq.gz", + "sim-data/Undetermined_S25_L001_2.fastp.fastq.gz.md5", + "sim-data/Undetermined_S25_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/Undetermined_S25_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/Undetermined_S25_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/Undetermined_S25_L001_R1_001.fastq.gz", + "sim-data/Undetermined_S25_L001_R2_001.fastq.gz", + "sim-data/metrics.tsv", + "sim-data/most_frequent_unmatched.tsv", + "sim-data/per_project_metrics.tsv", + "sim-data/per_sample_metrics.tsv", + "sim-data/s10_S10_L001.fastp.html", + "sim-data/s10_S10_L001.fastp.json", + "sim-data/s10_S10_L001_1.fastp.fastq.gz", + "sim-data/s10_S10_L001_1.fastp.fastq.gz.md5", + "sim-data/s10_S10_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s10_S10_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s10_S10_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s10_S10_L001_2.fastp.fastq.gz", + "sim-data/s10_S10_L001_2.fastp.fastq.gz.md5", + "sim-data/s10_S10_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s10_S10_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s10_S10_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s10_S10_L001_R1_001.fastq.gz", + "sim-data/s10_S10_L001_R2_001.fastq.gz", + "sim-data/s11_S11_L001.fastp.html", + "sim-data/s11_S11_L001.fastp.json", + "sim-data/s11_S11_L001_1.fastp.fastq.gz", + "sim-data/s11_S11_L001_1.fastp.fastq.gz.md5", + "sim-data/s11_S11_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s11_S11_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s11_S11_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s11_S11_L001_2.fastp.fastq.gz", + "sim-data/s11_S11_L001_2.fastp.fastq.gz.md5", + "sim-data/s11_S11_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s11_S11_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s11_S11_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s11_S11_L001_R1_001.fastq.gz", + "sim-data/s11_S11_L001_R2_001.fastq.gz", + "sim-data/s12_S12_L001.fastp.html", + "sim-data/s12_S12_L001.fastp.json", + "sim-data/s12_S12_L001_1.fastp.fastq.gz", + "sim-data/s12_S12_L001_1.fastp.fastq.gz.md5", + "sim-data/s12_S12_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s12_S12_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s12_S12_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s12_S12_L001_2.fastp.fastq.gz", + "sim-data/s12_S12_L001_2.fastp.fastq.gz.md5", + "sim-data/s12_S12_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s12_S12_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s12_S12_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s12_S12_L001_R1_001.fastq.gz", + "sim-data/s12_S12_L001_R2_001.fastq.gz", + "sim-data/s13_S13_L001.fastp.html", + "sim-data/s13_S13_L001.fastp.json", + "sim-data/s13_S13_L001_1.fastp.fastq.gz", + "sim-data/s13_S13_L001_1.fastp.fastq.gz.md5", + "sim-data/s13_S13_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s13_S13_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s13_S13_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s13_S13_L001_2.fastp.fastq.gz", + "sim-data/s13_S13_L001_2.fastp.fastq.gz.md5", + "sim-data/s13_S13_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s13_S13_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s13_S13_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s13_S13_L001_R1_001.fastq.gz", + "sim-data/s13_S13_L001_R2_001.fastq.gz", + "sim-data/s14_S14_L001.fastp.html", + "sim-data/s14_S14_L001.fastp.json", + "sim-data/s14_S14_L001_1.fastp.fastq.gz", + "sim-data/s14_S14_L001_1.fastp.fastq.gz.md5", + "sim-data/s14_S14_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s14_S14_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s14_S14_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s14_S14_L001_2.fastp.fastq.gz", + "sim-data/s14_S14_L001_2.fastp.fastq.gz.md5", + "sim-data/s14_S14_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s14_S14_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s14_S14_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s14_S14_L001_R1_001.fastq.gz", + "sim-data/s14_S14_L001_R2_001.fastq.gz", + "sim-data/s15_S15_L001.fastp.html", + "sim-data/s15_S15_L001.fastp.json", + "sim-data/s15_S15_L001_1.fastp.fastq.gz", + "sim-data/s15_S15_L001_1.fastp.fastq.gz.md5", + "sim-data/s15_S15_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s15_S15_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s15_S15_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s15_S15_L001_2.fastp.fastq.gz", + "sim-data/s15_S15_L001_2.fastp.fastq.gz.md5", + "sim-data/s15_S15_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s15_S15_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s15_S15_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s15_S15_L001_R1_001.fastq.gz", + "sim-data/s15_S15_L001_R2_001.fastq.gz", + "sim-data/s16_S16_L001.fastp.html", + "sim-data/s16_S16_L001.fastp.json", + "sim-data/s16_S16_L001_1.fastp.fastq.gz", + "sim-data/s16_S16_L001_1.fastp.fastq.gz.md5", + "sim-data/s16_S16_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s16_S16_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s16_S16_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s16_S16_L001_2.fastp.fastq.gz", + "sim-data/s16_S16_L001_2.fastp.fastq.gz.md5", + "sim-data/s16_S16_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s16_S16_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s16_S16_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s16_S16_L001_R1_001.fastq.gz", + "sim-data/s16_S16_L001_R2_001.fastq.gz", + "sim-data/s17_S17_L001.fastp.html", + "sim-data/s17_S17_L001.fastp.json", + "sim-data/s17_S17_L001_1.fastp.fastq.gz", + "sim-data/s17_S17_L001_1.fastp.fastq.gz.md5", + "sim-data/s17_S17_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s17_S17_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s17_S17_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s17_S17_L001_2.fastp.fastq.gz", + "sim-data/s17_S17_L001_2.fastp.fastq.gz.md5", + "sim-data/s17_S17_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s17_S17_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s17_S17_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s17_S17_L001_R1_001.fastq.gz", + "sim-data/s17_S17_L001_R2_001.fastq.gz", + "sim-data/s18_S18_L001.fastp.html", + "sim-data/s18_S18_L001.fastp.json", + "sim-data/s18_S18_L001_1.fastp.fastq.gz", + "sim-data/s18_S18_L001_1.fastp.fastq.gz.md5", + "sim-data/s18_S18_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s18_S18_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s18_S18_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s18_S18_L001_2.fastp.fastq.gz", + "sim-data/s18_S18_L001_2.fastp.fastq.gz.md5", + "sim-data/s18_S18_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s18_S18_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s18_S18_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s18_S18_L001_R1_001.fastq.gz", + "sim-data/s18_S18_L001_R2_001.fastq.gz", + "sim-data/s19_S19_L001.fastp.html", + "sim-data/s19_S19_L001.fastp.json", + "sim-data/s19_S19_L001_1.fastp.fastq.gz", + "sim-data/s19_S19_L001_1.fastp.fastq.gz.md5", + "sim-data/s19_S19_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s19_S19_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s19_S19_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s19_S19_L001_2.fastp.fastq.gz", + "sim-data/s19_S19_L001_2.fastp.fastq.gz.md5", + "sim-data/s19_S19_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s19_S19_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s19_S19_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s19_S19_L001_R1_001.fastq.gz", + "sim-data/s19_S19_L001_R2_001.fastq.gz", + "sim-data/s1_S1_L001.fastp.html", + "sim-data/s1_S1_L001.fastp.json", + "sim-data/s1_S1_L001_1.fastp.fastq.gz", + "sim-data/s1_S1_L001_1.fastp.fastq.gz.md5", + "sim-data/s1_S1_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s1_S1_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s1_S1_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s1_S1_L001_2.fastp.fastq.gz", + "sim-data/s1_S1_L001_2.fastp.fastq.gz.md5", + "sim-data/s1_S1_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s1_S1_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s1_S1_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s1_S1_L001_R1_001.fastq.gz", + "sim-data/s1_S1_L001_R2_001.fastq.gz", + "sim-data/s20_S20_L001.fastp.html", + "sim-data/s20_S20_L001.fastp.json", + "sim-data/s20_S20_L001_1.fastp.fastq.gz", + "sim-data/s20_S20_L001_1.fastp.fastq.gz.md5", + "sim-data/s20_S20_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s20_S20_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s20_S20_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s20_S20_L001_2.fastp.fastq.gz", + "sim-data/s20_S20_L001_2.fastp.fastq.gz.md5", + "sim-data/s20_S20_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s20_S20_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s20_S20_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s20_S20_L001_R1_001.fastq.gz", + "sim-data/s20_S20_L001_R2_001.fastq.gz", + "sim-data/s21_S21_L001.fastp.html", + "sim-data/s21_S21_L001.fastp.json", + "sim-data/s21_S21_L001_1.fastp.fastq.gz", + "sim-data/s21_S21_L001_1.fastp.fastq.gz.md5", + "sim-data/s21_S21_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s21_S21_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s21_S21_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s21_S21_L001_2.fastp.fastq.gz", + "sim-data/s21_S21_L001_2.fastp.fastq.gz.md5", + "sim-data/s21_S21_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s21_S21_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s21_S21_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s21_S21_L001_R1_001.fastq.gz", + "sim-data/s21_S21_L001_R2_001.fastq.gz", + "sim-data/s22_S22_L001.fastp.html", + "sim-data/s22_S22_L001.fastp.json", + "sim-data/s22_S22_L001_1.fastp.fastq.gz", + "sim-data/s22_S22_L001_1.fastp.fastq.gz.md5", + "sim-data/s22_S22_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s22_S22_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s22_S22_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s22_S22_L001_2.fastp.fastq.gz", + "sim-data/s22_S22_L001_2.fastp.fastq.gz.md5", + "sim-data/s22_S22_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s22_S22_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s22_S22_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s22_S22_L001_R1_001.fastq.gz", + "sim-data/s22_S22_L001_R2_001.fastq.gz", + "sim-data/s23_S23_L001.fastp.html", + "sim-data/s23_S23_L001.fastp.json", + "sim-data/s23_S23_L001_1.fastp.fastq.gz", + "sim-data/s23_S23_L001_1.fastp.fastq.gz.md5", + "sim-data/s23_S23_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s23_S23_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s23_S23_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s23_S23_L001_2.fastp.fastq.gz", + "sim-data/s23_S23_L001_2.fastp.fastq.gz.md5", + "sim-data/s23_S23_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s23_S23_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s23_S23_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s23_S23_L001_R1_001.fastq.gz", + "sim-data/s23_S23_L001_R2_001.fastq.gz", + "sim-data/s24_S24_L001.fastp.html", + "sim-data/s24_S24_L001.fastp.json", + "sim-data/s24_S24_L001_1.fastp.fastq.gz", + "sim-data/s24_S24_L001_1.fastp.fastq.gz.md5", + "sim-data/s24_S24_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s24_S24_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s24_S24_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s24_S24_L001_2.fastp.fastq.gz", + "sim-data/s24_S24_L001_2.fastp.fastq.gz.md5", + "sim-data/s24_S24_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s24_S24_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s24_S24_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s24_S24_L001_R1_001.fastq.gz", + "sim-data/s24_S24_L001_R2_001.fastq.gz", + "sim-data/s2_S2_L001.fastp.html", + "sim-data/s2_S2_L001.fastp.json", + "sim-data/s2_S2_L001_1.fastp.fastq.gz", + "sim-data/s2_S2_L001_1.fastp.fastq.gz.md5", + "sim-data/s2_S2_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s2_S2_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s2_S2_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s2_S2_L001_2.fastp.fastq.gz", + "sim-data/s2_S2_L001_2.fastp.fastq.gz.md5", + "sim-data/s2_S2_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s2_S2_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s2_S2_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s2_S2_L001_R1_001.fastq.gz", + "sim-data/s2_S2_L001_R2_001.fastq.gz", + "sim-data/s3_S3_L001.fastp.html", + "sim-data/s3_S3_L001.fastp.json", + "sim-data/s3_S3_L001_1.fastp.fastq.gz", + "sim-data/s3_S3_L001_1.fastp.fastq.gz.md5", + "sim-data/s3_S3_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s3_S3_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s3_S3_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s3_S3_L001_2.fastp.fastq.gz", + "sim-data/s3_S3_L001_2.fastp.fastq.gz.md5", + "sim-data/s3_S3_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s3_S3_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s3_S3_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s3_S3_L001_R1_001.fastq.gz", + "sim-data/s3_S3_L001_R2_001.fastq.gz", + "sim-data/s4_S4_L001.fastp.html", + "sim-data/s4_S4_L001.fastp.json", + "sim-data/s4_S4_L001_1.fastp.fastq.gz", + "sim-data/s4_S4_L001_1.fastp.fastq.gz.md5", + "sim-data/s4_S4_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s4_S4_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s4_S4_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s4_S4_L001_2.fastp.fastq.gz", + "sim-data/s4_S4_L001_2.fastp.fastq.gz.md5", + "sim-data/s4_S4_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s4_S4_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s4_S4_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s4_S4_L001_R1_001.fastq.gz", + "sim-data/s4_S4_L001_R2_001.fastq.gz", + "sim-data/s5_S5_L001.fastp.html", + "sim-data/s5_S5_L001.fastp.json", + "sim-data/s5_S5_L001_1.fastp.fastq.gz", + "sim-data/s5_S5_L001_1.fastp.fastq.gz.md5", + "sim-data/s5_S5_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s5_S5_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s5_S5_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s5_S5_L001_2.fastp.fastq.gz", + "sim-data/s5_S5_L001_2.fastp.fastq.gz.md5", + "sim-data/s5_S5_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s5_S5_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s5_S5_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s5_S5_L001_R1_001.fastq.gz", + "sim-data/s5_S5_L001_R2_001.fastq.gz", + "sim-data/s6_S6_L001.fastp.html", + "sim-data/s6_S6_L001.fastp.json", + "sim-data/s6_S6_L001_1.fastp.fastq.gz", + "sim-data/s6_S6_L001_1.fastp.fastq.gz.md5", + "sim-data/s6_S6_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s6_S6_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s6_S6_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s6_S6_L001_2.fastp.fastq.gz", + "sim-data/s6_S6_L001_2.fastp.fastq.gz.md5", + "sim-data/s6_S6_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s6_S6_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s6_S6_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s6_S6_L001_R1_001.fastq.gz", + "sim-data/s6_S6_L001_R2_001.fastq.gz", + "sim-data/s7_S7_L001.fastp.html", + "sim-data/s7_S7_L001.fastp.json", + "sim-data/s7_S7_L001_1.fastp.fastq.gz", + "sim-data/s7_S7_L001_1.fastp.fastq.gz.md5", + "sim-data/s7_S7_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s7_S7_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s7_S7_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s7_S7_L001_2.fastp.fastq.gz", + "sim-data/s7_S7_L001_2.fastp.fastq.gz.md5", + "sim-data/s7_S7_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s7_S7_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s7_S7_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s7_S7_L001_R1_001.fastq.gz", + "sim-data/s7_S7_L001_R2_001.fastq.gz", + "sim-data/s8_S8_L001.fastp.html", + "sim-data/s8_S8_L001.fastp.json", + "sim-data/s8_S8_L001_1.fastp.fastq.gz", + "sim-data/s8_S8_L001_1.fastp.fastq.gz.md5", + "sim-data/s8_S8_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s8_S8_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s8_S8_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s8_S8_L001_2.fastp.fastq.gz", + "sim-data/s8_S8_L001_2.fastp.fastq.gz.md5", + "sim-data/s8_S8_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s8_S8_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s8_S8_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s8_S8_L001_R1_001.fastq.gz", + "sim-data/s8_S8_L001_R2_001.fastq.gz", + "sim-data/s9_S9_L001.fastp.html", + "sim-data/s9_S9_L001.fastp.json", + "sim-data/s9_S9_L001_1.fastp.fastq.gz", + "sim-data/s9_S9_L001_1.fastp.fastq.gz.md5", + "sim-data/s9_S9_L001_1.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s9_S9_L001_1.fastp.fastq.gz_fastqc_report.html", + "sim-data/s9_S9_L001_1.fastp.fastq.gz_summary.txt", + "sim-data/s9_S9_L001_2.fastp.fastq.gz", + "sim-data/s9_S9_L001_2.fastp.fastq.gz.md5", + "sim-data/s9_S9_L001_2.fastp.fastq.gz_fastqc_data.txt", + "sim-data/s9_S9_L001_2.fastp.fastq.gz_fastqc_report.html", + "sim-data/s9_S9_L001_2.fastp.fastq.gz_summary.txt", + "sim-data/s9_S9_L001_R1_001.fastq.gz", + "sim-data/s9_S9_L001_R2_001.fastq.gz", + "sim-data/sample_barcode_hop_metrics.tsv" + ], + [ + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,f574676225613f374b561ef8d4779f33", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,f574676225613f374b561ef8d4779f33", + "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,c5c2bfa3d096ebeef6823d147fa652fb", + "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,c5c2bfa3d096ebeef6823d147fa652fb", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,d2c7fc0c344909e4823099492d72e209", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,d2c7fc0c344909e4823099492d72e209", + "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,d2c7fc0c344909e4823099492d72e209", + "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,d2c7fc0c344909e4823099492d72e209", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,b5e3d7a8aca6895859654a4115b38708", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,b5e3d7a8aca6895859654a4115b38708", + "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,b5e3d7a8aca6895859654a4115b38708", + "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,b5e3d7a8aca6895859654a4115b38708", + "fastp_filtered_reads_plot.txt:md5,0e60fe7db5d84497e03d814a9818e4c4", + "fastqc-1_per_base_n_content_plot.txt:md5,c0d889e3447bb580a91c26d58367ea3d", + "fastqc-1_per_base_sequence_quality_plot.txt:md5,fc98fee907d0942dc1e0a2c046e697fc", + "fastqc-1_per_sequence_gc_content_plot_Counts.txt:md5,d76e3dbdcdcbb0c5dc60912c275be5e1", + "fastqc-1_per_sequence_gc_content_plot_Percentages.txt:md5,727231c2c86c657e506296c2fda2025d", + "fastqc-1_per_sequence_quality_scores_plot.txt:md5,89cb687875c238d4920f01401635edd4", + "fastqc-1_sequence_counts_plot.txt:md5,020f9eacc4ddf1eef1f4187a3cf0122e", + "fastqc-1_sequence_duplication_levels_plot.txt:md5,3c42607c5bda6eb3d39f45982f1c8e53", + "fastqc-1_top_overrepresented_sequences_table.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "fastqc-2_per_base_n_content_plot.txt:md5,dee7d9c094c60dc3a67c4da1954303f2", + "fastqc-2_per_base_sequence_quality_plot.txt:md5,5d63f6647b7589d04bf2f2f9db88f584", + "fastqc-2_per_sequence_gc_content_plot_Counts.txt:md5,ae1a7e984622d704f03cb658d5f160f5", + "fastqc-2_per_sequence_gc_content_plot_Percentages.txt:md5,7ade5018e5188777fddc82e35b06ef3f", + "fastqc-2_per_sequence_quality_scores_plot.txt:md5,5d1d91faa379b3551b27a9b5c39ce5b0", + "fastqc-2_sequence_counts_plot.txt:md5,1d5fa5876e4261235b9fa8650ee3ff7f", + "fastqc-2_sequence_duplication_levels_plot.txt:md5,a524a5e16ed509a3615ea05aa6d36bd0", + "fastqc-2_top_overrepresented_sequences_table.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2", + "sim-data.csv:md5,a5ea0ad63c5df73b5fc2436dd8d9dbfe", + "Undetermined_S25_L001.fastp.json:md5,577922aa75bb6ab549ed7699ae45becc", + "metrics.tsv:md5,7627e4bd2a56ea551fd74b4a2b5cb4b2", + "per_project_metrics.tsv:md5,7393bc580c8ed8431107ad3dd00a7d2a", + "per_sample_metrics.tsv:md5,fb8ce024ad2508e7b22a4af65fe44358", + "s10_S10_L001.fastp.json:md5,80d48c6afeade19ad0d7abf001cd95c5", + "s11_S11_L001.fastp.json:md5,69c21db3faf4208f655d0188c64b2368", + "s12_S12_L001.fastp.json:md5,6c79234c342d223124a5ebedf05160c0", + "s13_S13_L001.fastp.json:md5,158cd7b4e8fad3d8a94589b302b83f72", + "s14_S14_L001.fastp.json:md5,afd266c7c3ec51f1a12dc8bc78a72679", + "s15_S15_L001.fastp.json:md5,ad5562b2e1dae32e7e0f2cf9b513ffc0", + "s16_S16_L001.fastp.json:md5,cb64e853c84f114a9656e3447d64ddec", + "s17_S17_L001.fastp.json:md5,9d0fb23f4f0f2f2ad884c9b0c2e63b4b", + "s18_S18_L001.fastp.json:md5,3dc0e57ad9b6e43bb5ae899271168760", + "s19_S19_L001.fastp.json:md5,4bf894d2ea823cfaa9815ade88052247", + "s1_S1_L001.fastp.json:md5,0dee4ce864b6a67bea6978c0da10324a", + "s20_S20_L001.fastp.json:md5,a68d9f92ae4d7aec288a66333f4a47a6", + "s21_S21_L001.fastp.json:md5,39b0ff239f397b3401e68a33f2cd3b9c", + "s22_S22_L001.fastp.json:md5,b53166d2c855f23743d0f97490f19188", + "s23_S23_L001.fastp.json:md5,708c0041dc1dfc697f728c04c6641b10", + "s24_S24_L001.fastp.json:md5,795c7967006f2118b5e03de8f2f725fa", + "s2_S2_L001.fastp.json:md5,b6bf8ddbc93f1902eca96b2648ee3b4c", + "s3_S3_L001.fastp.json:md5,128aaded1b45ae930d1930f9123216db", + "s4_S4_L001.fastp.json:md5,bfc777692caeef686a843bc437e95c62", + "s5_S5_L001.fastp.json:md5,6134ea1b573fcb10db241b23d45d0f7f", + "s6_S6_L001.fastp.json:md5,d469259e79944977e78398650bc044aa", + "s7_S7_L001.fastp.json:md5,7eb2472f134e22ea1923da56ff7fcd5a", + "s8_S8_L001.fastp.json:md5,5bfcfe29a43c0d0ba8fac7fc9f084f04", + "s9_S9_L001.fastp.json:md5,709a327e837b44dc186c3407b91ab9c4", + "sample_barcode_hop_metrics.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:17:55.775005215" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:42:08.83444814" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:42:08.908513986" + } +} \ No newline at end of file diff --git a/tests/skip_tools.nf.test b/tests/skip_tools.nf.test new file mode 100644 index 00000000..61cb4f9d --- /dev/null +++ b/tests/skip_tools.nf.test @@ -0,0 +1,172 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - Skip Tools" + script "../main.nf" + profile "test" + tag "skip_trimming" + tag "pipeline" + + + test("Skip Trimming") { + + when { + params { + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' + demultiplexer = 'bclconvert' + outdir = "$outputDir" + trim_fastq = false + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } + + test("Skip Fastp") { + + when { + params { + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' + demultiplexer = 'bclconvert' + outdir = "$outputDir" + skip_tools = "fastp,samshee" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Skip Fastqc") { + + when { + params { + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' + demultiplexer = 'bclconvert' + outdir = "$outputDir" + skip_tools = "fastqc,samshee" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Skip Fastp & Fastqc") { + + when { + params { + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' + demultiplexer = 'bclconvert' + outdir = "$outputDir" + skip_tools = "fastp,fastqc,samshee" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Skip MultiQC") { + + when { + params { + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/samplesheet/1.3.0/flowcell_input.csv' + demultiplexer = 'bclconvert' + outdir = "$outputDir" + skip_tools = "multiqc,samshee" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/skip_tools.nf.test.snap b/tests/skip_tools.nf.test.snap new file mode 100644 index 00000000..11d1c5ea --- /dev/null +++ b/tests/skip_tools.nf.test.snap @@ -0,0 +1,985 @@ +{ + "Skip Fastp": { + "content": [ + 7, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Cycle_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Tile_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Index_Hopping_Counts.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Tile_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/RunInfo.xml", + "220422_M11111_0222_000000000-K9H97/L001/Reports/SampleSheet.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Top_Unknown_Barcodes.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/fastq_list.csv", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bclconvert-lane-stats-table.txt", + "multiqc/multiqc_data/bclconvert-sample-stats-table.txt", + "multiqc/multiqc_data/bclconvert_lane_counts.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Index_mismatches.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bclconvert_bylane.txt", + "multiqc/multiqc_data/multiqc_bclconvert_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bclconvert-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert-sample-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bclconvert-lane-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert-sample-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bclconvert-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert-sample-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", + "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", + "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", + "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", + "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", + "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", + "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", + "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", + "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_R1_001.fastq.gz.md5:md5,10295d4e5ca66dae7788bbf24886cded", + "Sample1_S1_L001_fastqc_data.txt:md5,dc27b3ffca4e60d28ab31bba42bdb551", + "Sample1_S1_L001_summary.txt:md5,37bccdcaa1e1fe1022adebf2abad9121", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "bclconvert-lane-stats-table.txt:md5,8bff7b728d3ad67405d4742d0aa2088e", + "bclconvert-sample-stats-table.txt:md5,a6edf6b192981bd296c1eba968e4333c", + "bclconvert_lane_counts.txt:md5,a327047d0d6c7de32eef9535bb159110", + "bclconvert_sample_counts_Counts_per_lane.txt:md5,a7e57ab911ba2cf74ec7bd93b921036d", + "bclconvert_sample_counts_Index_mismatches.txt:md5,06c29164e83815c79a2b1541a4a6294e", + "fastqc_per_base_n_content_plot.txt:md5,bc2bc3f88871a2fddf04d8b499fd4e70", + "fastqc_per_base_sequence_quality_plot.txt:md5,0d82022063896dabc7ac5beb83a4bc54", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,92e5327c241881220d4cd69b8fd29e4a", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,af54f2d676305871a656e22542eb4406", + "fastqc_per_sequence_quality_scores_plot.txt:md5,4bddb539b536979f004777303a749f06", + "fastqc_sequence_counts_plot.txt:md5,32328f3e3421124466497ebebf458450", + "fastqc_sequence_duplication_levels_plot.txt:md5,a3bf17370e71c501f610c5fc6b2ec292", + "multiqc_bclconvert_bylane.txt:md5,2f779a97f3a5429454f62059a19856e6", + "multiqc_bclconvert_bysample.txt:md5,6a1ababe7d8242995ba5c5f78699cd63", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:19:55.20106833" + }, + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:59:48.514552807" + }, + "Skip Trimming": { + "content": [ + 8, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Cycle_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Tile_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Index_Hopping_Counts.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Tile_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/RunInfo.xml", + "220422_M11111_0222_000000000-K9H97/L001/Reports/SampleSheet.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Top_Unknown_Barcodes.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/fastq_list.csv", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.json", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bclconvert-lane-stats-table.txt", + "multiqc/multiqc_data/bclconvert-sample-stats-table.txt", + "multiqc/multiqc_data/bclconvert_lane_counts.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Index_mismatches.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bclconvert_bylane.txt", + "multiqc/multiqc_data/multiqc_bclconvert_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bclconvert-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert-sample-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bclconvert-lane-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert-sample-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-pct.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bclconvert-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert-sample-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-pct.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", + "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", + "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", + "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", + "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", + "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", + "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", + "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", + "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9", + "Sample1_S1_L001.fastp.json:md5,d9d2d702f3c64412a04cd0768863b1ab", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_R1_001.fastq.gz.md5:md5,10295d4e5ca66dae7788bbf24886cded", + "Sample1_S1_L001_fastqc_data.txt:md5,dc27b3ffca4e60d28ab31bba42bdb551", + "Sample1_S1_L001_summary.txt:md5,37bccdcaa1e1fe1022adebf2abad9121", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "bclconvert-lane-stats-table.txt:md5,8bff7b728d3ad67405d4742d0aa2088e", + "bclconvert-sample-stats-table.txt:md5,a6edf6b192981bd296c1eba968e4333c", + "bclconvert_lane_counts.txt:md5,a327047d0d6c7de32eef9535bb159110", + "bclconvert_sample_counts_Counts_per_lane.txt:md5,a7e57ab911ba2cf74ec7bd93b921036d", + "bclconvert_sample_counts_Index_mismatches.txt:md5,06c29164e83815c79a2b1541a4a6294e", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,8105d4ce1d752e1f8a26e4291e8d9c6c", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,0ac68e41c4de8ca35a1cd6ee7c6cb3f3", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,1701b40c23dca068210f5410788e3be1", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,35de9aebdc467b1bbc9fd1f40d3aece4", + "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", + "fastqc_per_base_n_content_plot.txt:md5,bc2bc3f88871a2fddf04d8b499fd4e70", + "fastqc_per_base_sequence_quality_plot.txt:md5,0d82022063896dabc7ac5beb83a4bc54", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,92e5327c241881220d4cd69b8fd29e4a", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,af54f2d676305871a656e22542eb4406", + "fastqc_per_sequence_quality_scores_plot.txt:md5,4bddb539b536979f004777303a749f06", + "fastqc_sequence_counts_plot.txt:md5,32328f3e3421124466497ebebf458450", + "fastqc_sequence_duplication_levels_plot.txt:md5,a3bf17370e71c501f610c5fc6b2ec292", + "multiqc_bclconvert_bylane.txt:md5,2f779a97f3a5429454f62059a19856e6", + "multiqc_bclconvert_bysample.txt:md5,6a1ababe7d8242995ba5c5f78699cd63", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:19:14.365042" + }, + "Skip MultiQC": { + "content": [ + 7, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Cycle_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Tile_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Index_Hopping_Counts.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Tile_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/RunInfo.xml", + "220422_M11111_0222_000000000-K9H97/L001/Reports/SampleSheet.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Top_Unknown_Barcodes.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/fastq_list.csv", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.json", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", + "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", + "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", + "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", + "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", + "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", + "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", + "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", + "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9", + "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", + "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", + "Sample1_S1_L001.fastp.json:md5,d9d2d702f3c64412a04cd0768863b1ab", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_fastqc_data.txt:md5,0adf4e2617f55fabba0663583c1f65b7", + "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:23:16.963681621" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:59:45.903610848" + }, + "Skip Fastp & Fastqc": { + "content": [ + 7, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Cycle_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Tile_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Index_Hopping_Counts.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Tile_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/RunInfo.xml", + "220422_M11111_0222_000000000-K9H97/L001/Reports/SampleSheet.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Top_Unknown_Barcodes.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/fastq_list.csv", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bclconvert-lane-stats-table.txt", + "multiqc/multiqc_data/bclconvert-sample-stats-table.txt", + "multiqc/multiqc_data/bclconvert_lane_counts.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Index_mismatches.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bclconvert_bylane.txt", + "multiqc/multiqc_data/multiqc_bclconvert_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bclconvert-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert-sample-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bclconvert-lane-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert-sample-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bclconvert-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert-sample-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", + "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", + "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", + "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", + "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", + "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", + "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", + "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", + "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_R1_001.fastq.gz.md5:md5,10295d4e5ca66dae7788bbf24886cded", + "Sample1_S1_L001_fastqc_data.txt:md5,dc27b3ffca4e60d28ab31bba42bdb551", + "Sample1_S1_L001_summary.txt:md5,37bccdcaa1e1fe1022adebf2abad9121", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "bclconvert-lane-stats-table.txt:md5,8bff7b728d3ad67405d4742d0aa2088e", + "bclconvert-sample-stats-table.txt:md5,a6edf6b192981bd296c1eba968e4333c", + "bclconvert_lane_counts.txt:md5,a327047d0d6c7de32eef9535bb159110", + "bclconvert_sample_counts_Counts_per_lane.txt:md5,a7e57ab911ba2cf74ec7bd93b921036d", + "bclconvert_sample_counts_Index_mismatches.txt:md5,06c29164e83815c79a2b1541a4a6294e", + "fastqc_per_base_n_content_plot.txt:md5,bc2bc3f88871a2fddf04d8b499fd4e70", + "fastqc_per_base_sequence_quality_plot.txt:md5,0d82022063896dabc7ac5beb83a4bc54", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,92e5327c241881220d4cd69b8fd29e4a", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,af54f2d676305871a656e22542eb4406", + "fastqc_per_sequence_quality_scores_plot.txt:md5,4bddb539b536979f004777303a749f06", + "fastqc_sequence_counts_plot.txt:md5,32328f3e3421124466497ebebf458450", + "fastqc_sequence_duplication_levels_plot.txt:md5,a3bf17370e71c501f610c5fc6b2ec292", + "multiqc_bclconvert_bylane.txt:md5,2f779a97f3a5429454f62059a19856e6", + "multiqc_bclconvert_bysample.txt:md5,6a1ababe7d8242995ba5c5f78699cd63", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:22:04.618283549" + }, + "Skip Fastqc": { + "content": [ + 8, + { + "BCLCONVERT": { + "bclconvert": "4.3.6" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "220422_M11111_0222_000000000-K9H97", + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv", + "220422_M11111_0222_000000000-K9H97/InterOp", + "220422_M11111_0222_000000000-K9H97/InterOp/ControlMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/CorrectedIntMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ErrorMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/ExtractionMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/QMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/InterOp/TileMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001", + "220422_M11111_0222_000000000-K9H97/L001/Reports", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Cycle_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Adapter_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Demultiplex_Tile_Stats.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/IndexMetricsOut.bin", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Index_Hopping_Counts.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Quality_Tile_Metrics.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/RunInfo.xml", + "220422_M11111_0222_000000000-K9H97/L001/Reports/SampleSheet.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/Top_Unknown_Barcodes.csv", + "220422_M11111_0222_000000000-K9H97/L001/Reports/fastq_list.csv", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.fastq.gz.md5", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001.fastp.json", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_R1_001.fastq.gz", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_fastqc_data.txt", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_report.html", + "220422_M11111_0222_000000000-K9H97/L001/Sample1_S1_L001_summary.txt", + "220422_M11111_0222_000000000-K9H97/L001/Undetermined_S0_L001_R1_001.fastq.gz", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bclconvert-lane-stats-table.txt", + "multiqc/multiqc_data/bclconvert-sample-stats-table.txt", + "multiqc/multiqc_data/bclconvert_lane_counts.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Counts_per_lane.txt", + "multiqc/multiqc_data/bclconvert_sample_counts_Index_mismatches.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bclconvert_bylane.txt", + "multiqc/multiqc_data/multiqc_bclconvert_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bclconvert-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert-sample-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Counts_per_lane-pct.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-cnt.pdf", + "multiqc/multiqc_plots/pdf/bclconvert_sample_counts_Index_mismatches-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bclconvert-lane-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert-sample-stats-table.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Counts_per_lane-pct.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-cnt.png", + "multiqc/multiqc_plots/png/bclconvert_sample_counts_Index_mismatches-pct.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bclconvert-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert-sample-stats-table.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Counts_per_lane-pct.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-cnt.svg", + "multiqc/multiqc_plots/svg/bclconvert_sample_counts_Index_mismatches-pct.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "220422_M11111_0222_000000000-K9H97.lane1_no_adapters.csv:md5,ee5db2e12754e069998b0a96e535238c", + "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953", + "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434", + "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286", + "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99", + "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e", + "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c", + "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c", + "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e", + "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c", + "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b", + "Demultiplex_Tile_Stats.csv:md5,83120160b0f22a1303fa1db31c19f6e9", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978", + "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7", + "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a", + "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a", + "SampleSheet.csv:md5,ee5db2e12754e069998b0a96e535238c", + "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc", + "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9", + "Sample1_S1_L001.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", + "Sample1_S1_L001.fastp.fastq.gz.md5:md5,c3cd96f3a22fb6afbaa1df324814d54c", + "Sample1_S1_L001.fastp.json:md5,d9d2d702f3c64412a04cd0768863b1ab", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_fastqc_data.txt:md5,0adf4e2617f55fabba0663583c1f65b7", + "Sample1_S1_L001_summary.txt:md5,510c6b8a26ff8d530950c05b3ca5a1c6", + "Undetermined_S0_L001_R1_001.fastq.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "bclconvert-lane-stats-table.txt:md5,8bff7b728d3ad67405d4742d0aa2088e", + "bclconvert-sample-stats-table.txt:md5,a6edf6b192981bd296c1eba968e4333c", + "bclconvert_lane_counts.txt:md5,a327047d0d6c7de32eef9535bb159110", + "bclconvert_sample_counts_Counts_per_lane.txt:md5,a7e57ab911ba2cf74ec7bd93b921036d", + "bclconvert_sample_counts_Index_mismatches.txt:md5,06c29164e83815c79a2b1541a4a6294e", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,8105d4ce1d752e1f8a26e4291e8d9c6c", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,0ac68e41c4de8ca35a1cd6ee7c6cb3f3", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,1701b40c23dca068210f5410788e3be1", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,35de9aebdc467b1bbc9fd1f40d3aece4", + "fastp_filtered_reads_plot.txt:md5,fa14a1941e109d4104c33db0e5fe20fc", + "fastqc_per_base_n_content_plot.txt:md5,d7db99124db8f53d82c51c779ce77463", + "fastqc_per_base_sequence_quality_plot.txt:md5,31c51bbd7d4dbb32107efa95c8a58ee5", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,842eaa1c62a8e6676b4b07226bda998b", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b231390d458d0bfdf4fa1360a776e03c", + "fastqc_per_sequence_quality_scores_plot.txt:md5,edbe64e0545cb866af73a649349d2a42", + "fastqc_sequence_counts_plot.txt:md5,662c69090978601ca7d39504b1ac736b", + "fastqc_sequence_duplication_levels_plot.txt:md5,cc02a5151984c0a9fdf8316bfb05088b", + "multiqc_bclconvert_bylane.txt:md5,2f779a97f3a5429454f62059a19856e6", + "multiqc_bclconvert_bysample.txt:md5,6a1ababe7d8242995ba5c5f78699cd63", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:21:16.816355313" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:59:51.098330417" + } +} \ No newline at end of file diff --git a/tests/test_pe.nf.test b/tests/test_pe.nf.test new file mode 100644 index 00000000..48c9d4d3 --- /dev/null +++ b/tests/test_pe.nf.test @@ -0,0 +1,40 @@ +nextflow_pipeline { + + name "Test Workflow main.nf - Test PE" + script "../main.nf" + profile "test_pe" + tag "bcl2fastq_pe" + tag "pipeline" + + test("Bcl2Fastq_pe") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/atacseq_samplesheet.csv")).match("atacseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/rnaseq_samplesheet.csv")).match("rnaseq_samplesheet") }, + { assert snapshot(UTILS.validateFastqPaths("$outputDir/samplesheet/taxprofiler_samplesheet.csv")).match("taxprofiler_samplesheet") } + ) + } + } +} diff --git a/tests/test_pe.nf.test.snap b/tests/test_pe.nf.test.snap new file mode 100644 index 00000000..97a065bc --- /dev/null +++ b/tests/test_pe.nf.test.snap @@ -0,0 +1,357 @@ +{ + "rnaseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:49:50.982685279" + }, + "atacseq_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:49:40.878739318" + }, + "Bcl2Fastq_pe": { + "content": [ + 9, + { + "BCL2FASTQ": { + "bcl2fastq": "2.20.0.422" + }, + "FALCO": { + "falco": "1.2.1" + }, + "FASTP": { + "fastp": "0.23.4" + }, + "MD5SUM": { + "md5sum": 8.3 + }, + "Workflow": { + "nf-core/demultiplex": "v1.5.3" + } + }, + [ + "PE_Sample", + "PE_Sample.lane1_no_adapters.csv", + "PE_Sample/InterOp", + "PE_Sample/InterOp/IndexMetricsOut.bin", + "PE_Sample/L001", + "PE_Sample/L001/Reports", + "PE_Sample/L001/Reports/html", + "PE_Sample/L001/Reports/html/000000000-K9H97", + "PE_Sample/L001/Reports/html/000000000-K9H97/all", + "PE_Sample/L001/Reports/html/000000000-K9H97/all/all", + "PE_Sample/L001/Reports/html/000000000-K9H97/all/all/all", + "PE_Sample/L001/Reports/html/000000000-K9H97/all/all/all/lane.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/all/all/all/laneBarcode.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/all/all/unknown", + "PE_Sample/L001/Reports/html/000000000-K9H97/default", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1/all", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1/all/lane.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1/all/laneBarcode.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1/unknown", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1/unknown/lane.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/Sample1/unknown/laneBarcode.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/all", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/all/all", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/all/all/lane.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/all/all/laneBarcode.html", + "PE_Sample/L001/Reports/html/000000000-K9H97/default/all/unknown", + "PE_Sample/L001/Reports/html/Report.css", + "PE_Sample/L001/Reports/html/index.html", + "PE_Sample/L001/Reports/html/tree.html", + "PE_Sample/L001/Sample1_S1_L001.fastp.html", + "PE_Sample/L001/Sample1_S1_L001.fastp.json", + "PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz", + "PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz.md5", + "PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz_fastqc_data.txt", + "PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz_fastqc_report.html", + "PE_Sample/L001/Sample1_S1_L001_1.fastp.fastq.gz_summary.txt", + "PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz", + "PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz.md5", + "PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz_fastqc_data.txt", + "PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz_fastqc_report.html", + "PE_Sample/L001/Sample1_S1_L001_2.fastp.fastq.gz_summary.txt", + "PE_Sample/L001/Sample1_S1_L001_R1_001.fastq.gz", + "PE_Sample/L001/Sample1_S1_L001_R2_001.fastq.gz", + "PE_Sample/L001/Stats", + "PE_Sample/L001/Stats/AdapterTrimming.txt", + "PE_Sample/L001/Stats/ConversionStats.xml", + "PE_Sample/L001/Stats/DemultiplexingStats.xml", + "PE_Sample/L001/Stats/DemuxSummaryF1L1.txt", + "PE_Sample/L001/Stats/FastqSummaryF1L1.txt", + "PE_Sample/L001/Stats/Stats.json", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/bcl2fastq-lane-stats-table.txt", + "multiqc/multiqc_data/bcl2fastq_lane_counts.txt", + "multiqc/multiqc_data/bcl2fastq_sample_counts.txt", + "multiqc/multiqc_data/bcl2fastq_undetermined.txt", + "multiqc/multiqc_data/fastp-insert-size-plot.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-gc-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-content-n-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_1_Before_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_After_filtering.txt", + "multiqc/multiqc_data/fastp-seq-quality-plot_Read_2_Before_filtering.txt", + "multiqc/multiqc_data/fastp_filtered_reads_plot.txt", + "multiqc/multiqc_data/fastqc-1-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc-1_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc-1_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc-1_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc-1_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/fastqc-2-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc-2_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc-2_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc-2_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc-2_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc-2_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc-2_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc-2_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc-2_top_overrepresented_sequences_table.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_bcl2fastq_bylane.txt", + "multiqc/multiqc_data/multiqc_bcl2fastq_bysample.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastp.txt", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_fastqc_1.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq-lane-stats-table.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_lane_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_lane_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_sample_counts-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_sample_counts-pct.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_undetermined-cnt.pdf", + "multiqc/multiqc_plots/pdf/bcl2fastq_undetermined-pct.pdf", + "multiqc/multiqc_plots/pdf/fastp-insert-size-plot.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-content-n-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_1_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_After_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp-seq-quality-plot_Read_2_Before_filtering.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastp_filtered_reads_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2-status-check-heatmap.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-2_top_overrepresented_sequences_table.pdf", + "multiqc/multiqc_plots/pdf/general_stats_table.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/bcl2fastq-lane-stats-table.png", + "multiqc/multiqc_plots/png/bcl2fastq_lane_counts-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_lane_counts-pct.png", + "multiqc/multiqc_plots/png/bcl2fastq_sample_counts-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_sample_counts-pct.png", + "multiqc/multiqc_plots/png/bcl2fastq_undetermined-cnt.png", + "multiqc/multiqc_plots/png/bcl2fastq_undetermined-pct.png", + "multiqc/multiqc_plots/png/fastp-insert-size-plot.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-gc-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-content-n-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_1_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_After_filtering.png", + "multiqc/multiqc_plots/png/fastp-seq-quality-plot_Read_2_Before_filtering.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-cnt.png", + "multiqc/multiqc_plots/png/fastp_filtered_reads_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-1-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc-1_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/fastqc-2-status-check-heatmap.png", + "multiqc/multiqc_plots/png/fastqc-2_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc-2_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc-2_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc-2_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-2_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc-2_top_overrepresented_sequences_table.png", + "multiqc/multiqc_plots/png/general_stats_table.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/bcl2fastq-lane-stats-table.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_lane_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_lane_counts-pct.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_sample_counts-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_sample_counts-pct.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_undetermined-cnt.svg", + "multiqc/multiqc_plots/svg/bcl2fastq_undetermined-pct.svg", + "multiqc/multiqc_plots/svg/fastp-insert-size-plot.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-gc-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-content-n-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_1_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_After_filtering.svg", + "multiqc/multiqc_plots/svg/fastp-seq-quality-plot_Read_2_Before_filtering.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastp_filtered_reads_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-1-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/fastqc-2-status-check-heatmap.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc-2_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc-2_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-2_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-2_top_overrepresented_sequences_table.svg", + "multiqc/multiqc_plots/svg/general_stats_table.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "samplesheet", + "samplesheet/atacseq_samplesheet.csv", + "samplesheet/rnaseq_samplesheet.csv", + "samplesheet/taxprofiler_samplesheet.csv" + ], + [ + "PE_Sample.lane1_no_adapters.csv:md5,c31cca10b3a1aed8ec68daf779217d91", + "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf", + "Report.css:md5,eb7d3eb68fc1539f411404987246b59b", + "index.html:md5,5747c407854ae2c358d0ec201ce622d8", + "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34", + "Sample1_S1_L001.fastp.json:md5,ad6e2f9b58a9d677f4eaa50353e6071d", + "Sample1_S1_L001_1.fastp.fastq.gz:md5,64639ff33d4b07d62a9079f88cbbd373", + "Sample1_S1_L001_1.fastp.fastq.gz.md5:md5,d9e351a8a996e158aec1be44440edec0", + "Sample1_S1_L001_1.fastp.fastq.gz_fastqc_data.txt:md5,2de491ae04c8eb50d4a6a5759ade8322", + "Sample1_S1_L001_1.fastp.fastq.gz_summary.txt:md5,917b542afe3e3f178b994317c955ce02", + "Sample1_S1_L001_2.fastp.fastq.gz:md5,adbc8e47c8e7e902777a01ea3d73b306", + "Sample1_S1_L001_2.fastp.fastq.gz.md5:md5,bb896815f6a2b678fe3451b80ed8c653", + "Sample1_S1_L001_2.fastp.fastq.gz_fastqc_data.txt:md5,88cc69dd5e9eb06d6045c8d9e9a98af3", + "Sample1_S1_L001_2.fastp.fastq.gz_summary.txt:md5,441197ccd90d2b018db631a66d6fbbb3", + "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b", + "Sample1_S1_L001_R2_001.fastq.gz:md5,146eefcab1eaaef17ffb72672c021368", + "AdapterTrimming.txt:md5,8009886a4c060bfec6d8e9346feb0988", + "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad", + "FastqSummaryF1L1.txt:md5,0274549f9541b1ba7828ae6e9c5bcbbd", + "bcl2fastq-lane-stats-table.txt:md5,0c16ec8dd4fdf53afcb6af57272ad92d", + "bcl2fastq_lane_counts.txt:md5,d6054e1ec3c2e8d33c3fdee5b250dfbc", + "bcl2fastq_sample_counts.txt:md5,93cb0cd1aee1b464f0e640e1c3d0c142", + "fastp-insert-size-plot.txt:md5,16f66543e78b50ef96e1ef15d0f46087", + "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,8105d4ce1d752e1f8a26e4291e8d9c6c", + "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,0ac68e41c4de8ca35a1cd6ee7c6cb3f3", + "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,9d3b2d8218d60f475e1059fe77bc0792", + "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,08cf2f62762c6b2a17c53299d63bb482", + "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,1ec69a9fd0d46a39dfb59e377733e98b", + "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,1701b40c23dca068210f5410788e3be1", + "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,35de9aebdc467b1bbc9fd1f40d3aece4", + "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,feb0492fc4a011f49b0ae771af00fad2", + "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,ced1654945cd8c6a85dbe3353959e4b1", + "fastp_filtered_reads_plot.txt:md5,136a1d755ba6e790227f80cfcb4c1d62", + "fastqc-1_per_base_n_content_plot.txt:md5,2c2e1e7e982151328380d462bf3da96a", + "fastqc-1_per_base_sequence_quality_plot.txt:md5,16c2db072409c63e9e72cc8b8efd7c1d", + "fastqc-1_per_sequence_gc_content_plot_Counts.txt:md5,9e2aa8732545bf8544e03e8451d5d200", + "fastqc-1_per_sequence_gc_content_plot_Percentages.txt:md5,2dc5206a46e9b07e971384413ce814c4", + "fastqc-1_per_sequence_quality_scores_plot.txt:md5,17187938a14b3380211306d823bcb3f8", + "fastqc-1_sequence_counts_plot.txt:md5,5ab45b6a9e87a73e919c9f27d686bf8d", + "fastqc-1_sequence_duplication_levels_plot.txt:md5,47853398841fe7f3f8e2c930b8674247", + "fastqc-1_top_overrepresented_sequences_table.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "fastqc-2_per_base_n_content_plot.txt:md5,ecb4ae5f410a79977f13f53743e61d88", + "fastqc-2_per_base_sequence_quality_plot.txt:md5,dbefa9916514fc5161c358579fbf6abd", + "fastqc-2_per_sequence_gc_content_plot_Counts.txt:md5,f1efe8f47e924cadd8a9f64b63b53d4d", + "fastqc-2_per_sequence_gc_content_plot_Percentages.txt:md5,9082529ef49895ae7cad91915745dd0d", + "fastqc-2_per_sequence_quality_scores_plot.txt:md5,9e268b16fcd8a42e771dca575a70e592", + "fastqc-2_sequence_counts_plot.txt:md5,266ea49ebc560e003e3dd1b9f4a21e0d", + "fastqc-2_sequence_duplication_levels_plot.txt:md5,02c6dcf1a65b7b3a21d8deaf70c8f3ca", + "fastqc-2_top_overrepresented_sequences_table.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "multiqc_bcl2fastq_bysample.txt:md5,bc5b6bbdcd75ead5a552cef09fc9aaec", + "multiqc_citations.txt:md5,d35df50e9903a96a2b3bce3c1fbc8ad2" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-04T22:25:46.595698154" + }, + "taxprofiler_samplesheet": { + "content": [ + true + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-30T15:50:01.08084426" + } +} \ No newline at end of file diff --git a/workflows/demultiplex.nf b/workflows/demultiplex.nf index eae296d4..cc22534d 100644 --- a/workflows/demultiplex.nf +++ b/workflows/demultiplex.nf @@ -8,15 +8,16 @@ // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main' -include { FASTQ_CONTAM_SEQTK_KRAKEN } from '../subworkflows/nf-core/fastq_contam_seqtk_kraken/main' -include { BASES_DEMULTIPLEX } from '../subworkflows/local/bases_demultiplex/main' -include { FQTK_DEMULTIPLEX } from '../subworkflows/local/fqtk_demultiplex/main' -include { MKFASTQ_DEMULTIPLEX } from '../subworkflows/local/mkfastq_demultiplex/main' -include { SINGULAR_DEMULTIPLEX } from '../subworkflows/local/singular_demultiplex/main' -include { RUNDIR_CHECKQC } from '../subworkflows/local/rundir_checkqc/main' -include { FASTQ_TO_SAMPLESHEET } from '../modules/local/fastq_to_samplesheet/main' - +include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main' +include { FASTQ_CONTAM_SEQTK_KRAKEN } from '../subworkflows/nf-core/fastq_contam_seqtk_kraken/main' +include { BASES_DEMULTIPLEX } from '../subworkflows/local/bases_demultiplex/main' +include { FQTK_DEMULTIPLEX } from '../subworkflows/local/fqtk_demultiplex/main' +include { MKFASTQ_DEMULTIPLEX } from '../subworkflows/local/mkfastq_demultiplex/main' +include { SINGULAR_DEMULTIPLEX } from '../subworkflows/local/singular_demultiplex/main' +include { RUNDIR_CHECKQC } from '../subworkflows/local/rundir_checkqc/main' +include { FASTQ_TO_SAMPLESHEET as FASTQ_TO_SAMPLESHEET_RNASEQ } from '../modules/local/fastq_to_samplesheet/main' +include { FASTQ_TO_SAMPLESHEET as FASTQ_TO_SAMPLESHEET_ATACSEQ } from '../modules/local/fastq_to_samplesheet/main' +include { FASTQ_TO_SAMPLESHEET as FASTQ_TO_SAMPLESHEET_TAXPROFILER } from '../modules/local/fastq_to_samplesheet/main' // // MODULE: Installed directly from nf-core/modules @@ -27,16 +28,12 @@ include { MULTIQC } from '../modules/nf-core/multiqc/main' include { UNTAR as UNTAR_FLOWCELL } from '../modules/nf-core/untar/main' include { UNTAR as UNTAR_KRAKEN_DB } from '../modules/nf-core/untar/main' include { MD5SUM } from '../modules/nf-core/md5sum/main' - -// -// MODULE: Local modules -// -include { SAMSHEE } from '../modules/local/samshee/main' +include { SAMSHEE } from '../modules/nf-core/samshee/main' // // FUNCTION // -include { paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_demultiplex_pipeline' @@ -59,15 +56,14 @@ workflow DEMULTIPLEX { skip_tools = params.skip_tools ? params.skip_tools.split(',') : [] // list: [falco, fastp, multiqc] sample_size = params.sample_size // int kraken_db = params.kraken_db // path - downstream_pipeline = params.downstream_pipeline // string: rnaseq, atacseq, taxprofiler - + strandedness = params.strandedness // string: auto, reverse, forward, unstranded // Channel inputs - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() - ch_multiqc_reports = Channel.empty() - checkqc_config = params.checkqc_config ? Channel.fromPath(params.checkqc_config, checkIfExists: true) : [] // file checkqc_config.yaml - ch_validator_schema = params.validator_schema ? Channel.fromPath(params.validator_schema, checkIfExists: true) : [] // file validator_schema.json + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + ch_multiqc_reports = Channel.empty() + checkqc_config = params.checkqc_config ? Channel.fromPath(params.checkqc_config, checkIfExists: true) : [] // file checkqc_config.yaml + ch_file_schema_validator = params.file_schema_validator ? Channel.fromPath(params.file_schema_validator, checkIfExists: true) : [] // file schema.json // Remove adapter from Illumina samplesheet to avoid adapter trimming in demultiplexer tools if (params.remove_adapter && (params.demultiplexer in ["bcl2fastq", "bclconvert", "mkfastq"])) { @@ -79,11 +75,11 @@ workflow DEMULTIPLEX { .map { file -> //build meta again from file name def meta_id = (file =~ /.*\/(.*?)(\.lane|_no_adapters)/)[0][1] //extracts everything from the last "/" until ".lane" or "_no_adapters" def meta_lane = (file.getName().contains('.lane')) ? (file =~ /\.lane(\d+)/)[0][1].toInteger() : null //extracts number after ".lane" until next "_", must be int to match lane value from meta - [[id: meta_id, lane: meta_lane],file] + [ [id: meta_id, lane: meta_lane], file ] } ch_samplesheet_new = ch_samplesheet .join( ch_samplesheet_no_adapter, failOnMismatch: true ) - .map{ meta,samplesheet,flowcell,lane,new_samplesheet -> [meta,new_samplesheet,flowcell,lane] } + .map{ meta, samplesheet, flowcell, lane, new_samplesheet -> [meta, new_samplesheet, flowcell, lane] } ch_samplesheet = ch_samplesheet_new } else { ch_samplesheet @@ -96,9 +92,12 @@ workflow DEMULTIPLEX { if (!("samshee" in skip_tools) && (params.demultiplexer in ["bcl2fastq", "bclconvert", "mkfastq"])){ SAMSHEE ( ch_samplesheet.map{ meta, samplesheet, flowcell, lane -> [meta,samplesheet] }, - ch_validator_schema + ch_file_schema_validator ) ch_versions = ch_versions.mix(SAMSHEE.out.versions) + ch_samplesheet = ch_samplesheet + .join(SAMSHEE.out.samplesheet) + .map{ meta, samplesheet, flowcell, lane, samplesheet_formatted -> [ meta, samplesheet_formatted, flowcell, lane ] } } // Convenience @@ -271,33 +270,32 @@ workflow DEMULTIPLEX { // Prepare metamap with fastq info ch_meta_fastq = ch_raw_fastq.map { meta, fastq_files -> // Determine the publish directory based on the lane information - def publish_dir = meta.lane ? "${params.outdir}/${meta.id}/L00${meta.lane}" : "${params.outdir}/${meta.id}" - meta.fastq_1 = "${publish_dir}/${fastq_files[0].getName()}" + meta.publish_dir = meta.lane ? "${params.outdir}/${meta.fcid}/L00${meta.lane}" : "${params.outdir}/${meta.fcid}" //Must be fcid because id gets modified + meta.fastq_1 = "${meta.publish_dir}/${fastq_files[0].getName()}" // Add full path for fastq_2 to the metadata if the sample is not single-end if (!meta.single_end) { - meta.fastq_2 = "${publish_dir}/${fastq_files[1].getName()}" + meta.fastq_2 = "${meta.publish_dir}/${fastq_files[1].getName()}" } return meta } // Module: FASTQ to samplesheet - FASTQ_TO_SAMPLESHEET(ch_meta_fastq, downstream_pipeline, 'auto') + ch_meta_fastq_rnaseq = ch_meta_fastq + FASTQ_TO_SAMPLESHEET_RNASEQ(ch_meta_fastq_rnaseq.collect(), "rnaseq", strandedness) - FASTQ_TO_SAMPLESHEET.out.samplesheet - .map { it[1] } - .collectFile(name:'tmp_samplesheet.csv', newLine: true, keepHeader: true, sort: { it.baseName }) - .map { it.text.tokenize('\n').join('\n') } - .collectFile(name:'samplesheet.csv', storeDir: "${params.outdir}/samplesheet") - .set { ch_samplesheet } + ch_meta_fastq_atacseq = ch_meta_fastq + FASTQ_TO_SAMPLESHEET_ATACSEQ(ch_meta_fastq_atacseq.collect(), "atacseq", strandedness) + ch_meta_fastq_taxprofiler = ch_meta_fastq + FASTQ_TO_SAMPLESHEET_TAXPROFILER(ch_meta_fastq_taxprofiler.collect(), "taxprofiler", strandedness) // // Collate and save software versions // softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', + name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions }